谷歌电子表格脚本 - 如何测试单元格是否加粗

7

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

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

它报错,告诉我“cell”没有getFontWeight()函数。我该怎么做才能让它工作?
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
如何将电子表格中的单元格参数作为范围传递给自定义函数?

编辑:
为了以动态方式编写此函数,需要使用内置函数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;
}

1
如何计算加粗的行?即使是A1,也无法计数。错误。 - Kangarooo

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


在这个例子中,没有公式。 - Kangarooo
这是一个脚本。请尝试菜单:“工具->脚本编辑器...”。 - opowell

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

;或逗号“,”可能因您的语言区域而异。

新版Google Sheets: =myFunction(CELL("address",A1)&":"&CELL("address",A2)) 或 旧版Google Sheets: =myFunction(ADDRESS(row(A1),COLUMN(A1),4)&":"&ADDRESS(row(A2),COLUMN(A2),4))

您可能需要再次更改“,”为“;”,如下所示:

=myFunction(CELL("address";A1)&":"&CELL("address";A2))

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接