google-apps-script - 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 Drive 中的图片插入到 Google Docs 文档正文中。
解决方案
使用InlineImage
元素(类)和对应的appendImage()
orinsertImage()
方法。这通过三个简单的步骤完成:
- 访问您的图像文件(例如
DriveApp.getFileById()
或类似文件,由您决定); - 通过方法获取文件数据作为
Blob
类实例getBlob()
; - 调用
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);
}
参考
推荐阅读
- flutter - 如何使用 darkTheme 在颤动中更改主题:
- r - 如何使用 ggplot2 从条形图中的多列中绘制 3 个单个数字?
- java - 如何在maven中做多个生成源代码的主类
- python - 在不更改python中的数字的情况下将变量的类型从十六进制字符串转换为uint_32
- css - 仅使用 Typescript 编译 css 文件
- nginx - 如何配置 nginx 以尾登录 Web 浏览器
- angular - 无法将 Web API 核心与 Angular 结合起来
- angular - 即使我从 Material Angular 完全复制它,dataSource 也没有显示
我知道我的问题很奇怪,但我的问题正是标题所说的。
mat-table dataSource
即使我已经尝试使用,我也没有显示任何数据console.log("My Data : ", this.dataSaource)
。不仅如此,我的控制台很干净,没有任何错误。这是我第一次使用php - Laravel 循环过滤 uuid 字符
- javascript - 如何从状态数组创建下拉列表?