如何从谷歌电子表格中获取谷歌文档中的段落,并为文档创建链接?

这是我发布的previous question的续篇。我是这个网站的新手,也是Google脚本的新手,请原谅我对脚本的了解。我有两个问题想问:

  1. 我的领导给我分配了一项任务,将电子表格中的表格转换为Google文档中的段落。

基本上,我的任务是将这组data变成the expected output。

Employee_ID和员工信息仅包含1条信息,目标、描述、自我评估和Manager_Comment可能有多行,每个人可能有不同的数字(即,某些人可能只有一个目标,其他人可能有2个、3个或更多目标)。然而,我的任务是为每个人创建一个文件,因此我必须将每个人的所有目标、描述、自我评估和经理评论放在一个文档中。

我应该使用什么脚本来实现此操作?

  1. 每次生成文档时,我都希望生成每个文档的链接,并将其放入电子表格的选项卡中。在Google脚本的帮助下,我希望我可以在这个选项卡中自动打印每个员工的文档链接。我举了一些我所期望的here的例子。请建议我可以使用什么脚本来实现这一点。

感谢您回答问题。非常感谢!


解决方案

在这种情况下,为了达到您的目标,我对the sample script of your previous question进行了如下修改。修改要点如下。

  • 为了使用现有脚本,我根据您的新情况转换了res的值。
  • 我添加了每个段落的段落名称。
  • 为了包括您的第二个请求,将从循环中返回";Employee_ID";、";Worker";的值以及已创建文档的URL,并将这些值放入";Link";工作表。

当这些内容反映到示例脚本中时,它将如下所示。

示例脚本:

function myFunction() {
  const title = "DOCUMENT TITLE";
  const sectionTitle = "SECTION TITLE";
  const head = ["ID: ", "EMPLOYEE NAME: "];

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const [headers, ...rows] = ss.getSheetByName("Raw Data").getDataRange().getValues();
  let w = "";
  const res = rows.map((r, i) => {
    const obj = headers.reduce((o, h, j) => Object.assign(o, { [h]: r[j] }), {});
    if (i == 0) {
      w = obj["Worker"];
      return obj;
    }
    if (w != obj["Worker"]) {
      w = obj["Worker"];
    } else {
      obj["Worker"] = "";
      obj["Employee_ID"] = "";
    }
    return obj;
  });

  const lineBreak = body => body.appendParagraph("").editAsText().setBold(false).setFontSize(11);
  let body;
  const values = res.flatMap((e, i) =>
    headers.reduce((ar, h, j) => {
      if (e[h]) {
        if (j < 2) {
          if (j == 0) {
            const doc = DocumentApp.create(e["Worker"]);
            body = doc.getBody()
            body.appendParagraph(title).setHeading(DocumentApp.ParagraphHeading.HEADING1).editAsText().setBold(true).setFontSize(20);
            lineBreak(body);
            body.appendParagraph(head[j] + e[h]).editAsText().setBold(0, head[j].length - 1, true).setFontSize(11);
            ar.push([e["Employee_ID"], e["Worker"], doc.getUrl()]);
          } else if (j == 1) {
            body.appendParagraph(head[j] + e[h]).editAsText().setBold(0, head[j].length - 1, true).setFontSize(11);
            lineBreak(body);
            body.appendParagraph(sectionTitle).editAsText().setBold(true).setFontSize(14);
            lineBreak(body);
          }
        } else if (j == 2) {
          body.appendParagraph(e[h]).setHeading(DocumentApp.ParagraphHeading.HEADING2).editAsText().setBold(true).setFontSize(12);
          lineBreak(body);
        } else {
          body.appendParagraph(h + ":");
          body.appendParagraph(e[h]);
          lineBreak(body);
        }
      }
      return ar;
    }, [])
  );

  const dstSheet = ss.getSheetByName("Link");
  dstSheet.getRange("A2:C").clearContent();
  dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}

注意:

  • 此示例脚本来自您的示例Google电子表格和Google文档。更改后,此脚本可能无法使用。请注意此点。

  • 遗憾的是,我在您的示例输出文档中找不到";Employee_Comment:";。在这种情况下,这是自我评估吗?这可以从示例电子表格的标题行中找到。我建议的脚本使用此值。

引用:

  • create(name)
  • forEach()
  • appendParagraph(text)

相关文章