复制含竖线的Google Docs内容时触发“Action Not Allowed”错误求助
解决Google Apps Script复制文档时"Action not allowed"错误
问题出在你尝试插入无任何子元素的空PARAGRAPH元素,DocumentApp不允许插入这类无效的空段落。以下是两种可行的解决思路:
思路1:跳过完全空的段落元素
遍历元素时,判断段落是否包含内容(文本、图片等),如果是空段落则直接跳过,避免触发错误:
function myFunction() { var sourceDoc = DocumentApp.getActiveDocument().getBody(); var targetDoc = DocumentApp.openById('1sZm8Z-p4_x2JBmTJZurKvDjWq8hmDi5YmxS68ld6atY'); var totalElements = sourceDoc.getNumChildren(); var targetBody = targetDoc.getBody(); // 提前获取,避免循环内重复调用 for (var j = 0; j < totalElements; j++) { var element = sourceDoc.getChild(j).copy(); var type = element.getType(); if (type == DocumentApp.ElementType.PARAGRAPH) { // 检查段落是否有子元素(文本、图片等),无则跳过 if (element.getNumChildren() === 0) { continue; } targetBody.insertParagraph(0, element); } else if (type == DocumentApp.ElementType.LIST_ITEM) { targetBody.insertListItem(0, element.copy()); } } targetDoc.saveAndClose(); }
思路2:为空段落添加空文本节点
如果需要保留段落结构(比如格式、间距),可以给空段落添加一个空文本节点,使其成为合法元素:
function myFunction() { var sourceDoc = DocumentApp.getActiveDocument().getBody(); var targetDoc = DocumentApp.openById('1sZm8Z-p4_x2JBmTJZurKvDjWq8hmDi5YmxS68ld6atY'); var totalElements = sourceDoc.getNumChildren(); var targetBody = targetDoc.getBody(); for (var j = 0; j < totalElements; j++) { var element = sourceDoc.getChild(j).copy(); var type = element.getType(); if (type == DocumentApp.ElementType.PARAGRAPH) { // 若段落无内容,添加空文本节点 if (element.getNumChildren() === 0) { element.appendText(''); } targetBody.insertParagraph(0, element); } else if (type == DocumentApp.ElementType.LIST_ITEM) { targetBody.insertListItem(0, element.copy()); } } targetDoc.saveAndClose(); }
额外提示:原代码中每次循环都调用targetDoc.getBody(),提前获取一次可提升性能;另外你注释里提到"Reversed the loop"但实际是正序循环,若要保留原文档的内容顺序,正序插入到顶部会导致最终内容反转,可改为倒序遍历或插入到文档末尾。
内容的提问来源于stack exchange,提问作者Vikram Aruchamy
相关产品推荐
相关产品推荐

