如何使用JavaScript将Excel工作表保存为新的Excel文件

4
一个包含两个工作表的Excel文件(TAB1,TAB2)。

enter image description here

如何将下面的Excel中的“TAB1”另存为一个名为tab1.xlsx的新Excel文件?

我正在尝试使用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();

我认为没有简单的解决方案,你可以尝试以下步骤:1. 创建工作簿 var newWorkBook = new ExcelJS.Workbook(); 2. 创建新工作表 var newWorkSheet = newWorkBook.addWorksheet(worksheet.name); 3. 对于每一行,将原始工作表中的值设置到新工作表中:worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { newWorkSheet.getRow(rowNumber).values = row.values; }); 4. 现在你就可以保存工作簿了 await newWorkBook.xlsx.writeFile(worksheet.name + '.xlsx'); - Artúr Manó Marschal
它正在复制数据,但是失去了所有的样式格式。 - saicharan
直接设置工作表怎么样:newWorkbook.worksheets[0] = worksheet; - Artúr Manó Marschal
还是尝试了,但仍然一样。 - saicharan
2个回答

1

我创建了一个不太好的解决方案,虽然它对我有效。基本上,您需要多次读取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');
            });
        });
    });
}

不,对我没有用。虽然保存了,但打开时Excel报错——Excel能够通过修复或删除内容来打开文件。 - saicharan
1
我在API中找不到更好的解决方案,或许你可以在ExcelJS的GitHub上提交一个功能请求。除此之外,使用另一个库可能会对这个需求有一些解决方案。 - Artúr Manó Marschal

0
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接