我如何使用Google脚本将特定的列从Google表格提取到Google文档?

问题描述 投票:0回答:1

我有一个带有动态字段标签的Google文档,例如%Name%-%Date %%] >>>,它们从A和B列的Google表格中获取值:

工作表的屏幕截图“”

您可以看到前2列中的值相同,因此Google文档中的“%”标记没有问题,因为它采用了相同的值。问题出在其他列(C,D,E ...),其中Google工作表上的值是变量。

如何在Google文档中应用一个标记,该标记可动态获取带有变量值的全部整列的值?

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9DUXdQcS5wbmcifQ==” alt =“文档截屏”>“ >>

预期结果:

enter image description here

我有一个带有动态字段标记的Google文档,例如%Name%-%Date of Birth%,它们从A和B列的google表格中获取值:表格的屏幕快照如您所见,...

  • 您要从电子表格中检索值并将其放入模板文档中。
  • 在您的电子表格中,对于所有行,例如john25/05/1998,“ A”和“ B”列的所有值都相同。
  • 您想通过用电子表格中的值替换占位符来创建一个Google文档。
    • 占位符用%括起来。
  • 您想使用Google Apps脚本来实现。
  • 我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    流量:

    此示例脚本的流程如下。

    1. 从电子表格中检索值。
    2. 创建用于放入Google文档的对象。
    3. 复制模板Google文档。
    4. 使用对象将标题值放入复制的文档中。
      • 在这种情况下,占位符将替换为检索到的值。
    5. 使用对象放置表值。
      • 在这种情况下,检索到的值将直接放在模板Document中的表中。
    6. 示例脚本:

      在运行脚本之前,请设置templateGoogleDocumentID

      function myFunction() {
        var templateGoogleDocumentID = "###";  // Please set the template Google Document ID.
      
        // 1. Retrieve values from Spreadsheet.
        var activeSheet = SpreadsheetApp.getActiveSheet();
        var values = activeSheet.getDataRange().getValues();
      
        // 2. Create an object for putting to Google Document.
        var object = {headers: {}, table: {}};
        var headerRow = values.shift();
        object.headers[headerRow[0]] = values[0][0];
        object.headers[headerRow[1]] = Utilities.formatDate(values[0][1], Session.getScriptTimeZone(), "yyyy/MM/dd");
        object.table = values.map(r => r.splice(2, 5));
      
        // 3. Copy a template Google Document.
        var copiedTemplateDoc = DriveApp.getFileById(templateGoogleDocumentID).makeCopy();
        var docId = copiedTemplateDoc.getId();
      
        // 4. Put the header values to the copied Document using the object.
        var doc = DocumentApp.openById(docId);
        var body = doc.getBody();
        Object.keys(object.headers).forEach(h => body.replaceText(`%${h.toLowerCase()}%`, object.headers[h]));
      
        // 5. Put the table values using the object.
        // If the table rows of Google Document are less than that of Spreadsheet, the rows are added.
        var table = body.getTables()[0];
        var r = object.table.length - table.getNumRows();
        if (r > 0) {
          for (var i = 0; i < r; i++) {
            var tr = table.appendTableRow();
            for (var j = 0; j < 3; j++) {
              tr.appendTableCell();
            }
          }
        }
        object.table.forEach((row, i) => (row.forEach((col, j) => (table.getCell(i, j).setText(col)))));
        doc.saveAndClose();
      
        // If you want to export the Google Document as PDF file, please use the following script.
        // var newFile = DriveApp.createFile(doc.getBlob());
      }
      

    注意:

    • 在此修改后的脚本中,请在脚本编辑器中启用V8。

      参考:

    javascript google-apps-script google-sheets google-docs
    1个回答
    0
    投票
    • 您要从电子表格中检索值并将其放入模板文档中。
    © www.soinside.com 2019 - 2024. All rights reserved.