1

我希望能够让用户选择一个月份范围(即开始月份和结束月份),然后根据选择更新我的图表。在此示例中,时间为 2021 年 1 月至 9 月。我编写了另一个脚本,该脚本执行查询以根据用户选择的范围选择数据子集。这行得通,但是当我运行“更新”脚本时,我需要在现有图表中添加/修改范围。我有一整页图表,我希望能够以编程方式使用更新的范围更新每个图表。

我终于得到了一个可以修改标题和副标题的脚本,但它不会更新数据系列。有时它会做一个,有时会做2个,有时会做一个。我不明白。这些语句看起来与我手动执行并记录宏时记录的几乎相同,但它不起作用。这是我的第一次 googlescript 尝试,因此方法、类、语法等一直是导航的噩梦。任何帮助将非常感激。

第 1 行应该是横轴 第 2 行是数据 第 3 行是数据 第 4 行是数据

function modify(sheet) {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet = ss.getSheets()[1]; // "access data on the second sheet"
ss.setActiveSheet(sheet);
var lastColumn = sheet.getRange('W6').getValue(); //for this example 'W6" contains 'J" because the example goes from column A to Column J

var charts = sheet.getCharts();
var chart = charts[0]; // access the first graph
var ranges = chart.getRanges();
var range = ranges[0]; // access the first range

var rangeA1Notation = "A109:" + lastColumn + "109"; //row 109 column A contains the label "Month Year"
var rangeA1Notation2 = "A110:" + lastColumn + "110";//row 110 column A contains the label "Revenue", Cols B through J have dollar values
var rangeA1Notation3 = "A111:" + lastColumn + "111";//row 110 column A contains the label "Coll Goal", Cols B through J have dollar values
var rangeA1Notation4 = "A112:" + lastColumn + "112";//row 110 column A contains the label "Collected", Cols B through J have dollar values

chart = chart.modify()
.removeRange(range)
.setOption("title", "Collections by Month " + rangeA1Notation)
.setOption("subtitle", "Jan 2021 - Sep 2021" + rangeA1Notation2)
//.addRange(range).setTransposeRowsAndColumns(true).setOption("useFirstColumnAsDomain", true) 
//This did not work
.addRange(sheet.getRange(rangeA1Notation))
.addRange(sheet.getRange(rangeA1Notation2))
.addRange(sheet.getRange(rangeA1Notation3))
.addRange(sheet.getRange(rangeA1Notation4))
.build();

sheet.updateChart(chart)
}

示例数据如下所示,工作表/选项卡名称在图像上:

在此处输入图像描述

4

2 回答 2

0

您可能想在 Google 的问题跟踪器上检查此问题。

您无法使用该modify方法修改图表的原因似乎是因为这是 Google 方面一直存在的问题。我建议您在此问题上加注星标,因为任何更新都会在此处发布。

于 2021-09-21T11:18:32.200 回答
0

我终于让它工作了。我放弃了 chart.modify 方法并使用了 sheet.removeChart(chart)、chart = sheet.newChart() 和 sheet.insertChart(chart) 并且它有效。我仍然想知道 chart.modify 是否可以工作或为什么不能工作。

function buildLineChart() {
var spreadsheet = SpreadsheetApp.getActive();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1]; // "access data on the second sheet"

var sheet = spreadsheet.getActiveSheet();
var lastColumn = sheet.getRange('W6').getValue(); //sets the start and end value 
for columns

var rangeA1Notation = "A109:" + lastColumn + "109"; //row 109 column A contains 
the label "Month Year"
var rangeA1Notation2 = "A110:" + lastColumn + "110";//row 110 column A contains 
the label "Revenue" and data
var rangeA1Notation3 = "A111:" + lastColumn + "111";//row 111 column A contains 
the label "Coll Goal" and data
var rangeA1Notation4 = "A112:" + lastColumn + "112";//row 112 column A contains 
the label "Collected" and data


//removes and updates first chart
var charts = sheet.getCharts();
var chart = charts[0];
sheet.removeChart(chart);
chart = sheet.newChart()
.asLineChart()
.addRange(spreadsheet.getRange(rangeA1Notation))
.addRange(spreadsheet.getRange(rangeA1Notation2))
.addRange(spreadsheet.getRange(rangeA1Notation3))
.addRange(spreadsheet.getRange(rangeA1Notation4))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
.setTransposeRowsAndColumns(true)
.setNumHeaders(-1)
.setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
.setOption('bubble.stroke', '#000000')
.setOption('useFirstColumnAsDomain', false)
.setOption('subtitle', 'Jan 2021 - Sep 2021')
.setOption('title', 'Collections by Month')
.setOption('annotations.domain.textStyle.color', '#808080')
.setOption('textStyle.color', '#000000')
.setOption('legend.textStyle.color', '#1a1a1a')
.setOption('subtitleTextStyle.color', '#999999')
.setOption('titleTextStyle.color', '#757575')
.setOption('annotations.total.textStyle.color', '#808080')
.setOption('hAxis.textStyle.color', '#000000')
.setOption('hAxis.titleTextStyle.color', '#000000')
.setOption('vAxes.0.textStyle.color', '#000000')
.setOption('height', 248)
.setOption('width', 896)
.setPosition(6, 1, 10, 10)
.build();
sheet.insertChart(chart);
}
于 2021-09-18T18:32:31.077 回答