如何通过Google Apps Script在合并后的Google文档中添加页眉与页脚?
Your existing script works perfectly for merging the main body content of multiple Google Docs, but it doesn't account for copying over headers and footers. Let's update it to include those elements—here's the revised code with breakdowns of the key changes:
var docIDs = ['documentID_1', 'documentID_2', 'documentID_3', 'documentID_4']; var baseDoc = DocumentApp.openById(docIDs[0]); var body = baseDoc.getActiveSection(); // Reusable function to copy elements from a source section to a target section function copyElements(sourceSection, targetSection) { var totalElements = sourceSection.getNumChildren(); for (var j = 0; j < totalElements; ++j) { var element = sourceSection.getChild(j).copy(); var type = element.getType(); switch(type) { case DocumentApp.ElementType.PARAGRAPH: targetSection.appendParagraph(element); break; case DocumentApp.ElementType.TABLE: targetSection.appendTable(element); break; case DocumentApp.ElementType.LIST_ITEM: targetSection.appendListItem(element); break; default: throw new Error('Unknown element type: ' + type); } } } // Merge main body content (original logic refactored for reusability) for (var i = 1; i < docIDs.length; ++i) { var otherDoc = DocumentApp.openById(docIDs[i]); var otherBody = otherDoc.getActiveSection(); copyElements(otherBody, body); // Merge Headers var sourceHeaders = otherDoc.getHeaders(); var targetHeaders = baseDoc.getHeaders(); // Copy first page header if it exists in both docs if (sourceHeaders.hasFirstPageHeader() && targetHeaders.hasFirstPageHeader()) { copyElements(sourceHeaders.getFirstPageHeader(), targetHeaders.getFirstPageHeader()); } // Copy default (odd page) header copyElements(sourceHeaders.getHeader(), targetHeaders.getHeader()); // Copy even page header if enabled in both docs if (sourceHeaders.hasEvenPageHeader() && targetHeaders.hasEvenPageHeader()) { copyElements(sourceHeaders.getEvenPageHeader(), targetHeaders.getEvenPageHeader()); } // Merge Footers var sourceFooters = otherDoc.getFooters(); var targetFooters = baseDoc.getFooters(); // Copy first page footer if it exists in both docs if (sourceFooters.hasFirstPageFooter() && targetFooters.hasFirstPageFooter()) { copyElements(sourceFooters.getFirstPageFooter(), targetFooters.getFirstPageFooter()); } // Copy default (odd page) footer copyElements(sourceFooters.getFooter(), targetFooters.getFooter()); // Copy even page footer if enabled in both docs if (sourceFooters.hasEvenPageFooter() && targetFooters.hasEvenPageFooter()) { copyElements(sourceFooters.getEvenPageFooter(), targetFooters.getEvenPageFooter()); } }
Key Changes Explained:
- Reusable
copyElementsFunction: I moved your original element-copying logic into a function so we can reuse it for body content, headers, and footers—this keeps the code clean and avoids redundant work. - Header/Footer Type Handling: Google Docs supports three variants of headers/footers (first page, odd pages, even pages). We add checks like
hasFirstPageHeader()to ensure we don't try to access a section that doesn't exist in either document, preventing errors. - Consistent Logic: The same copying pattern applies to headers, footers, and the main body, making the script easier to maintain.
A quick note: If your base document doesn't have first-page or even-page headers/footers enabled, you'll need to turn on those settings manually in the base doc first, or add extra code to enable them programmatically if you want full automation.
内容的提问来源于stack exchange,提问作者Sankar
相关产品推荐
相关产品推荐

