将模板附加到 Google 文档 header/footer 在作为附加组件测试时不起作用
Appending template to Google Docs header/footer not working when testing as Add-on
我在 google 脚本中构建了一个工具,该工具当前设置为 google 文档文件的绑定脚本。该工具的目标是从自定义表单输入的其他创建的文档文件中提取模板。该代码作为绑定脚本按原样工作,但我正在尝试将该代码移植过来为我组织内的用户创建一个附加组件。现在的问题是,当尝试将模板元素插入干净测试文档的页眉或页脚时,代码会在尝试将元素附加到语句 Cannot call method "appendParagraph" of null.
时抛出错误
我尝试使用 DocumentApp.getActiveDocument().getHeader().appendParagraph
作为页眉和页脚附加。当我将脚本用作绑定脚本并且按预期工作时,此方法有效。当我尝试将段落(或其他元素)附加到正文而不是页眉或页脚时,同时作为附加组件进行测试时,元素被毫无问题地附加。我唯一一次收到此错误是在我尝试将元素附加到页眉或页脚时。
function examplefunction_( docLink, locPaste ) {
var srcBody = DocumentApp.openById( docLink )
.getBody();
var srcNumChild = srcBody.getNumChildren();
var activeBody = DocumentApp.getActiveDocument()
.getBody();
var activeHead = DocumentApp.getActiveDocument()
.getHeader();
var activeFoot = DocumentApp.getActiveDocument()
.getFooter();
var a =0;
if ( locPaste == 'Body') {
var activeLoc = activeBody;
}
else if (locPaste == 'Header') {
var activeLoc = activeHead;
}
else if (locPaste == 'Footer') {
var activeLoc = activeFoot;
}
for (var i = 0; i<srcNumChild; i++) {
if (srcBody.getChild(i).getType() == DocumentApp.ElementType.PARAGRAPH) {
var srcText = srcBody.getChild(i).copy();
activeLoc.appendParagraph(srcText);
}
else if (srcBody.getChild(i).getType() == DocumentApp.ElementType.TABLE) {
var srcTable = srcBody.getTables();
var copiedTable = srcTable[a].copy()
a = a + 1;
activeLoc.appendTable(copiedTable);
}
else if (srcBody.getChild(i).getType() == DocumentApp.ElementType.LIST_ITEM) {
var srcList = srcBody.getChild(i).getText();
var listAtt = srcBody.getChild(i).getAttributes();
var nestLvl = srcBody.getChild(i).getNestingLevel();
activeLoc.appendListItem(srcList).setAttributes(listAtt).setNestingLevel(nestLvl);
}
else {
Logger.log("Could not get element: " + i);
}
}
}
我希望将元素附加到模板中的页眉和页脚,而不会像 运行 作为有界脚本时那样出现错误。 运行 的实际结果会在以下行终止进程并显示错误 "Cannot call method appendParagraph
of null.":activeLoc.appendParagraph(srcText);
如果您的文档没有页眉或页脚,则不能将段落附加到页眉或页脚。
添加到函数的开头:
if(!DocumentApp.getActiveDocument().getHeader()){
DocumentApp.openById(docLink).addHeader();
}
页脚也一样。
我在 google 脚本中构建了一个工具,该工具当前设置为 google 文档文件的绑定脚本。该工具的目标是从自定义表单输入的其他创建的文档文件中提取模板。该代码作为绑定脚本按原样工作,但我正在尝试将该代码移植过来为我组织内的用户创建一个附加组件。现在的问题是,当尝试将模板元素插入干净测试文档的页眉或页脚时,代码会在尝试将元素附加到语句 Cannot call method "appendParagraph" of null.
我尝试使用 DocumentApp.getActiveDocument().getHeader().appendParagraph
作为页眉和页脚附加。当我将脚本用作绑定脚本并且按预期工作时,此方法有效。当我尝试将段落(或其他元素)附加到正文而不是页眉或页脚时,同时作为附加组件进行测试时,元素被毫无问题地附加。我唯一一次收到此错误是在我尝试将元素附加到页眉或页脚时。
function examplefunction_( docLink, locPaste ) {
var srcBody = DocumentApp.openById( docLink )
.getBody();
var srcNumChild = srcBody.getNumChildren();
var activeBody = DocumentApp.getActiveDocument()
.getBody();
var activeHead = DocumentApp.getActiveDocument()
.getHeader();
var activeFoot = DocumentApp.getActiveDocument()
.getFooter();
var a =0;
if ( locPaste == 'Body') {
var activeLoc = activeBody;
}
else if (locPaste == 'Header') {
var activeLoc = activeHead;
}
else if (locPaste == 'Footer') {
var activeLoc = activeFoot;
}
for (var i = 0; i<srcNumChild; i++) {
if (srcBody.getChild(i).getType() == DocumentApp.ElementType.PARAGRAPH) {
var srcText = srcBody.getChild(i).copy();
activeLoc.appendParagraph(srcText);
}
else if (srcBody.getChild(i).getType() == DocumentApp.ElementType.TABLE) {
var srcTable = srcBody.getTables();
var copiedTable = srcTable[a].copy()
a = a + 1;
activeLoc.appendTable(copiedTable);
}
else if (srcBody.getChild(i).getType() == DocumentApp.ElementType.LIST_ITEM) {
var srcList = srcBody.getChild(i).getText();
var listAtt = srcBody.getChild(i).getAttributes();
var nestLvl = srcBody.getChild(i).getNestingLevel();
activeLoc.appendListItem(srcList).setAttributes(listAtt).setNestingLevel(nestLvl);
}
else {
Logger.log("Could not get element: " + i);
}
}
}
我希望将元素附加到模板中的页眉和页脚,而不会像 运行 作为有界脚本时那样出现错误。 运行 的实际结果会在以下行终止进程并显示错误 "Cannot call method appendParagraph
of null.":activeLoc.appendParagraph(srcText);
如果您的文档没有页眉或页脚,则不能将段落附加到页眉或页脚。
添加到函数的开头:
if(!DocumentApp.getActiveDocument().getHeader()){
DocumentApp.openById(docLink).addHeader();
}
页脚也一样。