首页 > 解决方案 > Google Script 正在输出图像文件路径而不是图像

问题描述

我正在开发一个应用程序,用于处理水处理和废物管理的网站。

此应用程序正在使用 appsheet.com 开发

Appsheet 使用电子表格创建应用程序,并将所有输入到应用程序中的数据存储在这些电子表格中。

我有一个从电子表格中提取数据并将其应用于 Google 文档模板的脚本。

在模板的末尾有一个签名部分。

Appsheet 具有内置的签名功能,可将这些签名作为 png 文件存储在子文件夹中。

在电子表格中,图像保存为文件路径,如此处所示

这里

运行时,脚本将此解释为您看到的文本并将其应用于我的模板。

我需要能够阅读并应用图像,而不是文件路径。

我尝试使用 Apps Script Reference 中解释的各种图像类,但没有一个对我有用。

function chooseRowMethod(templateId){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var dataRange = sheet.getDataRange();
 var values = dataRange.getValues();
 var data = sheet.getRange(2, 2, 11, 18).getValues();//starting with row 2 and column 1 as our upper-left most column, get values from cells from 1 row down, and 15 columns along - hence (2,1,1,15)
 var docTitle = sheet.getRange(2, 2, 11, 1).getValues();//this is grabbing the data in field B2
 var docTitleTagNumber = sheet.getRange(2, 3, 11, 1).getValues();
 var today = new Date();
 var dd = today.getDate();
 var mm = today.getMonth() + 1;
 var yyyy = today.getFullYear();
 today = dd + '/' + mm + '/' + yyyy;

 for(var i = 0; i < values.length; i++){
   for(var j = 0; j < values[i].length; j++){
     if(values[i][j] == response){
       Logger.log(i);
       var row = data[i - 1];
       var docId = DriveApp.getFileById(templateId).makeCopy().getId();
       var doc = DocumentApp.openById(docId);
       var body = doc.getActiveSection();
       body.replaceText("%SITEID%", row[0]);
       ...
       body.replaceText("%SIGNED%", row[16]);
       doc.saveAndClose();

       var file = DriveApp.getFileById(doc.getId());
       var newFolder = DriveApp.getFolderById("16wRGBVdV0OZ5YfKhqEQSFMsux-ekGCCa");
       newFolder.addFile(file); 
       var newDocTitle = docTitle[i - 1][0];
       var newDocTagNumber = docTitleTagNumber[i - 1][0];

       doc.setName(newDocTitle + " " + newDocTagNumber + " " + today);
     }
   }
 } 
}

我知道这body.replaceText()条线完全按照它说的那样做。我试过使用body.setImage(),但这也没有得到任何结果。

预期结果是从其文件夹中获取的图片,并使用电子表格中给出的文件路径应用于模板。

标签: google-apps-scriptgoogle-sheetsgoogle-docs

解决方案


问题

您想将 Google Drive 中的图片插入到 Google Docs 文档正文中。

解决方案

使用InlineImage元素(类)和对应的appendImage()orinsertImage()方法。这通过三个简单的步骤完成:

  1. 访问您的图像文件(例如DriveApp.getFileById()或类似文件,由您决定);
  2. 通过方法获取文件数据作为Blob类实例getBlob()
  3. 调用appendImage()insertImage()使用 blob 作为参数(注意insertImage()需要子元素索引作为其第一个参数)。

样本

function insertImage() {
  var doc = DocumentApp.create('TEST');
  var body = doc.getBody();
  var image = DriveApp.getFileById('yourIdHere').getBlob();
  var inline = body.appendImage(image);
}

参考

  1. insertImage()方法参考
  2. appendImage()方法参考
  3. getBlob()方法参考

推荐阅读