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

Apps Script 如何实现指定范围按自定义份数批量复制后打印

Apps Script 批量生成指定份数打印区域实现方案

核心实现步骤

  • 添加自定义交互入口,支持用户输入需要打印的份数
  • 读取你预设的目标打印范围的全部内容、格式、样式,避免复制后排版错乱
  • 按照输入的份数循环复制目标区域,依次追加到文档的空白位置,所有副本生成完成后直接打印全文档即可
  • 可选添加临时隐藏标识,打印完成后一键删除所有生成的副本,还原原始文档

Google Sheets 示例代码

// 初始化自定义菜单
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('批量打印工具')
    .addItem('生成打印副本', 'generatePrintCopies')
    .addItem('清空生成的副本', 'clearCopies')
    .addToUi();
}

function generatePrintCopies() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const ui = SpreadsheetApp.getUi();
  
  // 自定义你的目标打印范围,这里示例是A1到C10
  const printRange = sheet.getRange('A1:C10');
  const rangeHeight = printRange.getNumRows();
  const rangeWidth = printRange.getNumColumns();
  
  // 弹出输入框获取打印份数
  const inputRes = ui.prompt('请输入需要打印的份数:', ui.ButtonSet.OK_CANCEL);
  if (inputRes.getSelectedButton() !== ui.Button.OK) return;
  const copyCount = parseInt(inputRes.getResponseText());
  if (isNaN(copyCount) || copyCount < 1) {
    ui.alert('请输入有效的正整数份数');
    return;
  }

  // 循环生成副本,每份之间空1行避免粘连
  let startRow = printRange.getLastRow() + 2;
  for (let i = 0; i < copyCount - 1; i++) {
    const targetRange = sheet.getRange(startRow, 1, rangeHeight, rangeWidth);
    printRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_ALL, false);
    startRow += rangeHeight + 1;
  }
  ui.alert(`已成功生成${copyCount}份副本,可直接打印整张表格`);
}

// 清空生成的副本,还原原始文档
function clearCopies() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 自定义你原始内容的最后一行,示例是原始内容到第10行,后面的全部删除
  const originalLastRow = 10;
  const maxRow = sheet.getMaxRows();
  if (maxRow > originalLastRow) {
    sheet.deleteRows(originalLastRow + 1, maxRow - originalLastRow);
  }
  SpreadsheetApp.getUi().alert('已清空所有生成的副本');
}

Google Docs 示例代码

// 初始化自定义菜单
function onOpen() {
  const ui = DocumentApp.getUi();
  ui.createMenu('批量打印工具')
    .addItem('生成打印副本', 'generatePrintCopies')
    .addToUi();
}

function generatePrintCopies() {
  const doc = DocumentApp.getActiveDocument();
  const body = doc.getBody();
  const ui = DocumentApp.getUi();

  // 自定义你的目标打印范围,示例是取第1到第3个段落(可根据需求调整为表格、指定位置等)
  const printContent = [];
  const startIndex = 0;
  const endIndex = 2;
  for (let i = startIndex; i <= endIndex; i++) {
    const element = body.getChild(i).copy();
    printContent.push(element);
  }

  // 获取打印份数
  const inputRes = ui.prompt('请输入需要打印的份数:', ui.ButtonSet.OK_CANCEL);
  if (inputRes.getSelectedButton() !== ui.Button.OK) return;
  const copyCount = parseInt(inputRes.getResponseText());
  if (isNaN(copyCount) || copyCount < 1) {
    ui.alert('请输入有效的正整数份数');
    return;
  }

  // 循环生成副本,每份之间加分页符
  for (let i = 0; i < copyCount - 1; i++) {
    body.appendPageBreak();
    printContent.forEach(item => {
      body.appendParagraph(item.asParagraph().copy());
    });
  }
  doc.saveAndClose();
  ui.alert(`已成功生成${copyCount}份副本,可直接打印整个文档`);
}

注意事项

  • 代码中的目标范围、原始内容边界需要根据你的实际文档情况调整
  • 如果需要保留原始文档的页眉页脚、条件格式等特殊样式,可在复制方法中调整粘贴类型,确保格式完全对齐
  • 若不需要保留生成的副本,打印完成后调用清空方法即可还原文档

内容的提问来源于stack exchange,提问作者Sebastien LEBLANC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:01