使用Google Apps Script创建非相邻行图表时遇空参数错误求助
问题解决:Google Sheets 柱状图添加不相邻区域报错
我需要制作柱状图,用第1行作为系列名称,第6行作为对应数值,但getRange仅支持选取相邻区域。选第1、2行时getRange能正常工作,但换成第6行后,自定义函数触发错误:Exception: Argument cannot be null: a1Notation。
错误原因
你的rangeNonAdjacent函数实际返回的是数据数组,但sheet.getRange()需要的是A1表示法字符串(比如"A1:D1")或行列参数,不是数据内容。另外,Google Charts的addRange方法支持多次调用添加多个不相邻范围,无需合并数据。
修正后的代码
直接在主函数中分别添加两个不相邻的范围即可,不需要额外的自定义函数:
function colChart1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var chart = sheet.newChart() .asColumnChart() // 分别添加第1行和第6行的范围 .addRange(sheet.getRange("A1:D1")) .addRange(sheet.getRange("A6:D6")) .setPosition(5, 5, 0, 0) .setTransposeRowsAndColumns(true) .setOption('useFirstColumnAsDomain', false) .build(); sheet.insertChart(chart); }
如果需要保留自定义函数来管理范围,可以修改为返回A1表示法的数组,然后循环添加:
function getNonAdjacentRanges() { // 返回需要的不相邻范围的A1表示法 return ["A1:D1", "A6:D6"]; } function colChart1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var chartBuilder = sheet.newChart() .asColumnChart() .setPosition(5, 5, 0, 0) .setTransposeRowsAndColumns(true) .setOption('useFirstColumnAsDomain', false); // 循环添加所有不相邻范围 getNonAdjacentRanges().forEach(rangeA1 => { chartBuilder.addRange(sheet.getRange(rangeA1)); }); var chart = chartBuilder.build(); sheet.insertChart(chart); }
说明
addRange可以多次调用,每次添加一个独立的范围,不管是否相邻- 不要混淆
getRange()的参数要求:它接受A1字符串/行列参数,不接受数据数组 - 转置选项
setTransposeRowsAndColumns(true)会把行数据转为列,刚好适配第1行作为名称、第6行作为数值的需求
内容的提问来源于stack exchange,提问作者NIN
相关产品推荐
相关产品推荐

