如何通过Google Apps Script设置可更新折线图为虚线样式
Google Sheets Apps Script 实现折线图虚实线切换
我在Google Sheets中配置了图表,已能通过点击按钮触发Apps Script修改折线颜色,代码如下:
function change() { var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName("sheet"); var chart = sheet.getCharts()[0]; chart = chart.modify() .setOption('colors', ['#3465a4', '#A2BEE2', '#76a5af', '#B2CCD2']) .build(); sheet.updateChart(chart); }
但尝试用lineDashStyle切换折线虚实线时始终失败,测试代码如下:
chart = chart.modify() .setOption('lineDashStyle', [4,4]) .build(); sheet.updateChart(chart);
需求是完全通过脚本实现切换,不允许手动操作。
问题原因
lineDashStyle是系列级别的配置项,不能直接通过全局setOption设置,必须针对单个折线系列单独配置。
正确实现方案
方案1:给指定系列设置虚线样式
如果要给第一个折线系列(索引0)设置4像素实线+4像素空白的虚线样式,代码如下:
function setLineDash() { var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName("sheet"); var chart = sheet.getCharts()[0]; // 获取图表现有配置 var chartConfig = chart.getOptions(); // 初始化系列配置(若为空) var series = chartConfig.get('series') || {}; // 给第一个系列设置虚线样式 series['0'] = series['0'] || {}; series['0'].lineDashStyle = [4, 4]; // 重构并更新图表 chart = chart.modify() .setOption('series', series) .build(); sheet.updateChart(chart); }
方案2:实现虚实线一键切换
如果需要点击按钮在实线和虚线之间切换,可先读取当前系列的样式状态,再进行切换:
function toggleLineDash() { var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName("sheet"); var chart = sheet.getCharts()[0]; var chartConfig = chart.getOptions(); var series = chartConfig.get('series') || {}; var targetSeries = series['0'] || {}; // 判断当前样式并切换 if (targetSeries.lineDashStyle && targetSeries.lineDashStyle.length > 0) { // 当前是虚线,切换为实线(删除样式属性) delete targetSeries.lineDashStyle; } else { // 当前是实线,切换为虚线 targetSeries.lineDashStyle = [4, 4]; } series['0'] = targetSeries; chart = chart.modify() .setOption('series', series) .build(); sheet.updateChart(chart); }
补充说明
lineDashStyle的数组参数规则:第一个值为实线长度,第二个值为空白长度,例如[5,2]表示5像素实线+2像素空白;设置为空数组或删除该属性则恢复为实线。- 多系列场景下,只需修改对应的系列索引(如
series['1']对应第二个折线系列)即可。
内容的提问来源于stack exchange,提问作者Michel Penke
相关产品推荐
相关产品推荐

