Google Sheets图表动态Y轴调整:获取当前可见数据系列
修正Google Apps Script实现仅基于可见图表系列动态调整Y轴范围
问题描述
现有代码会计算图表所有关联系列的极值来调整Y轴,但需求是仅针对当前可见的数据系列(如NEW_rpm、OLD_rpm)计算对应列的MIN/MAX,再将MIN减100、MAX加100来动态设置Y轴范围。
修正后的代码
function adjustChartYAxisBasedOnVisibleSeries() { // 定位目标工作表 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Frontend'); if (!sheet) { console.error('未找到名为"Frontend"的工作表'); return; } // 获取目标图表(此处假设为工作表中的第一个图表,可根据实际情况调整定位逻辑) const charts = sheet.getCharts(); if (charts.length === 0) { console.error("工作表中无图表"); return; } let chart = charts[0]; // 若需按标题定位图表,可替换为以下代码: // chart = charts.find(c => c.getOptions().get('title') === '你的图表标题'); // 收集所有可见系列的数据源范围 const visibleSeriesRanges = []; const numSeries = chart.getNumSeries(); for (let i = 0; i < numSeries; i++) { const series = chart.getSeriesAt(i); // 判断系列是否可见 if (series.isVisible()) { const dataRange = series.getRange(); visibleSeriesRanges.push(dataRange); } } if (visibleSeriesRanges.length === 0) { console.error("无可见的数据系列"); return; } // 提取所有可见系列对应列的数值数据 let allValues = []; visibleSeriesRanges.forEach(range => { const values = range.getValues().flat().filter(val => typeof val === 'number'); allValues = allValues.concat(values); }); // 计算整体MIN和MAX const minVal = Math.min(...allValues); const maxVal = Math.max(...allValues); // 调整Y轴范围并更新图表 chart = chart.modify() .setOption('vAxis.minValue', minVal - 100) .setOption('vAxis.maxValue', maxVal + 100) .build(); sheet.updateChart(chart); console.log(`Y轴范围已调整为:${minVal-100} 至 ${maxVal+100}`); }
关键修正点说明
- 仅筛选可见系列:通过
chart.getSeriesAt(i).isVisible()判断每个系列的可见状态,只收集可见系列的数据源范围,避免计算隐藏系列的数据。 - 精准提取数值数据:对每个可见系列的数据源范围,提取其中的数值类型数据(过滤非数值内容),确保极值计算准确。
- 动态调整Y轴:基于可见系列的整体MIN/MAX,按要求偏移100后设置Y轴的
minValue和maxValue,最后通过sheet.updateChart()更新图表。
使用说明
- 将代码复制到你的Google表格脚本编辑器中
- 根据实际图表的定位需求调整图表获取逻辑(比如按标题定位)
- 运行函数即可完成Y轴范围的动态调整
内容的提问来源于stack exchange,提问作者Pixelhouse
相关产品推荐
相关产品推荐

