我已经通过使用图像函数(=image(";https://chart.googleapis.com/....)并且想放在谷歌文档中,导出为PDF后,但它什么都不显示,我如何将电子表格中的QRcode作为图像放在文档中。感谢大家的进步。
这是代码。(仅举一例(
function createBulkPDFs(e) {
const pdfFolder = DriveApp.getFolderById("xxx");
const tempFolder = DriveApp.getFolderById("xxx");
const docFile = DriveApp.getFileById("xxx");
const ws = SpreadsheetApp.openById("xxx").getSheetByName("eee");
const range = ws.getRange(2, 1, ws.getLastRow() - 1, 6).getValues();
var data = range[range.length - 1];
createPDF(data[1],data[3], data[4], data[5], data[6], data[3] + "" + data[4], docFile, tempFolder, pdfFolder);
}
function createPDF(qcode, First, Last, address, quantity, pdfName, docFile, tempFolder, pdfFolder) {
const tempFile = docFile.makeCopy(tempFolder);
const tempDocFile = DocumentApp.openById(tempFile.getId());
const body = tempDocFile.getBody();
body.replaceText("{qr}", qcode);
body.replaceText("{fn}", First);
body.replaceText("{ln}", Last);
body.replaceText("{addr}", address);
body.replaceText("{qty}", quantity);
tempDocFile.saveAndClose();
const pdfContentBolb = tempFile.getAs("application/pdf");
const pdfFile = pdfFolder.createFile(pdfContentBolb).setName(pdfName);
tempFile.setTrashed(true);
return pdfFile;}
只想将B列放置为图像并保存为PDF。和谷歌表在这里!!点击
我相信你的目标如下。
- 您想使用谷歌应用程序脚本将值从谷歌电子表格复制到谷歌文档
- 谷歌电子表格如下
修改点:
- 当我看到您的示例电子表格和脚本时,您似乎像
createPDF(data[1],data[3], data[4], data[5], data[6], data[3] + "" + data[4], docFile, tempFolder, pdfFolder)
一样将参数发送到函数createPDF
。- 电子表格具有来自列";A";至";F";。但在你的论点中,使用了
data[6]
。在这种情况下,在body.replaceText("{qty}", quantity)
处发生错误 - 从
createPDF(qcode, First, Last, address, quantity, pdfName, docFile, tempFolder, pdfFolder)
,我认为它必须是createPDF(data[1], data[2], data[3], data[4], data[5], data[2] + "" + data[3], docFile, tempFolder, pdfFolder)
- 如果实际的电子表格与示例电子表格不同,则以下修改后的脚本不起作用。所以,请小心。在这个答案中,我使用您的示例电子表格修改了您的脚本
- 电子表格具有来自列";A";至";F";。但在你的论点中,使用了
- 为了从
=image("https://chart.googleapis.com/....
的单元格中检索图像,我建议使用UrlFetchApp检索图像blob。关于将文本替换为图像的脚本,我在这个答案中使用了我的示例脚本。- URL是从您检索到的公式和
data
中检索到的
- URL是从您检索到的公式和
当以上几点反映到您的脚本中时,它变成如下。
修改的脚本:
在使用此脚本之前,请设置xxx
的每个值。
function createBuikPDFs(e) {
const pdfFolder = DriveApp.getFolderById("xxx");
const tempFolder = DriveApp.getFolderById("xxx");
const docFile = DriveApp.getFileById("xxx");
const ws = SpreadsheetApp.openById("xxx").getSheetByName("eee");
const values = ws.getRange(2, 1, ws.getLastRow() - 1, 6).getValues();
const length = values.length;
var data = values[length - 1];
const formula = ws.getRange(length + 1, 2).getFormula();
const url = formula.replace(/=image("/i, "").replace(/chl="&.+/i, `chl=${data[5]}`);
data[1] = UrlFetchApp.fetch(url).getBlob();
createPDF(data[1], data[2], data[3], data[4], data[5], data[2] + "" + data[3], docFile, tempFolder, pdfFolder);
}
function createPDF(qcode, First, Last, address, quantity, pdfName, docFile, tempFolder, pdfFolder) {
// This function is from https://stackoverflow.com/a/51913863
var replaceTextToImage = function (body, searchText, image, width) {
var next = body.findText(searchText);
if (!next) return;
var r = next.getElement();
r.asText().setText("");
var img = r.getParent().asParagraph().insertInlineImage(0, image);
if (width && typeof width == "number") {
var w = img.getWidth();
var h = img.getHeight();
img.setWidth(width);
img.setHeight(width * h / w);
}
return next;
};
const tempFile = docFile.makeCopy(tempFolder);
const tempDocFile = DocumentApp.openById(tempFile.getId());
const body = tempDocFile.getBody();
replaceTextToImage(body, "{qr}", qcode);
body.replaceText("{fn}", First);
body.replaceText("{ln}", Last);
body.replaceText("{addr}", address);
body.replaceText("{qty}", quantity);
tempDocFile.saveAndClose();
const pdfContentBolb = tempFile.getAs("application/pdf");
const pdfFile = pdfFolder.createFile(pdfContentBolb).setName(pdfName);
tempFile.setTrashed(true);
return pdfFile;
}
注:
- 在这个修改后的脚本中,使用了您的示例电子表格。请小心
参考文献:
- 获取(url(
- 相关线程
- 使用GAS将表单上传的图像嵌入谷歌文档