首页 > 解决方案 > Google Apps 脚本 - 我可以修改嵌入图表的一个选项并保留其他选项吗?

问题描述

我正在尝试创建一个函数(最终是一个菜单按钮),它可以自动将工作表中的所有图表调整为定义的渲染宽度。我想保持其他图表选项(在运行此功能之前可能已从其默认值更改)完好无损。

到目前为止我的代码:

function resizeCharts() {
  var newWidth = 1000;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentSheet = ss.getActiveSheet();
  var sheetCharts = currentSheet.getCharts();

  for (var i = 0; i < sheetCharts.length; i++) {
    var modifiedChart = sheetCharts[i].modify();
    modifiedChart = modifiedChart.setOption('width', newWidth).build();
    currentSheet.updateChart(modifiedChart);
  }
}

此代码将调整图表的宽度,但它会更改我不想要的其他选项(例如系列颜色、轴格式)。

有没有办法保留图表的所有现有选项,除了我要更改的选项?

标签: google-apps-scriptgoogle-sheets

解决方案


如果您只需要更新图表的大小或位置,可以使用Advanced Sheets Service和特定的UpdateEmbeddedObjectPosition请求(无法通过内置的Spreadsheet Service获得)。

例子:

// your spreadsheet id
let ssId = SpreadsheetApp.getActiveSpreadsheet().getId();

// get all charts from sheet (replace 'YOUR_SHEET_TITLE')
let charts = Sheets.Spreadsheets
  .get(ssId)
  .sheets
  .filter(sheet => sheet.properties.title === 'YOUR_SHEET_TITLE')[0]
  .charts;

// array of requests
let requests = [];

// loop charts array
charts.forEach(chart => {

  // create request for each chart
  let request = {
    updateEmbeddedObjectPosition: {
      objectId: chart.chartId,
      newPosition: {
        overlayPosition: {
          widthPixels: 1000 // specify your width
        }
      },
      fields: 'widthPixels' // list fields you want to update
    }
  };
    
  // push request to array
  requests.push(request);

});


// send requests at once
// this may allow to improve script performance
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);

参考:


推荐阅读