google-apps-script - 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);
}
}
此代码将调整图表的宽度,但它会更改我不想要的其他选项(例如系列颜色、轴格式)。
有没有办法保留图表的所有现有选项,除了我要更改的选项?
解决方案
如果您只需要更新图表的大小或位置,可以使用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);
参考:
推荐阅读
- python - 实时使用 cv2.CascadeClassifier() 时显示图像的延迟
- html - CSS - 空白空间之间的中心元素?
- pyspark - Hive / pyspark:为大型数据集提供非数字数据
- android - Androidx Activity API 属于哪个依赖?
- c# - C# 如何将 jwtk (IdentityServ 4) 转换为公钥 pem
- python - 如何让两个 RichText 功能互斥
- jboss - Resteasy JAXRS - 在@ApplicationPath 和@Path 注释中使用静态最终字符串
- c# - Windows 上 .NET 5.0 的 Visual Studio 输出路径
- python - MDLabel 的 Adaptive_width 属性无法正常工作
- css - 通过将其宽高比保持在 flex child 中来拉伸嵌入的视频