如何从谷歌电子表格中获取谷歌文档中的段落,并为文档创建链接?
这是我发布的previous question的续篇。我是这个网站的新手,也是Google脚本的新手,请原谅我对脚本的了解。我有两个问题想问:
- 我的领导给我分配了一项任务,将电子表格中的表格转换为Google文档中的段落。
基本上,我的任务是将这组data变成the expected output。
Employee_ID和员工信息仅包含1条信息,目标、描述、自我评估和Manager_Comment可能有多行,每个人可能有不同的数字(即,某些人可能只有一个目标,其他人可能有2个、3个或更多目标)。然而,我的任务是为每个人创建一个文件,因此我必须将每个人的所有目标、描述、自我评估和经理评论放在一个文档中。
我应该使用什么脚本来实现此操作?
- 每次生成文档时,我都希望生成每个文档的链接,并将其放入电子表格的选项卡中。在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)
相关文章