获取自定义函数中的单元格对象

时间:2015-10-21 12:44:47

标签: google-apps-script google-sheets

我有这个函数来获取单元格的字体颜色。测试函数工作正常(因此我得到十六进制代码#ff0000),但当我从Google电子表格调用get_color()函数时,它返回#ERROR。这似乎是因为我从函数参数中获取了一个纯字符串值,而不是Range对象。我怎么能实现它?

也许有一种更简单的方法来获取文本的字体颜色?

get_color() returns #ERROR

function test_get_color() {
  var targetId = 'xxx'
  var cell = SpreadsheetApp.openById(targetId).getSheetByName('Sheet1').getRange('B7');

  Logger.log(get_color(cell)); 
}

function get_color(cell){
  return cell.getFontColor();
}

3 个答案:

答案 0 :(得分:6)

当您通过提供范围作为参数来调用自定义函数时,该函数实际上会从该范围接收。这在Custom Functions in Google Sheets / Arguments中有记录。

对于需要实际范围引用的函数的hack,就像你的那样,是将范围作为字符串传递。

=get_color( "B7" )

这个函数是这样的:

/**
 * Get the color of text in the given cell.
 *
 * @param  {"B32"}  cell  Cell reference, enclosed in quotes.
 * @returns               The text color from the given cell.
 * @customfunction
 */
function get_color( cell ) {
  if (typeof cell !== "string")
    throw new Error( "Cell reference must be enclosed in quotes." );

  var range = SpreadsheetApp.getActiveSheet().getRange( cell );
  return range.getFontColor();
}

注意:评论块会为此功能提供Google表格自动完成帮助。有关自定义函数的详情,请参阅Did you know? (Custom Functions in Google Apps Script)

答案 1 :(得分:5)

最好的方法是使用其他参数调用自定义函数,其中包含ROW()和COLUMN()函数的结果。

当调用= MYFUNCTION(ROW(),COLUMN())时,MyFunction获取工作表中与调用函数的单元格位置相对应的单元格位置。

答案 2 :(得分:0)

您必须首先授权访问ID,因为您是通过ID打开电子表格而不是使用已经打开的活动电子表格。
如果您正在使用它并且当前电子表格将cell更改为

var cell = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getRange('B7');