You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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 copyElements Function: 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:32:50