如何使用 Google Apps 脚本删除电子表格中特定范围内的图表集?

How to delete a chart set in a specific range in a spreadsheet, using Google Apps Script?

我在第 9 列的活动单元格行中获得了构建图表的代码。 现在,在脚本删除该图表的源 sheet 之前,我想在该特定范围(行,列)内设置图表并将其删除。

var charts1 = newSheet.getCharts();
      chart = charts1[charts1.length - 1];
      chart = newSheet.newChart()
        .asLineChart()
        .addRange(newSheet.getRange(ticker + '!M71:P175'))
        .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
        .setTransposeRowsAndColumns(false)
        .setNumHeaders(1)
        .setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
        .setOption('bubble.stroke', '#000000')
        .setOption('useFirstColumnAsDomain', false)
        // ...other .setOption()'s...
        .setOption('width', 305)
        .setPosition(activeCell, 9, 1, 1) //This is where the chart is set to be built
        .build();
      listOfStocks.insertChart(chart);

我已经尝试获取该范围,但 getCharts() 然后将其删除,但没有任何此类选项可供选择。

如何做到这一点?

我相信你的目标如下。

  • 您想使用 Google Apps 脚本使用图表上单元格的坐标删除图表。

要删除图表,可以使用ClassSheet中removeChart的方法。并且,可以通过getContainerInfo的方法检索图表的坐标。使用这些方法编写示例脚本时,变成如下。

示例脚本:

在使用此脚本之前,请设置 searchRowsearchColumnsheetName 的变量。

function myFunction() {
  const searchRow = 1;
  const searchColumn = 9;
  const sheetName = "Sheet1";

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  sheet.getCharts().forEach(c => {
    const container = c.getContainerInfo();
    if (container.getAnchorRow() == searchRow && container.getAnchorColumn() == searchColumn) {
      sheet.removeChart(c);
    }
  });
}
  • 在此示例脚本中,删除了放入单元格“I1”的图表。在这种情况下,该坐标与图表的左上角相同。

注:

  • 如果要删除“I”列中的所有图表,也可以使用以下脚本。

      const searchColumn = 9;
      const sheetName = "Sheet1";
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
      sheet.getCharts().forEach(c => {
        const container = c.getContainerInfo();
        if (container.getAnchorColumn() == searchColumn) {
          sheet.removeChart(c);
        }
      });
    

参考文献: