gpt4 book ai didi

multithreading - 如何使用Google表格的Google App脚本进行简单的多线程处理

转载 作者:行者123 更新时间:2023-12-03 13:18:51 26 4
gpt4 key购买 nike

我有很多Google图表要更新,我想并行处理for循环。

我已经在此链接上看到了代码:Threading in Google App Script
但这太复杂了,我必须做。我不需要并行化代码并获取数据。

 for(i=0;i<nbChart;i++)
{
Vmax=rangeMax[i*6];
Vmin=rangeMinId[i*6];
id=rangeMinId[(i*6)+1];
var delta=(Vmax-Vmin)*0.1;
Logger.log("Vmax="+Vmax+"Vmin="+Vmin+"id="+id+"i="+i);
var chart = sheet.getCharts()[id];
if(chart.getType()!="COLUMN")
{
Vmin-=delta
Vmax=Number(Vmax)+(delta*1.5)//Number() function to avoid Vmax becoming a string for no reason
}
Logger.log("Vmax="+Vmax+"Vmin="+Vmin+"id="+id+"i="+i);
chart = chart.modify()
.setOption('vAxes', {0: {textStyle: {fontSize: 10}, titleTextStyle: {fontSize : 8}, viewWindow: {min: Vmin, max:Vmax}}})//adpative vaxis for AREA and COMBO
.build();
sheet.updateChart(chart);
}

我只需要快速更新图表,因为单张纸目前大约需要15分钟才能更新。

最佳答案

目前,每次循环运行时您都在调用sheet.getCharts(),这将大大增加执行时间。将函数调用置于循环之外,然后仅通过其ID引用图表即可减少循环中的函数调用次数:

var chart = sheet.getCharts();

for(i = 0; i < nbChart; i++) {
Vmax = rangeMax[i * 6];
Vmin = rangeMinId[i * 6];
id = rangeMinId[(i * 6) + 1];
var delta=(Vmax - Vmin) * 0.1;
var currChart = chart[id];

if(currChart.getType() != "COLUMN") {
Vmin -= delta
Vmax = Number(Vmax) + (delta * 1.5) //Number() function to avoid Vmax becoming a string for no reason
}
currChart = currChart.modify()
.setOption('vAxes', {0: {textStyle: {fontSize: 10}, titleTextStyle: {fontSize : 8}, viewWindow: {min: Vmin, max:Vmax}}}) //adpative vaxis for AREA and COMBO
.build();
sheet.updateChart(currChart);
}

作为另一种解决方案,如果更新图表的顺序并不重要,则可以编写具有相同循环结构但循环条件不同的第二个脚本。
如果您在两个不同的脚本中运行两个循环,一个运行 for (i = 0; i < nbChart; i = i + 2),第二个运行 for (i = 1; i < nbChart; i = i + 2),则可以设置两个可安装的触发器,以同时或以相同的 Action 运行它们,这也将减少oveall的执行时间。

关于multithreading - 如何使用Google表格的Google App脚本进行简单的多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57006432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com