這是我之前發布的問題的延續。我是這個網站的新手,也是谷歌腳本的新手,請原諒我對腳本的了解。我有兩個問題想請教:
- 我的領導給我分配了一項任務,將表格從電子表格轉換為谷歌檔案中的段落。
基本上,我被指派將這組資料轉化為預期的輸出。
雖然Employee_ID和Worker 資訊只包含 1 個資訊,但Goal、Description、Self-Evaluation和Manager_Comment可能有多行,每個人可能有不同的數字(即有些人可能只有 1 個目標,有些人可能有 2、3 或更)。但是,我的任務是為每個人創建一個檔案,因此我必須將每個人的所有目標、描述、自我評價和 manager_comment 放在一個檔案中。
我應該使用什么腳本來實作這一點?
- 每次生成檔案時,我還希望生成每個檔案的鏈接并將其放入電子表格的選項卡中。在google script的幫助下,我希望我可以在這個標簽中自動列印每個員工的檔案鏈接。我在這里放了一些我期望的例子。請建議我可以使用什么腳本來實作這一點。
謝謝你回答這個問題。我非常感謝!
uj5u.com熱心網友回復:
在這種情況下,為了實作您的目標,我將您上一個問題的示例腳本修改如下。修改要點如下。
- 為了使用現有腳本,我
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:”。在這種情況下,是“Self_Evaluation”嗎?這可以從示例電子表格的標題行中找到。我建議的腳本使用此值。
參考:
- 創建(名稱)
- forEach()
- 追加段落(文本)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/343975.html
標籤:javascript 谷歌应用程序脚本 谷歌表格 谷歌文档
