如何将表格从Google表格转换为Google文档中的段落?
我是Google应用程序脚本的新手。我试图使用Google应用程序脚本创建一个Google文档,以帮助我将表格(电子表格)中的数据转换为Google文档中的段落。
这是data source的样本,这是我想要的expected output。
我应该使用什么脚本来实现此操作?
感谢您回答问题。
解决方案
我相信您的目标如下。
- 您希望从电子表格中检索值,并使用Google Apps脚本将它们放入格式为的文档中。
在您的情况下,下面的流程如何?
- 从电子表格中检索值并创建对象。
- 新建Google文档。
- 使用该对象,每个值都被放入格式为的已创建文档。
当此流反映在脚本中时,它将如下所示。
示例脚本:
在此示例中,请将其复制并粘贴到包含值的Google电子表格的脚本编辑器中。如果您想更改title
、sectionTitle
和head
,请修改脚本。然后,运行函数myFunction
。
function myFunction() {
const title = "DOCUMENT TITLE";
const sectionTitle = "SECTION TITLE";
const head = ["ID: ", "EMPLOYEE NAME: "];
// 1. Retrieve values from Spreadsheet and create an object.
const [headers, ...rows] = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getDataRange().getValues();
const res = rows.map((r) => headers.reduce((o, h, j) => Object.assign(o, { [h]: r[j] }), {}));
// 2. Create new Google Document.
const doc = DocumentApp.create("temp");
// 3. Using the object, each value is put to the created Document with the format.
const lineBreak = _ => body.appendParagraph("").editAsText().setBold(false).setFontSize(11);
const body = doc.getBody()
body.appendParagraph(title).setHeading(DocumentApp.ParagraphHeading.HEADING1).editAsText().setBold(true).setFontSize(20);
lineBreak();
res.forEach(e => {
headers.forEach((h, j) => {
if (e[h]) {
if (j < 2) {
body.appendParagraph(head[j] + e[h]).editAsText().setBold(0, head[j].length - 1, true).setFontSize(11);
if (j == 1) {
lineBreak();
body.appendParagraph(sectionTitle).editAsText().setBold(true).setFontSize(14);
lineBreak();
}
} else if (j == 2) {
body.appendParagraph(e[h]).setHeading(DocumentApp.ParagraphHeading.HEADING2).editAsText().setBold(true).setFontSize(12);
lineBreak();
} else {
body.appendParagraph(e[h]);
lineBreak();
}
}
});
});
}
- 当您运行此脚本时,将创建一个新的Google文档,并将电子表格中的值放入该文档。您可以在根文件夹中看到它。
注意:
- 此示例脚本来自您的示例Google电子表格和Google文档。更改后,此脚本可能无法使用。请注意此点。
引用:
- create(name)
- forEach()
- appendParagraph(text)
添加:
关于您的以下新问题
从您评论中的新问题中,我无法理解新文档的文件名和谢谢!这真的很有帮助。我在想,假设我想为Johnny Depp创建1个文档,为Michael Page创建1个文档,假设我在表格中有更多的名字列表,我想为每个人创建1个文档。会是什么样子?
title
、sectionTitle
和head
的值。因此,在这种情况下,请根据您的实际情况修改它们。
以下示例脚本如何?
示例脚本:
function myFunction() {
const title = "DOCUMENT TITLE";
const sectionTitle = "SECTION TITLE";
const head = ["ID: ", "EMPLOYEE NAME: "];
const [headers, ...rows] = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getDataRange().getValues();
const res = rows.map((r) => headers.reduce((o, h, j) => Object.assign(o, { [h]: r[j] }), {}));
const lineBreak = body => body.appendParagraph("").editAsText().setBold(false).setFontSize(11);
let body;
res.forEach((e, i) => {
headers.forEach((h, j) => {
if (e[h]) {
if (j < 2) {
if (j == 0) {
const doc = DocumentApp.create(e["Legal Name"]);
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);
} 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(e[h]);
lineBreak(body);
}
}
});
});
}
相关文章