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

时间:2021-04-10 21:26:34

标签: google-apps-script google-sheets google-visualization

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

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() 然后将其删除,但没有任何此类选项可供选择。

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

我相信你的目标如下。

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

要去除图表,可以使用Class Sheet中的WebClient getWebClient() { ObjectMapper objectMapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addDeserializer(MyResponse.class, new MyResponseDeserializer()); objectMapper.registerModule(simpleModule); ExchangeStrategies strategies = ExchangeStrategies .builder() .codecs(clientDefaultCodecsConfigurer -> { clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON)); clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON)); }).build(); return WebClient.builder().exchangeStrategies(strategies).build(); } Mono<List<Item>> getItems(String token) { return getWebClient() .get() .headers(httpHeaders -> httpHeaders.setBearerAuth(token)) .retrieve() .bodyToMono(MyResponse.class) .map(MyResponse::data) .retryBackoff(RetrySettings.RETRIES, RetrySettings.FIRST_BACKOFF, RetrySettings.MAX_BACKOFF) .doOnError(e -> log.error("error: " + e.getCause().toString())) } 方法。并且,可以通过removeChart的方法检索图表的坐标。使用这些方法准备好示例脚本后,变成如下所示。

示例脚本:

使用本脚本前,请设置getContainerInfosearchRowsearchColumn变量。

sheetName
  • 在此示例脚本中,放置在单元格“I1”中的图表被删除。在这种情况下,此坐标与图表的左上角相同。

注意:

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

    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);
        }
      });
    }
    

参考:

相关问题