问题描述
一个包含两个工作表的 Excel 文件(TAB1、TAB2)。
如何将下面的 excel 中的“TAB1”保存为一个新的 Excel 文件,比如 tab1.xlsx?
我正在尝试使用 exceljs 解决它,但不确定如何将其另存为新文件。如果在 exceljs 的帮助下无法完成,请提出任何其他方法来完成此任务。
const ExcelJS = require('exceljs');
const wb = new ExcelJS.Workbook();
//const newwork = new ExcelJS.Workbook();
filename = "abc.xlsx";
const fl = async () => {
wb.xlsx.readFile(filename)
.then(async function () {
wb.eachSheet(async function (worksheet,sheetId) {
console.log("worksheet",worksheet,"sheetid",sheetId);
if(worksheet.name.toLocaleLowerCase() ==='tab1'){
var data = wb.getWorksheet(worksheet.name);
// how to save worksheet as tab1.xlsx
// let dt =await newwork.xlsx.writeFile('tab1.xlsx',data);
}
});
});
}
fl();
解决方法
我创建了一个不太好的解决方案,尽管它对我有用。基本上,您多次阅读 xlsx,并删除不需要的工作表。这种方式为我保留了格式。
async function excelTest() {
await workbook.xlsx.readFile('test.xlsx').then(async function(){
workbook.eachSheet(async function(worksheet,sheetId) {
let newWorkbook = new exceljs.Workbook();
await newWorkbook.xlsx.readFile('test.xlsx').then(async function(){
newWorkbook.eachSheet(function(newSheet,newSheetId){
if (sheetId != newSheetId) {
newWorkbook.removeWorksheet(newSheetId);
}
});
await newWorkbook.xlsx.writeFile(sheetId + '.xlsx');
});
});
});
}
,
const ExcelJS = require('exceljs');
const sourceWb = new ExcelJS.Workbook();
filename = "abc.xlsx";
const fl = async () => {
sourceWb.xlsx.readFile(filename)
.then(async function() {
sourceWorksheet = sourceWb.getWorksheet('tab1');
var targetWorkbook = new Excel.Workbook;
var targetSheet = targetWorkbook.addWorksheet('newtab');
targetSheet.model = Object.assign(sourceWorksheet.model,{
mergeCells: sourceWorksheet.model.merges
});
targetSheet.name = 'newtab';
targetWorkbook.xlsx.writeFile('target.xlsx');
});
}
你可以试试model.merges