我相信你的目标如下。
- From
My issue is finding a way to reference a Chart in script by Name, instead of its obscure ID.
,您想要使用特定名称检索特定图表。
在此答案的示例脚本中,图表标题用作具体名称。
示例脚本:
请设置工作表名称。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const chartObj = ss.getSheetByName("Sheet1").getCharts().reduce((o, c) => Object.assign(o, {[c.getOptions().get("title")]: c}), {});
-
这样,您就可以使用图表标题检索图表对象,如下所示。
chartObj["###chart title###"]
-
当然,您可以给出其他特定名称来代替图表标题。在下面的示例脚本中,使用图表标题对应的具体名称作为键。
const chartNames = {"sampleChartTitle": "sampleName1",,,};
const ss = SpreadsheetApp.getActiveSpreadsheet();
const chartObj = ss.getSheetByName("chartSample").getCharts().reduce((o, c) => Object.assign(o, {[chartNames[c.getOptions().get("title")]]: c}), {});
- 在这种情况下,
chartObj["sampleChartTitle"]
是图表标题的图表对象"sampleName1"
.
Added 1:
从您的回复中,我了解到您想要从 Google 电子表格中的所有工作表中检索所有图表。为此,下面的示例脚本怎么样?
示例脚本1:
const ss = SpreadsheetApp.getActiveSpreadsheet();
const chartObj = ss.getSheets().reduce((o1, sheet) => {
o1[sheet.getSheetName()] = sheet.getCharts().reduce((o2, c) => Object.assign(o2, {[c.getOptions().get("title")]: c}), {});
return o1;
}, []);
- 在这种情况下,可以通过以下方式检索图表
chartObj["sheet name"]["chart title"]
.
示例脚本2:
当使用for循环修改示例脚本1时,它变成如下。在此示例脚本 2 中,结果值与示例脚本 1 相同。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
const chartObj = {};
for (let i = 0; i < sheets.length; i++) {
const charts = sheets[i].getCharts();
const temp = {};
for (let j = 0; j < charts.length; j++) {
const chart = charts[j];
temp[chart.getOptions().get("title")] = chart;
}
chartObj[sheets[i].getSheetName()] = temp;
}
Added 2:
在上面的脚本中,您可以通过以下方式检索图表对象chartObj[sheetName][chartTitle]
。但从您的回复中,我了解到您想要创建一个函数来从工作表名称和图表标题中检索图表对象。为此,下面的脚本怎么样?
function sample(sheetName, chartTitle) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);
if (!sheet) return null;
const charts = sheet.getCharts();
for (let j = 0; j < charts.length; j++) {
const chart = charts[j];
if (chart.getOptions().get("title") == chartTitle) {
return chart;
}
}
return null;
}
- 在这种情况下,您可以使用以下命令检索图表对象
sample(sheetName, chartTitle)
.