按特定顺序迭代/追加内部数组到Google Doc

问题描述 投票:0回答:1

Problem

我正在使用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]
]

Final Format:

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

但是,我想循环遍历每个内部数组并单独操作它们以获得输出(不确定这是否是正确的单词)。

My current output (doing it manually):

  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]);  
        }  
    }
  });
javascript arrays google-apps-script google-sheets google-docs
1个回答
0
投票

假设您已经布置了数据,使得列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;
}

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.