首页 > 解决方案 > 遍历行 - Google 表格 - 合并文档

问题描述

我有一个包含 4 列的文档 - 每列都有一个指向 Google Doc 文件的链接。我已经编写了一些将文档合并在一起的代码,以便将第 2、3 和 4 列附加到第 1 列的文档中。

我现在只需要一些帮助将它变成一个循环,这样它就会循环遍历所有行(完成的文档中大约有 500 行)

如果任何列中缺少文件,代码也会中断,在理想情况下,我希望它只是跳过该文件并继续下一列。

谁能帮忙(是的,我知道代码很烂)

function mergeGoogleDocs() {
  var ss = SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXXXXXX');
  var sh = ss.getSheetByName('Sheet1');// access specific sheet
  var row = sh.getRange(1,1).getValue();
  var original = sh.getRange(row,1).getValue();
  var arabic = sh.getRange(row,2).getValue();
  var islamic = sh.getRange(row,3).getValue();
  var smallsteps = sh.getRange(row,4).getValue();
  var docIDs = [original,arabic,islamic,smallsteps];
  var baseDoc = DocumentApp.openById(docIDs[0]);

  var body = baseDoc.getActiveSection();

  for (var i = 1; i < docIDs.length; ++i ) {
    var otherBody = DocumentApp.openById(docIDs[i]).getActiveSection();
    var totalElements = otherBody.getNumChildren();
    for( var j = 0; j < totalElements; ++j ) {
      var element = otherBody.getChild(j).copy();
      var type = element.getType();
      if( type == DocumentApp.ElementType.PARAGRAPH )
        body.appendParagraph(element);
      else if( type == DocumentApp.ElementType.TABLE )
        body.appendTable(element);
      else if( type == DocumentApp.ElementType.LIST_ITEM )
        body.appendListItem(element);
      else
        throw new Error("Unknown element type: "+type);
    }
  }
}

标签: google-apps-scriptgoogle-sheets

解决方案


您的功能似乎做得更多。我不确定为什么您的描述基本上是在第 1 列中打开文档并将数据附加到第 2 到第 4 列中,这就是该函数的作用。

function mergeGoogleDocs() {
  var ss=SpreadsheetApp.openById(ssid);
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  //assuming no headers for now
  vA.forEach(function(r,i){
    var doc=DocumentApp.openById(r[0]);
    var body=doc.getBody();
    body.appendParagraph(r[1]);
    body.appendParagraph(r[2]);
    body.appendParagrsph(r[3]);
    lsh.appendRow([r])
    Logger.log(i+1);//just to keep track of how many iterations we get before a possible timeout
    doc.saveAndClose();
  });
}

让我哪里出错了,我会改正的。打开 500 个文档附加数据并关闭文件很可能会导致脚本超时,因此请注意完成了多少,我们可以批量执行该过程。


推荐阅读