google-apps-script - 遍历行 - 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);
}
}
}
解决方案
您的功能似乎做得更多。我不确定为什么您的描述基本上是在第 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 个文档附加数据并关闭文件很可能会导致脚本超时,因此请注意完成了多少,我们可以批量执行该过程。
推荐阅读
- sql-server - 根据包含“从”和“到”日期的字段确定未涵盖的天数
- c# - 如何在 razor 中创建自定义 @using 代码块
- error-handling - julia:在控制流中显示“catch”错误
- javascript - 我用什么代替 .change 来显示或不显示基于列表值的框
- cmake - CMake ExternalProject_add 依赖项
- python - 检查数据框中每列的名称是否包含子字符串并更改数据类型
- c - Linux:在 C 中执行 execlp() 后 write() 不起作用
- asp.net - 扩展 ApplicationUsers 时,尝试访问属性时出现空错误
- c - 如何使用赋值(=)和相等(==)操作数制作语法?
- python - 按下按钮并根据您在下拉菜单中的选择执行某些操作?