Apps脚本(Google表格):copyTo函数(粘贴值)不起作用

时间:2018-08-16 05:00:18

标签: google-apps-script google-sheets

我正在尝试使用一个应用程序脚本,该脚本会将在线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 = ....在那,代码就起作用。删除它会使图像消失。

我不想有那条线,因为它什么也没做,并且图像保留在单元格中。

1 个答案:

答案 0 :(得分:0)

根据我的经验,我认为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”。
  • 如果copyPasteupdateCells包含在同一请求正文中,则图像被删除。我认为这可能与您的脚本的情况相同。所以我把推杆公式和copyPaste分开了。

参考:

如果这不是您想要的,对不起。