使用Embedded Line Chart Builder的addRange方法时遇报错求助
问题解决:Google Apps Script 折线图报错修正
错误原因
EmbeddedLineChartBuilder.addRange()方法要求传入Range对象(即工作表中的单元格区域),但你传入的是getValues()返回的二维数组,导致参数类型不匹配,触发报错。
修正方案
方案1:直接引用原工作表的数据区域
不需要调用getValues(),直接获取原工作表的Range对象传给addRange():
var c_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("chart_data"); var curr_date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy"); // 插入新工作表 var new_ss = SpreadsheetApp.getActiveSpreadsheet().insertSheet('Numbers - ' + curr_date); // 获取原工作表的Range对象(而非数组) var dataRange = c_data.getRange("I2:J"); var chart_d = new_ss.newChart().asLineChart().addRange(dataRange) .setTitle("Help on the Error :(") .setXAxisTitle('Numbers') .setYAxisTitle('Months') .setPosition(5,5,0,0) .setOption('width', 700) .setOption('height', 200) .build(); // 将图表插入到新工作表 new_ss.insertChart(chart_d);
方案2:将数据复制到新工作表后再创建图表
如果希望图表的数据存储在新工作表中(而非依赖原工作表),可以先复制数据,再使用新工作表的Range:
var c_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("chart_data"); var curr_date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy"); // 插入新工作表 var new_ss = SpreadsheetApp.getActiveSpreadsheet().insertSheet('Numbers - ' + curr_date); // 获取原数据并复制到新工作表的A1起始位置 var dataValues = c_data.getRange("I2:J").getValues(); new_ss.getRange(1, 1, dataValues.length, dataValues[0].length).setValues(dataValues); // 获取新工作表的Range对象 var newDataRange = new_ss.getRange(1, 1, dataValues.length, dataValues[0].length); var chart_d = new_ss.newChart().asLineChart().addRange(newDataRange) .setTitle("Help on the Error :(") .setXAxisTitle('Numbers') .setYAxisTitle('Months') .setPosition(5,5,0,0) .setOption('width', 700) .setOption('height', 200) .build(); new_ss.insertChart(chart_d);
关键修改点
- 移除
getValues()的调用,改用getRange()获取的Range对象传入addRange() - 新增
insertChart()方法,将构建好的图表插入到目标工作表中(原代码遗漏了这一步,否则图表不会显示)
内容的提问来源于stack exchange,提问作者Tpk43
相关产品推荐
相关产品推荐

