如何将公式生成的二维码作为图像放在谷歌文档中(导出为PDF)



我已经通过使用图像函数(=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)
    • 如果实际的电子表格与示例电子表格不同,则以下修改后的脚本不起作用。所以,请小心。在这个答案中,我使用您的示例电子表格修改了您的脚本
  • 为了从=image("https://chart.googleapis.com/....的单元格中检索图像,我建议使用UrlFetchApp检索图像blob。关于将文本替换为图像的脚本,我在这个答案中使用了我的示例脚本。
    • URL是从您检索到的公式和data中检索到的

当以上几点反映到您的脚本中时,它变成如下。

修改的脚本:

在使用此脚本之前,请设置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将表单上传的图像嵌入谷歌文档

相关内容

  • 没有找到相关文章

最新更新