我正在探索使用GAS脚本构建一个人类可读的产品目录,作为Google电子表格,从那里生成PDF或打印很容易。所有产品数据都可以通过API快速访问,包括每个产品的图像URL。
我遇到了问题,因为插入一个引用URL的图像,然后在我的原型中重新调整它的大小需要3-4秒,而且我可能有150倍的产品。运行时上限为6分钟。下面是我想象的图像处理循环的一个简化示例:
function insertImages(sheet, array_of_urls) {
for (var i in array_of_urls) {
let image = sheet.insertImage(list_of_urls[i], 1, (i+1)*3);
image.setWidth(90);
image.setHeight(90);
}
}我认为这需要很长时间,因为它与UI的交互。有人能推荐一种使脚本在功能上高效的方法吗?
发布于 2020-12-04 13:33:01
在单元格上插入图像:
如果您想要图像over cells (也就是说,不包含在一个特定的单元格中),我不认为有什么方法可以大大加快速度。没有一次插入多个图像的方法。
您最多可以尝试检索图像块,在插入图像之前通过第三方调整图像大小,最后通过insertImage(blobSource,列,行)插入它们。
无论如何,有一些方法可以通过6分钟的执行时间限制。参见,例如,这个答案。
在单元格中插入图像:
如果在特定的单元格(而不是over cells )中的图像没有问题,我建议使用setFormulas通过图像公式添加图像。
可以通过IMAGE公式设置图像大小,方法如下:
=IMAGE("URL", 4, [height in pixels], [width in pixels])此外,为了确保单元格的高度足够大,以便可以看到图像,可以使用setRowHeights。
代码片段:
function insertImages(sheet, array_of_urls) {
const formulas = array_of_urls.map(url => ["=IMAGE(\"" + url + "\", 4, 90, 90)"]);
const firstRow = 1;
sheet.getRange(firstRow,1,formulas.length,formulas[0].length).setFormulas(formulas);
sheet.setRowHeights(firstRow, formulas.length, 90);
}https://stackoverflow.com/questions/65143090
复制相似问题