javascript #google-apps-script #google-sheets #google-docs
#javascript #google-приложения-скрипт #google-sheets #google-docs
Вопрос:
Я новичок в скрипте приложения Google. Я пытался создать документ Google с помощью Google app script, чтобы помочь мне преобразовать данные из таблицы (из электронной таблицы) в абзацы в документе Google.
Это образец источника данных, и это ожидаемый результат, который я хочу.
Какой скрипт я должен использовать, чтобы это произошло?
спасибо, что ответили на вопрос.
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите получить значения из электронной таблицы и поместить их в документ в формате, используя скрипт 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. Когда они будут изменены, этот скрипт может быть недоступен для использования. Пожалуйста, будьте осторожны с этим.
Ссылки:
Добавлено:
О вашем следующем новом вопросе,
Спасибо! Это действительно полезно. Мне было интересно, допустим, я хочу создать 1 документ для Джонни Деппа и 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);
}
}
});
});
}
Комментарии:
1.Спасибо! Это действительно полезно. Мне было интересно, допустим, я хочу создать 1 документ для Джонни Деппа и 1 документ для Майкла Пейджа, и, допустим, у меня больше списка имен в таблице, и я хочу создать 1 документ для каждого человека. Как это будет?
2. @Nadila Спасибо за ответ. Что касается вашего нового вопроса, я добавил в свой ответ еще один пример сценария. Не могли бы вы подтвердить это, пожалуйста? Если это было бесполезно, я прошу прощения.
3. Большое вам спасибо! Все так, как и ожидалось 🙂
4. Надила, пожалуйста, отметьте сообщение о решении, отправленное Танайке, как «Лучший ответ». Это помогает сообществу участников легко увидеть, какие проблемы были полностью решены. Это помогает будущим посетителям сайта быстро находить наиболее актуальные ответы. (И это крошечный знак признательности для кого-то вроде Танайке, который явно потратил много времени на разработку такого решения для вас.)
5. @Erik Tyler Я ценю вашу поддержку.