【问题标题】:Fix Downloaded Image Width & Height修复下载的图像宽度和高度
【发布时间】:2022-09-28 08:57:48
【问题描述】:
我的工作表中有一个图像 URL 列表。问题是当我在一个单元格中下载图像时,它是如此之小,我想让它更大,如果存在错误的 URL,代码也会停止工作。
}
function getImages(){
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let lastRow = sheet.getLastRow();
for (let i = 0; i < lastRow-1; i++){
let url = sheet.getRange(2+i,10).getValues();
let image = SpreadsheetApp.newCellImage().setSourceUrl(url);
sheet.getRange(2+i,10).setValue(image);
}
标签:
javascript
google-apps-script
google-sheets-api
【解决方案1】:
修改点:
- 关于
The problem is when I download the image in a cell its so small and I want to make it bigger,在这种情况下,图像被放入一个单元格中。那么,如何增加单元格的宽度和高度呢?
- 关于
code stop's working if a bad URL is present.,当URL为无效URL时,sheet.getRange(2 + i, 10).setValue(image);处似乎出现错误。
- 在您的脚本中,
getValues 和 setValues 在循环中使用。在这种情况下,处理成本会变高。 Ref
当这些点反映在你的脚本中时,下面的修改怎么样?
修改后的脚本:
function getImages() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let lastRow = sheet.getLastRow();
// I modified below script.
// 1. Retrieve URLs from cells "J2:J".
const range = sheet.getRange("J2:J" + lastRow);
const values = range.getValues();
// 2. Check URLs.
const res = UrlFetchApp.fetchAll(values.map(([j]) => ({ url: j, muteHttpExceptions: true })));
// 3. Create an array including CellImage object.
const v = res.map((r, i) => [r.getResponseCode() == 200 ? SpreadsheetApp.newCellImage().setSourceUrl(values[i][0]).build() : null]);
// 4. Put the array.
range.setValues(v);
// 5. Increase row height and column width.
sheet.setRowHeights(2, lastRow - 1, 100).setColumnWidth(10, 500);
}
-
在此修改中,运行以下流程。
- 从单元格“J2:J”中检索 URL。
- 检查 URL。
- 创建一个包含 CellImage 对象的数组。
- 放置数组。
- 增加行高和列宽。
-
当您想调整行高和列宽时,请修改sheet.setRowHeights(2, lastRow - 1, 100).setColumnWidth(10, 500);。
-
在此示例中,无效的 URL 被转换为 null。如果要留下网址,请将null修改为values[i][0]。
笔记:
-
当你的脚本被修改时,也可以使用下面的修改。在这种情况下,使用 try-catch。
function getImages() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let lastRow = sheet.getLastRow();
for (let i = 0; i < lastRow - 1; i++) {
let url = sheet.getRange(2 + i, 10).getValue();
let image = SpreadsheetApp.newCellImage().setSourceUrl(url).build();
try {
sheet.getRange(2 + i, 10).setValue(image);
} catch (e) {
console.log(e.message)
}
}
sheet.setRowHeights(2, lastRow - 1, 100).setColumnWidth(10, 500);
}
参考: