=IMAGE("url") 具有指定的高度和自动宽度以保持纵横比

=IMAGE("url") with specified height and auto width to maintain aspect ratio

我有一列图像的 URL 具有不同的纵横比,我正在使用 =IMAGE("url") 将它们转换为图像,但希望它们都具有指定的高度,同时保持宽高比。

我想要行之间有一些白色 space,即:它们的高度会比图像高度大一点,所以第一个选项没有帮助,我不知道如何使用选项 4.

使用 "auto" 宽度

使用脚本和公式

一种可能的方法是使用脚本:

  1. 在脚本的帮助下找到 width / height
  2. 使用简单的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

希望对您有所帮助,期待更好的解决方案!