【问题标题】:Google Apps Script - Using URL of File in Drive in =IMAGE() Spreadsheet FormulaGoogle Apps 脚本 - 在 =IMAGE() 电子表格公式中使用驱动器中文件的 URL
【发布时间】:2018-03-22 17:16:19
【问题描述】:

在下面的代码中,我在我的云端硬盘中获取文件的 URL,并在公式 =IMAGE() 中使用它。但是,图像未显示在单元格中。我将正在检索的 URL 复制并粘贴到我的浏览器中,它会提取图像文件。我还尝试输入不同的 URL(来自 Google 图片搜索),它在单元格中显示了图片。这是我的代码的 sn-p 不起作用:

//Function to populate Packing Instructions sheet
function createPackingInstructions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var entryFormSheet = ss.getSheetByName('Entry Form');
  var packingInstructionsSheet = ss.getSheetByName('Packing Instructions');
  var poNumber = entryFormSheet.getRange(2, 2).getValue();
  var drive = DriveApp;
  var proofHorizontal = drive.getFilesByName('PO ' + poNumber + ' Proof Horizontal.png');
  var proofRange = packingInstructionsSheet.getRange(1, 7);

  Logger.log(poNumber);

  //Starts by clearing the Instructions sheet
  packingInstructionsSheet.getRange(11, 1, 30, 11).clear();
  proofRange.clearContent();

  Logger.log(proofHorizontal.hasNext());

  //Gets image file URL
  while (proofHorizontal.hasNext()) {
    var file = proofHorizontal.next();
    var proofName = file.getName();
    var proofUrl = file.getUrl();

    Logger.log(proofName);
    Logger.log(proofUrl);

    proofRange.setFormula('IMAGE("' + proofUrl + '", 1)');
  }
}

我根据here 中的建议调整了代码以使用 URL 的永久链接版本,但它具有相同的行为;它正确输入了公式,并且 URL 在输入我的浏览器时有效,但图像不会显示在单元格中。这是更新的代码:

//Function to populate Packing Instructions sheet
function createPackingInstructions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var entryFormSheet = ss.getSheetByName('Entry Form');
  var packingInstructionsSheet = ss.getSheetByName('Packing Instructions');
  var poNumber = entryFormSheet.getRange(2, 2).getValue();
  var drive = DriveApp;
  var proofHorizontal = drive.getFilesByName('PO ' + poNumber + ' Proof Horizontal.png');
  var proofRange = packingInstructionsSheet.getRange(1, 7);
  var baseUrl = "http://drive.google.com/uc?export=view&id=";

  Logger.log(poNumber);

  //Starts by clearing the Instructions sheet
  packingInstructionsSheet.getRange(11, 1, 30, 11).clear();
  proofRange.clearContent();

  Logger.log(proofHorizontal.hasNext());

  //Gets image file URL
  while (proofHorizontal.hasNext()) {
    var file = proofHorizontal.next();
    //file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
    var proofId = file.getId();
    var proofUrl = baseUrl+proofId;

    Logger.log(proofUrl);

    proofRange.setFormula('IMAGE("' + proofUrl + '", 1)');
  }
}

【问题讨论】:

  • setFormula 方法自动添加“=”。为了确定,我尝试了两种方式;行为是相同的。
  • 当你手动输入函数时,它对你的文件链接有效吗?编辑电子表格上脚本结果的屏幕截图/链接
  • 似乎这不可能直接:webapps.stackexchange.com/questions/86081/… 您必须实施一种解决方法才能获得可托管的链接。

标签: google-apps-script google-sheets google-drive-api


【解决方案1】:

解决我自己的问题,因为我找到了一个可行的解决方案:

我上面的第二个代码示例很接近,但您需要使用 URL 的“下载”版本,而不是“查看”版本。见下文:

var baseUrl = "https://drive.google.com/uc?export=download&id=";

//Gets image file URL
while (proofHorizontal.hasNext()) {
  var file = proofHorizontal.next();
  //This line may be necessary, depending on permissions
  //file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
  var proofId = file.getId();
  var proofUrl = baseUrl+proofId;
}

这里是一些相关信息的链接:https://blog.appsevents.com/2014/04/how-to-bypass-google-drive-viewer-and.html

【讨论】:

    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多