【发布时间】:2018-08-16 05:00:18
【问题描述】:
我正在尝试创建一个应用程序脚本,它将在线 url 中的图像放入我工作簿的单元格中。
我在我的应用脚本中使用=IMAGE(<image url>) 公式来执行此操作。
之后我在相同的单元格上使用.copyTo 函数来删除该函数但保留图像。
问题是当我这样做时图像消失了。我让它工作的唯一方法是,如果我在设置图像函数和复制粘贴的代码之间有一个随机变量分配。对我来说,为什么代码与这一附加行一起工作是没有意义的。有什么想法吗?
function insertImage() {
var sheet = SpreadsheetApp.getActiveSheet()
var data = sheet.getRange("A1").getValue()
if (data < 2 ){
sheet.getRange("B1").setFormula('=image("https://lh3.googleusercontent.com/l6JAkhvfxbP61_FWN92j4ulDMXJNH3HT1DR6xrE7MtwW-2AxpZl_WLnBzTpWhCuYkbHihgBQ=w640-h400-e365")')
sheet.getRange("B2").setFormula('=image("https://lh3.googleusercontent.com/l6JAkhvfxbP61_FWN92j4ulDMXJNH3HT1DR6xrE7MtwW-2AxpZl_WLnBzTpWhCuYkbHihgBQ=w640-h400-e365")')
sheet.getRange("B3").setFormula('=image("https://lh3.googleusercontent.com/l6JAkhvfxbP61_FWN92j4ulDMXJNH3HT1DR6xrE7MtwW-2AxpZl_WLnBzTpWhCuYkbHihgBQ=w640-h400-e365")')
var img = sheet.getRange("B3").getValue() // doesn't work without this line
sheet.getRange('B1').copyTo(sheet.getRange('B1'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
sheet.getRange('B2').copyTo(sheet.getRange('B2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
sheet.getRange('B3').copyTo(sheet.getRange('B3'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}
}
只要有var img = ....,代码就可以工作。删除它会使图像消失。
我不想有那条线,因为它什么都不做,并且图像保留在单元格中。
【问题讨论】:
-
您想在没有公式的情况下将图像放入单元格。如果我的理解是正确的,这个解决方法怎么样?从您的情况来看,我认为由于公式放置的图像没有反映,
PASTE_VALUES可能不起作用。那么如何从var img = sheet.getRange("B3").getValue()修改为SpreadsheetApp.flush()?您可以在here 看到该文档。如果我误解了您的问题并且这不是您想要的,我很抱歉。 -
@Tanaike
SpreadsheetApp.flush()确实代替了我已经在那里的线路,这可能是比我所拥有的更好的解决方法!感谢那。我想更好的办法是在不调用工作表函数的情况下获取单元格中的图像,这样一开始就不需要删除公式。 -
感谢您的回复。我很高兴这对您的情况有用。作为其他解决方法,使用 Sheets API 怎么样?通过使用它,不需要使用
SpreadsheetApp.flush()。我将其发布为答案,因为该脚本包含一个对象。你能确认一下吗? -
我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。
标签: google-apps-script google-sheets