Google电子表格脚本 - 如何测试Cell是否大胆

时间:2013-04-04 12:53:50

标签: google-apps-script google-docs google-drive-api

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

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

它错误,告诉我'cell'没有函数getFontWeight()。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:5)

您必须将单元格作为字符串传递。 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
How do I pass a cell argument from a spreadsheet to a custum function as a range?

修改
要以Dynamic的方式编写函数,需要使用内置函数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 :(得分: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

答案 2 :(得分:-1)

这很好但是由于单元格地址在&#34;&#34;&#34;&#34;&#34;&#34;&#34;注释

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(&#34;地址&#34 ;; A1)) 要么 = ifBold(CELL(&#34;地址&#34;,A1))

或者,由于您的语言区域可能会有所不同

新的Google工作表: = myFunction的(CELL(&#34;地址&#34;,A1)及;&#34;:&#34;&安培; CELL(&#34;地址&#34;,A2)) 要么 旧的谷歌表: = myFunction的(ADDRESS(行(A1),COLUMN(A1),4)及;&#34;:&#34;&安培; ADDRESS(行(A2),COLUMN(A2),4))

你可能需要改变,到;再次为此。像:

= myFunction的(CELL(&#34;地址&#34 ;; A1)及;&#34;:&#34;&安培; CELL(&#34;地址&#34 ;; A2))

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