如何让Google Sheets addRange函数反向读取单元格范围?
实现Google Apps Script折线图反向读取单元格范围
要让折线图反向读取B13到B1这类范围的数据,你可以通过两种方式实现:
方法一:直接使用反转后的数组作为数据源
无需修改原工作表内容,读取列数据后反转数组,再通过addRows()传入图表,替代原有的addRange():
function newChart() { removeChartsOne("mysheet"); const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("mysheet"); var headerRow = sheet.getRange(1,1,1,5).getValues(); // 读取列数据并反转顺序 const colB = sheet.getRange('B1:B13').getValues().reverse(); const colC = sheet.getRange('C1:C13').getValues().reverse(); const colD = sheet.getRange('D1:D13').getValues().reverse(); const colE = sheet.getRange('E1:E13').getValues().reverse(); chart = sheet.newChart() .setChartType(Charts.ChartType.LINE) // 用反转后的数组作为数据源 .addRows(colB) .addRows(colC) .addRows(colD) .addRows(colE) .setOption('title','Title') .setOption('pointShape','circle') .setOption('pointSize','7') .setPosition(5, 5, 0, 0) .setOption('series', {0:{labelInLegend:headerRow[0][2]}, 1:{labelInLegend:headerRow[0][3]}, 2:{labelInLegend:headerRow[0][4]} }) .build(); sheet.insertChart(chart); }
方法二:通过临时区域中转(支持数据自动同步)
如果需要图表随原单元格数据更新自动同步,可以把反转后的数据写入工作表空白区域,再让图表引用该区域:
function newChart() { removeChartsOne("mysheet"); const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("mysheet"); var headerRow = sheet.getRange(1,1,1,5).getValues(); // 读取并反转数据,写入临时列(示例用F-I列) const colB = sheet.getRange('B1:B13').getValues().reverse(); const colC = sheet.getRange('C1:C13').getValues().reverse(); const colD = sheet.getRange('D1:D13').getValues().reverse(); const colE = sheet.getRange('E1:E13').getValues().reverse(); sheet.getRange('F1:F13').setValues(colB); sheet.getRange('G1:G13').setValues(colC); sheet.getRange('H1:H13').setValues(colD); sheet.getRange('I1:I13').setValues(colE); chart = sheet.newChart() .setChartType(Charts.ChartType.LINE) // 引用反转后的临时区域 .addRange(sheet.getRange('F1:F13')) .addRange(sheet.getRange('G1:G13')) .addRange(sheet.getRange('H1:H13')) .addRange(sheet.getRange('I1:I13')) .setOption('title','Title') .setOption('pointShape','circle') .setOption('pointSize','7') .setPosition(5, 5, 0, 0) .setOption('series', {0:{labelInLegend:headerRow[0][2]}, 1:{labelInLegend:headerRow[0][3]}, 2:{labelInLegend:headerRow[0][4]} }) .build(); sheet.insertChart(chart); }
内容的提问来源于stack exchange,提问作者Alonso del Villar
相关产品推荐
相关产品推荐

