我是谷歌應用程式腳本的新手。我試圖使用谷歌應用程式腳本創建一個谷歌檔案,以幫助我將表格(來自電子表格)中的資料轉換為谷歌檔案中的段落。
這是資料源的樣本,這是我想要的預期輸出。
我應該使用什么腳本來實作這一點?
謝謝你回答這個問題。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想從電子表格中檢索值,并將它們以使用 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 檔案。當這些更改時,此腳本可能無法使用。請注意這一點。
參考:
- 創建(名稱)
- forEach()
- 追加段落(文本)
添加:
關于您的以下新問題,
謝謝!這真的很有幫助。我想知道是否假設我想為 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);
}
}
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/343996.html
標籤:javascript 谷歌应用程序脚本 谷歌表格 谷歌文档
上一篇:我想在谷歌表上更改這個腳本
