如何从 google 电子表格 table 中获取 google 文档中的段落并为文档创建 link?

How to get paragraphs in google doc from google spreadsheet table and create a link for document?

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

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

基本上,我被分配到转这组data, into the expected output

虽然Employee_ID工人信息只包含1条信息, 目标描述自我评价Manager_Comment 可能有多行,每个人可能有不同的数字(即有些人可能只有 1 个目标,有些人可能有 2、3 甚至更多)。然而,我的任务是为每个人创建一个文件,因此我必须将每个人的所有目标、描述、自我评价和manager_comment放在一个文件中。

我应该使用什么脚本来做到这一点?

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

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

在这种情况下,为了达到你的目的,我修改了the sample script of your previous question如下。修改点如下

  • 为了使用现有的脚本,我为您的新情况转换了 res 的值。
  • 我添加了每个段落的段落名称。
  • 为了包含您的第二个请求,“Employee_ID”、“Worker”的值和创建的文档的 URL 从循环中返回,这些值被放入“Link" sheet.

将这些反映到示例脚本中,就变成了下面这样。

示例脚本:

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 Spreadsheet 和 Google 文档。当这些改变时,这个脚本可能无法使用。请注意这一点。

  • 很遗憾,我在您的示例输出文档中找不到“Employee_Comment:”。在这种情况下,是“Self_Evaluation”吗?这可以从示例 Spreadsheet 的 header 行中找到。我建议的脚本使用这个值。

参考文献: