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

如何通过Office Scripts合并指定Excel工作表?

如何在Office Scripts中合并指定/首尾工作表到单个工作簿

原官方脚本默认合并所有工作表,要实现合并指定名称、第一个或最后一个工作表的需求,只需修改获取工作表数据的第一个脚本,核心是筛选出目标工作表,第二个写入数据的脚本基本无需改动。


场景1:合并指定名称的工作表

在第一个脚本中定义需要合并的工作表名称列表,遍历工作表时只处理匹配的表:

/**
 * 此脚本返回指定名称工作表的已用区域数据
 */
function main(workbook: ExcelScript.Workbook): WorksheetData[]
{
  let worksheetInformation: WorksheetData[] = [];
  // 定义需要合并的工作表名称,按需修改
  const targetSheetNames = ["销售数据", "月度报表", "库存统计"];

  // 只处理名称在目标列表中的工作表
  workbook.getWorksheets().forEach((sheet) => {
    if (targetSheetNames.includes(sheet.getName())) {
      let values = sheet.getUsedRange()?.getValues();
      worksheetInformation.push({
        name: sheet.getName(),
        data: values as string[][]
      });
    }
  });

  return worksheetInformation;
}

interface WorksheetData {
  name: string;
  data: string[][];
}

场景2:合并第一个/最后一个工作表

利用工作表数组的索引直接定位目标表,比如取第一个、最后一个,或者同时取两者:

仅合并第一个工作表

/**
 * 此脚本返回第一个工作表的已用区域数据
 */
function main(workbook: ExcelScript.Workbook): WorksheetData[]
{
  let worksheetInformation: WorksheetData[] = [];
  const sheets = workbook.getWorksheets();
  
  // 确保工作簿中有工作表
  if (sheets.length > 0) {
    const firstSheet = sheets[0];
    let values = firstSheet.getUsedRange()?.getValues();
    worksheetInformation.push({
      name: firstSheet.getName(),
      data: values as string[][]
    });
  }

  return worksheetInformation;
}

interface WorksheetData {
  name: string;
  data: string[][];
}

仅合并最后一个工作表

/**
 * 此脚本返回最后一个工作表的已用区域数据
 */
function main(workbook: ExcelScript.Workbook): WorksheetData[]
{
  let worksheetInformation: WorksheetData[] = [];
  const sheets = workbook.getWorksheets();
  
  // 确保工作簿中有工作表
  if (sheets.length > 0) {
    const lastSheet = sheets[sheets.length - 1];
    let values = lastSheet.getUsedRange()?.getValues();
    worksheetInformation.push({
      name: lastSheet.getName(),
      data: values as string[][]
    });
  }

  return worksheetInformation;
}

interface WorksheetData {
  name: string;
  data: string[][];
}

同时合并第一个和最后一个工作表

/**
 * 此脚本返回第一个和最后一个工作表的已用区域数据
 */
function main(workbook: ExcelScript.Workbook): WorksheetData[]
{
  let worksheetInformation: WorksheetData[] = [];
  const sheets = workbook.getWorksheets();
  
  // 处理第一个工作表
  if (sheets.length > 0) {
    const firstSheet = sheets[0];
    let values = firstSheet.getUsedRange()?.getValues();
    worksheetInformation.push({
      name: firstSheet.getName(),
      data: values as string[][]
    });
  }

  // 处理最后一个工作表(如果和第一个不是同一个表)
  if (sheets.length > 1) {
    const lastSheet = sheets[sheets.length - 1];
    let values = lastSheet.getUsedRange()?.getValues();
    worksheetInformation.push({
      name: lastSheet.getName(),
      data: values as string[][]
    });
  }

  return worksheetInformation;
}

interface WorksheetData {
  name: string;
  data: string[][];
}

关于第二个写入脚本

第二个脚本无需修改,它会根据第一个脚本传入的WorksheetData数组,自动在目标工作簿中创建对应的工作表并写入数据,不管数组里是1个还是多个表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:57:06