如何通过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
相关产品推荐
相关产品推荐

