编辑:添加了一个答案,因为编辑太长(参见答案2)
继以前关于文档合并的帖子我最终得到了一个工作脚本(感谢 Henrique;),但我仍然有一个小问题:最终的“合并”文档有时包含我想删除的空白页面(取决于其他文档内容)。
我找不到简单的方法来做到这一点。
脚本是这样的:
function mergeDocs(docIDs) { // parameter docIDs is an array of Doc IDs
var baseDocname = DocumentApp.openById(docIDs[0]).getName();// typical name = IMPRESSION_page_07_07-06-2012__20:57
var modelDoc = DocsList.getFileById(docIDs[0]);
var newmodelName=baseDocname.substr(0,11)+'multipage'+baseDocname.substring(18);
var baseDocId = DocsList.copy(modelDoc,newmodelName).getId();// make a copy of firstelement and give it new basedocname build from the serie(to keep margins etc...)
var baseDoc = DocumentApp.openById(baseDocId)
var body = baseDoc.getActiveSection();
//
for( var i = 0; i < docIDs.length; ++i ) {
var otherCopy = DocumentApp.openById(docIDs[i]).getActiveSection();
var totalElements = otherCopy.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = otherCopy.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("According to the doc this type couldn't appear in the body: "+type);
}
body.appendPageBreak(); // if content length is too short avoids breaking page layout
}
}
“分页符”(有时)会导致空白页,我知道(!),但有必要保持完美的页面布局(我正在使用此文档打印标签)。
这是典型示例的链接
好吧,Serge,我认为 API 上没有任何内容可以告诉元素属于哪个页面。所以,解决这个问题会很棘手:)
在球棒的右侧,我想到了一种“内部”方法。我的意思是,您知道哪个页面给您带来了麻烦。如果它总是相同的(例如,您有固定数量的标签),您可以循环计算分页符并删除坏的标签。
但如果这是不可能的,这是我的猜测,至少你知道你的布局。您可以测试一下有多少标签完全适合一页,然后对标签进行计数,这样当发生这种情况时,您就可以跳过附加分页符。这看起来是一个更好的解决方案。
不过,根据您的布局,这可能是不可能的或太困难了。因此,我能想到的最后一件事就是检查文档 DOM,看看当页面上单独出现分页符时是否会发生任何特定模式。因为这有点奇怪,我猜谷歌文档可能会自动在此页面上插入一个空段落,所以它不是“无子”,或类似的东西,甚至可能是一个属性,我不知道。我知道这需要付出大量的努力,进行调查以深入了解文档 DOM 的工作原理。如果您不这样做,我将来可能不得不这样做,因为我经常使用文档作为模板。当我这样做时,如果您在我之前没有这样做过,我会更新我的答案:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)