【问题标题】:How to save a worksheet from excel as a new excel file using javascript如何使用javascript将excel中的工作表保存为新的excel文件
【发布时间】:2021-06-22 05:45:39
【问题描述】:

一个 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();

【问题讨论】:

  • 我觉得没有简单的解决办法,可以试试下面的步骤吗? 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');
  • 它正在复制数据但丢失了所有样式格式
  • 直接设置工作表怎么样:newWorkbook.worksheets[0] = worksheet;
  • 试过还是一样。

标签: javascript excel worksheet exceljs


【解决方案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 能够通过修复或删除内容来打开文件
  • 我在 API 中找不到更好的解决方案,也许你可以在 ExcelJS GitHub 上提交功能请求。除了使用替代库之外,可能还有一些解决方案可以满足此要求。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多