特定のスプレッドシートのセルが太字フォントであるかどうかをテストする必要があります。これはこれまでのスクリプト コードです。
function ifBold(cell, val1, val2) {
if(cell.getFontWeight() == 'bold')
return val1;
return val2;
}
「セル」には関数 getFontWeight() がないことを示すエラーが表示されます。どうすればこれを機能させることができますか?
特定のスプレッドシートのセルが太字フォントであるかどうかをテストする必要があります。これはこれまでのスクリプト コードです。
function ifBold(cell, val1, val2) {
if(cell.getFontWeight() == 'bold')
return val1;
return val2;
}
「セル」には関数 getFontWeight() がないことを示すエラーが表示されます。どうすればこれを機能させることができますか?
セルを文字列として渡す必要があります。ifBold("A1", 1, 0)
function ifBold(a1Notation, val1, val2) {
var cell = SpreadsheetApp.getActiveSpreadsheet().getRange(a1Notation);
if(cell.getFontWeight() == 'bold')
return val1;
return val2;
}
セルまたは範囲を文字列として送信せずに渡すと、それぞれ文字列または配列として受信されます。また、Range Object として処理することはできません。詳細については、次のリンクを参照してください:
http://code.google.com/p/google-apps-script-issues/issues/detail?id=354
スプレッドシートからカスタムにセル引数を渡す方法レンジとして機能?
編集:
動的な方法で関数を記述するには、組み込み関数 ROW および COLUMN を使用する必要があります。
=ifBold(ROW(A1), COLUMN(A1), 1, 0)
function ifBold(row, column, val1, val2) {
var range = SpreadsheetApp.getActiveSpreadsheet().getDataRange().getCell(row, column);
if(range.getFontWeight() == 'bold')
return val1;
return val2;
}
getFontWeight() は Range の関数であるため、上記の関数に渡すものが Range オブジェクト (sheet.getRange(...)) である限り、機能するはずです。
https://developers.google.com/apps-script/reference/spreadsheet/range
これは、A のすべての要素が太字かどうかをチェックする一般的なスクリプトです。
function ifBold() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Bold');
var cells = sheet.getRange('A2:A');
for (var i=1; i <= cells.getNumRows(); i++) {
var isBold = false;
if(cells.getCell(i, 1).getFontWeight() == 'bold')
isBold = true;
sheet.getRange(i+1, 2).setValue(isBold);
}
}
例を参照してください:
https://docs.google.com/spreadsheet/ccc?key=0AmR0r1Y14zgydG03QS1Dd0dLRDA3SWgtLXp6TzV3d3c#gid=3