Google 工作表在隐藏行时隐藏图像

Google Sheets Hide Images When Hiding Rows

当我隐藏包含图像的行时,我一直在尝试找出一种在 google 工作表中隐藏图像的方法。

图像是一个附有 script 的按钮,这意味着我不能只使用 =IMAGE() 公式,也不能在单元格。

问题是,当我隐藏行时,图像会保留下来。有什么办法可以解决这个问题吗?

答案:

不幸的是,没有办法做到这一点。

更多信息:

Google Sheet 中的图像不是使用 =IMAGE() 公式插入的, 也不是 通过直接将图像插入单元格,由 Google Apps 脚本中的 OverGridImage 对象表示。

如您在文档中看到的那样 class、there exists no method which allows you to hide the image, other than deleting it altogether

隐藏 cells/rows/columns 也不会隐藏图像的原因是,图像没有绑定到任何单独的单元格、行或列 - 它被插入到特定 sheet.

喜忧参半:

现在,理论上,您可以做的是,将有关图像的信息存储在脚本属性中,然后 delete/insert 当您重新创建图像时想隐藏它。

很遗憾,前面提到的OverGridImageclassis bugged.getUrl()方法似乎并没有return的URL图片 - 这是我自己检查过的。

在这种情况下,我建议转到 this bug 的问题 link 并点击左上角问题编号旁边的 ☆ 让 Google 知道更多人们需要看到它。

我还建议使用 Google here 提交功能请求,详细说明您希望看到在 Google Apps 脚本中实现叠加图像的显示和隐藏。以上 link 直接用于 Apps 脚本功能请求。

对于未来的读者:如果您遇到这种情况,并且 .getUrl() 方法已修复,那么您可以使用以下函数作为变通方法来显示并隐藏图像。这使用PropertiesService将图像数据保存到脚本的属性中,然后使用它们在删除后重新插入图像。

function hideImage() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var image = ss.getImages(); // assuming this is the only image
  var url = image[0].getUrl();
  var col = image[0].getAnchorCell().getColumn();
  var row = image[0].getAnchorCell().getRow();
  var xOffset = image[0].getAnchorCellXOffset();
  var yOffset = image[0].getAnchorCellYOffset();
  
  var details = [url, col, row, xOffset, yOffset];
  console.log(details);
  PropertiesService.getScriptProperties().setProperty("image", details.toString());
  image[0].remove();  
}

function showImage() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var details = PropertiesService.getScriptProperties().getProperty("image").split(",");
     
  // change for your sheet name
  ss.getSheetByName("Sheet1")
    .insertImage(details[0], details[1], details[2], details[3], details[4])
  
}

参考文献: