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 当您重新创建图像时想隐藏它。
很遗憾,前面提到的OverGridImage
classis 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])
}
参考文献:
- Class OverGridImage | Apps Script | Google Developers
- OverTheGrid Image getUrl() seems to not working - Google Issue Tracker
- Google Apps Script Feature Request Form - Google Issue Tracker
- Class PropertiesService | Apps Script | Google Developers
insertImage(url, column, row, offsetX, offsetY)
- Class Spreadsheet | Apps Script
当我隐藏包含图像的行时,我一直在尝试找出一种在 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 当您重新创建图像时想隐藏它。
很遗憾,前面提到的OverGridImage
classis 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])
}
参考文献:
- Class OverGridImage | Apps Script | Google Developers
- OverTheGrid Image getUrl() seems to not working - Google Issue Tracker
- Google Apps Script Feature Request Form - Google Issue Tracker
- Class PropertiesService | Apps Script | Google Developers
insertImage(url, column, row, offsetX, offsetY)
- Class Spreadsheet | Apps Script