7

我需要测试给定的电子表格单元格是否为粗体。到目前为止,这是我的脚本代码。

function ifBold(cell, val1, val2) {
    if(cell.getFontWeight() == 'bold')
        return val1;
    return val2;
}

它出错,告诉我“单元格”没有函数 getFontWeight()。我怎样才能使这项工作?

4

3 回答 3

7

您必须将单元格作为字符串传递。ifBold("A1", 1, 0)

function ifBold(a1Notation, val1, val2) {
    var cell = SpreadsheetApp.getActiveSpreadsheet().getRange(a1Notation);

    if(cell.getFontWeight() == 'bold')
        return val1;
    return val2;
}

如果您传入一个单元格或范围而不将其作为字符串发送,那么它将分别作为字符串或数组接收。而且它不能作为范围对象处理。有关这方面的更多信息,请参阅以下链接:
http ://code.google.com/p/google-apps-script-issues/issues/detail
?id=354 如何将单元格参数从电子表格传递给 custum作为一个范围起作用?

编辑:
要以动态的方式编写函数,它需要使用内置函数 ROW 和 COLUMN。
=ifBold(行(A1), 列(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;
}
于 2013-04-04T15:37:17.637 回答
0

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

于 2013-04-04T14:07:30.307 回答
-1

这很好,但由于单元格地址位于“”注释中,因此无法将该函数拖到不同的单元格中。

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);
  }
}

为了能够将函数从一个单元格拖动到下一个单元格,您需要使用此功能:如果您想将其用于一个单元格:

=ifBold(CELL("address"; A1)) 或 =ifBold(CELL("address", A1))

; 或 , 可能因您的语言区域而异

新的谷歌表:=myFunction(CELL("address",A1)&":"&CELL("address",A2)) 或旧的谷歌表:=myFunction(ADDRESS(row(A1),COLUMN(A1),4) &":"&地址(行(A2),列(A2),4))

您可能需要将 , 更改为 ; 再次为此。像:

=myFunction(CELL("地址";A1)&":"&CELL("地址";A2))

参考: https ://webapps.stackexchange.com/questions/10629/how-to-pass-a-range-into-a-custom-function-in-google-spreadsheets

于 2018-05-26T02:18:00.600 回答