=IMAGE("url") 具有指定的高度和自动宽度以保持纵横比
=IMAGE("url") with specified height and auto width to maintain aspect ratio
我有一列图像的 URL 具有不同的纵横比,我正在使用 =IMAGE("url") 将它们转换为图像,但希望它们都具有指定的高度,同时保持宽高比。
我想要行之间有一些白色 space,即:它们的高度会比图像高度大一点,所以第一个选项没有帮助,我不知道如何使用选项 4.
使用 "auto" 宽度
使用脚本和公式
一种可能的方法是使用脚本:
- 在脚本的帮助下找到
width / height
- 使用简单的
image
函数
我没有找到在 google 工作表脚本中获取图像大小的简单方法。因此,此解决方案不能用于自定义公式。 运行 脚本的唯一方法是直接执行,或将其分配给按钮。看例子:
在我的 example file 中,您可以将图片的网址粘贴到 A 列中,然后单击图片(按钮)刷新 width / height
参数。这将需要一些时间,具体取决于图片的数量。
单元格 C2 中的公式为:
=IMAGE(A2,4,26,26*B2)
。
如果你愿意,你也可以把它变成一个数组公式,使用:
=ArrayFormula(IMAGE(A2:A11,4,26,26*B2:B11))
26号是适合我的图片高度,根据需要更改。
所需代码:
function returnDims(){
var sheet = SpreadsheetApp.getActiveSheet();
var lRow = sheet.getLastRow();
var imgUrl = '';
for (var i = 2; i <= lRow; i++) {
r1 = sheet.getRange(i, 1);
imgUrl = r1.getValue();
if (imgUrl != ''){
imageSize(imgUrl, i, 2);
Utilities.sleep(2000);
}
}
}
function imageSize(imgUrl, r, c) {
if (typeof imgUrl == 'undefined') {
imgUrl = 'http://www.google.com/intl/en_ALL/images/logo.gif';
}
var t = '';
t += '<script>\n';
t += 'function hd(){\n';
t += 'var img = new Image();\n';
t += 'img.onload = function() {\n';
t += "google.script.run.returnVal(this.width / this.height, " + r + ", " + c + ");\n";
t += '}\n';
t += "img.src = '" + imgUrl + "';\n";
t += '}\n';
t += 'google.script.run.withSuccessHandler(google.script.host.close)\n';
t += '.returnVal(hd(), ' + r + ', ' + c + ');\n';
t += '</script>\n';
var output = HtmlService.createHtmlOutput(t);
output.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(output,'please, wait...');
output.clear();
}
function returnVal(h, r, c) {
Logger.log(h);
var sheet = SpreadsheetApp.getActiveSheet();
var R = sheet.getRange(r, c);
if (h != '') {
R.setValue(h);}
}
如果您的图片很大,您可能需要增加此代码中的暂停:Utilities.sleep(2000);
到更大的数字。
参考资料
我借用了一些很好的代码:
- here
- here
- here
- and here
希望对您有所帮助,期待更好的解决方案!
我有一列图像的 URL 具有不同的纵横比,我正在使用 =IMAGE("url") 将它们转换为图像,但希望它们都具有指定的高度,同时保持宽高比。
我想要行之间有一些白色 space,即:它们的高度会比图像高度大一点,所以第一个选项没有帮助,我不知道如何使用选项 4.
使用 "auto" 宽度使用脚本和公式
一种可能的方法是使用脚本:
- 在脚本的帮助下找到
width / height
- 使用简单的
image
函数
我没有找到在 google 工作表脚本中获取图像大小的简单方法。因此,此解决方案不能用于自定义公式。 运行 脚本的唯一方法是直接执行,或将其分配给按钮。看例子:
在我的 example file 中,您可以将图片的网址粘贴到 A 列中,然后单击图片(按钮)刷新 width / height
参数。这将需要一些时间,具体取决于图片的数量。
单元格 C2 中的公式为:
=IMAGE(A2,4,26,26*B2)
。
如果你愿意,你也可以把它变成一个数组公式,使用:
=ArrayFormula(IMAGE(A2:A11,4,26,26*B2:B11))
26号是适合我的图片高度,根据需要更改。
所需代码:
function returnDims(){
var sheet = SpreadsheetApp.getActiveSheet();
var lRow = sheet.getLastRow();
var imgUrl = '';
for (var i = 2; i <= lRow; i++) {
r1 = sheet.getRange(i, 1);
imgUrl = r1.getValue();
if (imgUrl != ''){
imageSize(imgUrl, i, 2);
Utilities.sleep(2000);
}
}
}
function imageSize(imgUrl, r, c) {
if (typeof imgUrl == 'undefined') {
imgUrl = 'http://www.google.com/intl/en_ALL/images/logo.gif';
}
var t = '';
t += '<script>\n';
t += 'function hd(){\n';
t += 'var img = new Image();\n';
t += 'img.onload = function() {\n';
t += "google.script.run.returnVal(this.width / this.height, " + r + ", " + c + ");\n";
t += '}\n';
t += "img.src = '" + imgUrl + "';\n";
t += '}\n';
t += 'google.script.run.withSuccessHandler(google.script.host.close)\n';
t += '.returnVal(hd(), ' + r + ', ' + c + ');\n';
t += '</script>\n';
var output = HtmlService.createHtmlOutput(t);
output.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(output,'please, wait...');
output.clear();
}
function returnVal(h, r, c) {
Logger.log(h);
var sheet = SpreadsheetApp.getActiveSheet();
var R = sheet.getRange(r, c);
if (h != '') {
R.setValue(h);}
}
如果您的图片很大,您可能需要增加此代码中的暂停:Utilities.sleep(2000);
到更大的数字。
参考资料
我借用了一些很好的代码:
- here
- here
- here
- and here
希望对您有所帮助,期待更好的解决方案!