我有这个函数来获取单元格的字体颜色。测试函数工作正常(因此我得到十六进制代码#ff0000
),但当我从Google电子表格调用get_color()
函数时,它返回#ERROR
。这似乎是因为我从函数参数中获取了一个纯字符串值,而不是Range对象。我怎么能实现它?
也许有一种更简单的方法来获取文本的字体颜色?
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();
}
答案 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');