我正在使用Google表格,并尝试将数据输出到Google文档(没有逐行手动编码,我目前正在执行此操作)。
源:2(或3)列和动态行(基于复选框)。将数组放到动态行中已经完成了:
ARRAY = [
[HEADER TITLEA, CONTENTA],
[HEADER TITLE2, CONTENTA2],
[HEADER TITLEA3, CONTENTA3]
]
ARRAY = [
[HEADER TITLEA, CONTENTA, CONTENTB],
[HEADER TITLE2, CONTENTA2, CONTENTB],
[HEADER TITLEA3, CONTENTA3, CONTENTB]
]
text
Header TitleA
Static: ContentA
Header TitleA2
Static: ContentA2
等等。
或(w / 3)
text
Header TitleA
Static: ContentA
Static2: ContentB
我知道我可以运行循环并得到一个非常基本的输出,但我不知道如何操作每个内部数组项来获得我想要的输出。我目前的循环是:
for (row = 0; row < newA.length; row++) {
for (col = 0; col < 3; col++) {
Logger.log(newA[row][col]);
}
}
返回:
text
HEADERA
CONTENTA
CONTENTB
但是,我想循环遍历每个内部数组并单独操作它们以获得输出(不确定这是否是正确的单词)。
var htmlTitleProp = sh.getRange('A3').getValue();
var htmlTitleHeaderO = body.appendParagraph(htmlTitleProp);
htmlTitleHeaderO.setHeading(DocumentApp.ParagraphHeading.HEADING4);
var htmlTitleCurrent = sh.getRange('B3').getValue();
var htmlTitleRecommended = sh.getRange('C3').getValue();
var htmlTitleCurrentO = body.appendParagraph(htmlTitleRecommended);
//description
var htmlDescriptionProp = sh.getRange('A4').getValue();
var htmlDescriptionHeaderO = body.appendParagraph(htmlDescriptionProp);
htmlDescriptionHeaderO.setHeading(DocumentApp.ParagraphHeading.HEADING4);
var htmlDescriptionCurrent = sh.getRange('B4').getValue();
var htmlDescriptionRecommended = sh.getRange('C4').getValue();
var htmlDescriptionCurrentO = body.appendParagraph(htmlDescriptionRecommended);
基本上,看看如何根据我的源数组文件自动化body.appendParagraph
。
我该如何解决这个问题?
通过tehhowch提供一些见解,下面是我用来解决我的问题的功能(w / 3列):
newA.forEach(function (row) {
var heading = row.shift();
if (heading) {
body.appendParagraph(heading).setHeading(DocumentApp.ParagraphHeading.HEADING4);
if (row[0]) {
body.appendParagraph( "Current: \n" + row[0] + "\n");
}
if (row[1]) {
body.appendParagraph( "Recommended: \n" + row[1]);
}
}
});
假设您已经布置了数据,使得列A是文档标题,而列B:...是该标题下的内容,您希望使用数组的内容运行两个forEach
循环。
function foo() {
const doc = DocumentApp.getActive();
const source = get2DArraySomehow();
const body = doc.getBody();
source.forEach(function (row) {
var heading = row.shift();
if (heading) {
body.appendParagraph(heading).setHeading(...);
row.forEach(function (text) {
if (text) {
body.appendParagraph(text);
}
});
}
});
...
}
大多数文档服务方法的结果是可链接的,因此您可以根据需要应用其他样式。
以上内容适用于每个标题的任意数量的文本列,而不仅仅是2或3,例如一个合适的get2DArraySomehow
定义可能是:
function get2DArraySomehow() {
const wb = SpreadsheetApp.openById("some id");
const datasheet = wb.getSheetByName("some name");
const data = datasheet.getDataRange().getValues();
data.shift(); // remove row 1, i.e. it is assumed to be a header row
return data;
}
参考文献