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

如何通过脚本将Google Sheets表格完全一致复制到Google Docs

问题描述
  • 需要将Google Sheets中的表格完全保留原格式复制到Google Docs中
  • 现有脚本复制出的表格与原表格式不一致,例如原表F1:G1的合并单元格在Docs中被拆分,格式匹配度低
原有实现代码
function table() {
  var ss = Sheets.Spreadsheets.Values.get("assassa", String("Sheet1!A1:Z")).values;
  var doc = DocumentApp.openById("asas"); // 可通过名称/ID定位目标文档
  var body = doc.getBody();
 
  var date = new Date();
  var time = date.toLocaleString("id", {
    "day": "2-digit",
    "month": "long",
    "year": "numeric",
    "minute": "2-digit",
    "timeZoneName": "short",
    "minute": "2-digit",
    "second": "2-digit",
    "hour": "2-digit",
  })
  var dataYouWant = ss;// 存储单元格值的二维数组
  body.clear();
  body.insertParagraph(0, `Data update: ${time}`).setHeading(DocumentApp.ParagraphHeading.HEADING1);
  table = body.appendTable(dataYouWant); // 将表格粘贴到文档中

  table.getRow(0).editAsText().setBold(true);
}

效果对比截图

问题原因

原有脚本仅通过Sheets.Spreadsheets.Values.get接口获取了单元格纯文本值,完全没有拉取合并单元格规则、单元格背景色、字体样式、对齐方式等格式元数据。调用appendTable传入二维数组时,只会生成默认样式的无合并规则普通表格,自然无法保留原表格式。

修复方案

需要先读取源表格的合并单元格信息,在Docs中生成基础值表格后,手动合并对应位置的单元格;如果需要保留更多格式,可同步读取单元格样式属性后逐一设置到Docs表格对应位置,参考实现代码如下:

function copySheetToDocWithFormat() {
  // 请将以下参数替换为实际的文件ID、工作表名和复制范围
  const SOURCE_SHEET_ID = "替换为你的源Google Sheets ID";
  const TARGET_DOC_ID = "替换为你的目标Google Docs ID";
  const SHEET_NAME = "Sheet1";
  const COPY_RANGE = "A1:Z";

  const spreadsheet = SpreadsheetApp.openById(SOURCE_SHEET_ID);
  const sheet = spreadsheet.getSheetByName(SHEET_NAME);
  const range = sheet.getRange(COPY_RANGE);
  const cellValues = range.getValues();
  // 获取源表所有合并单元格的位置、尺寸信息
  const mergedCellRules = sheet.getMergedRanges();

  const doc = DocumentApp.openById(TARGET_DOC_ID);
  const body = doc.getBody();

  // 生成更新时间
  const updateTime = new Date().toLocaleString("id", {
    day: "2-digit",
    month: "long",
    year: "numeric",
    hour: "2-digit",
    minute: "2-digit",
    second: "2-digit",
    timeZoneName: "short"
  });

  body.clear();
  body.insertParagraph(0, `Data update: ${updateTime}`).setHeading(DocumentApp.ParagraphHeading.HEADING1);
  // 插入带基础值的表格
  const targetTable = body.appendTable(cellValues);

  // 同步合并单元格规则
  mergedCellRules.forEach(mergedRange => {
    const rangeStartRow = mergedRange.getRow() - range.getRow();
    const rangeEndRow = rangeStartRow + mergedRange.getNumRows() - 1;
    const rangeStartCol = mergedRange.getColumn() - range.getColumn();
    const rangeEndCol = rangeStartCol + mergedRange.getNumColumns() - 1;
    
    // 仅处理复制范围内的合并单元格
    if (rangeStartRow >= 0 && rangeStartCol >=0 && rangeEndRow < cellValues.length && rangeEndCol < cellValues[0].length) {
      const baseCell = targetTable.getCell(rangeStartRow, rangeStartCol);
      for (let r = rangeStartRow; r <= rangeEndRow; r++) {
        for (let c = rangeStartCol; c <= rangeEndCol; c++) {
          if (r === rangeStartRow && c === rangeStartCol) continue;
          baseCell.merge(targetTable.getCell(r, c));
        }
      }
    }
  });

  // 可在此处扩展其他格式同步逻辑:如单元格背景色、字体颜色、边框、对齐方式等
  targetTable.getRow(0).editAsText().setBold(true);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:19:01