【问题标题】:Apps Script (Google Sheets): copyTo function (Paste Values) does not workApps 脚本(Google 表格):copyTo 功能(粘贴值)不起作用
【发布时间】: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


【解决方案1】:

根据我的经验,我认为 Sheets API 可能能够用于您的情况。所以当我尝试它时,我确认它在我的环境中工作。那么作为其他解决方法,如何使用 Sheets API 如下?在这种情况下,不需要使用SpreadsheetApp.flush()

在此脚本中,使用 Sheets API 将公式放入单元格中。并使用 SpreadsheetApp 复制该值。

示例脚本:

当您使用此脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API。您可以在here 了解如何启用 Sheets API。

var spreadsheetId = "### spreadsheetId ###";
var sheetId = "### sheetId ###";
var url = "### url ###";

var resource = {"requests": [{
  "updateCells": {
    "rows": [{"values": [{"userEnteredValue": {"formulaValue": "=image(\"" + url + "\")"}}]}],
    "range": {"sheetId": sheetId, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 1, "endColumnIndex": 2},
    "fields": "userEnteredValue.formulaValue"
  }
}]};
Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId);
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('B1').copyTo(sheet.getRange('B1'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

注意:

  • 在运行此脚本之前,请设置电子表格Id、sheetId 和url。
  • 在此脚本中,使用了 UpdateCellsRequest。 "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 1, "endColumnIndex": 2 表示“B1”。
  • copyPaste 包含在与updateCells 相同的请求正文中时,图像被删除。我认为这可能与您的脚本的情况相同。所以我把put formula和copyPaste分开了。

参考:

如果这不是你想要的,我很抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2018-10-22
    • 2012-07-26
    相关资源
    最近更新 更多