如何使用JavaScript将Excel指定工作表保存为独立的新Excel文件
实现方案(exceljs可直接实现)
核心逻辑是读取原工作簿后,新建空工作簿,将TAB1工作表的完整配置复制到新工作簿后保存即可,修改后的可用代码如下:
const ExcelJS = require('exceljs'); const sourceFilename = "abc.xlsx"; const extractSheetName = "tab1"; const outputFilename = "tab1.xlsx"; const extractSingleSheet = async () => { // 读取原工作簿 const sourceWB = new ExcelJS.Workbook(); await sourceWB.xlsx.readFile(sourceFilename); // 匹配目标工作表 const targetSheet = sourceWB.worksheets.find(sheet => sheet.name.toLowerCase() === extractSheetName ); if (!targetSheet) { throw new Error(`未找到名为${extractSheetName}的工作表`); } // 新建空工作簿,复制目标工作表到新工作簿 const newWB = new ExcelJS.Workbook(); // 通过model完整复制工作表的所有内容:数据、样式、列宽、行高、公式等 newWB.addWorksheet(targetSheet.name, { model: targetSheet.model }); // 保存新文件 await newWB.xlsx.writeFile(outputFilename); console.log(`工作表已成功导出到${outputFilename}`); }; extractSingleSheet().catch(err => console.error('导出失败:', err));
关键说明
- 通过
worksheet.model可以拿到工作表的完整配置,不需要逐行逐列复制数据,样式、格式、公式、合并单元格等属性都会完整保留 - 原代码混用了
then和async/await逻辑,容易出现异步执行异常,统一用async/await写法更易维护
替代方案(使用sheetjs/xlsx包)
如果想换其他工具实现,也可以用更轻量的sheetjs库,示例代码如下:
const XLSX = require('xlsx'); // 读取原文件 const wb = XLSX.readFile('abc.xlsx'); // 提取TAB1工作表的数据 const targetSheet = wb.Sheets['TAB1']; // 新建工作簿,将目标工作表加入 const newWB = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(newWB, targetSheet, 'tab1'); // 保存新文件 XLSX.writeFile(newWB, 'tab1.xlsx');
内容的提问来源于stack exchange,提问作者saicharan
相关产品推荐
相关产品推荐

