XLS转XLSX[C#,JavaScript]

工作中有一些2003版之前的Excel文件,现在想把他们批量转换成2007+的格式,这里总结3种方法,复杂度依次递增,完美度依次递增。

1. JavaScript

利用js-xlsx包 ,可以在NodeJs环境中进行xls到xlsx的转换,非常简单,示例代码如下:
先安装依赖npm install xlsx

const XLSX = require('xlsx');
var oldFile= XLSX.readFile('./test.xls');
XLSX.writeFile(oldFile, './test.xlsx');

优点
快,不依赖Office,易部署
缺点
只适合纯文字类的转换,无法转换公式、样式、图片、图表。

2. C# NPOI

NPOI是从Java的POI移植过来的,速度也非常快,需要在nuget安装NPOI依赖,Install-Package NPOI

using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

void ConvertWorkbook()
{
    using (var streamRead = new FileStream(@"./test.xls", FileMode.Open, FileAccess.Read))
    using (var streamWrite = new FileStream(@"./test.xlsx", FileMode.OpenOrCreate, FileAccess.Write))
    {
        var book = new HSSFWorkbook(streamRead );
        var newBook = new XSSFWorkbook();
        var copiedSheets = Enumerable.Range(0, book.NumberOfSheets).Select(i => book.CloneSheet(i));
        copiedSheets.Select((sheet, index) => new {sheet, index}).ToList()
            .ForEach(item => newBook.Insert(item.index, item.sheet));
        newBook.Write(streamWrite);
    }
}

优点
速度非常快,不依赖Office
缺点
无法转换图片、图表。

3.C# Excel

这个是必杀技,100%成功率和兼容性,先安装nuget依赖,Install-Package Microsoft.Office.Interop.Excel

void ConvertWorkbook()
{
    var app = new Microsoft.Office.Interop.Excel.Application {Visible = false};
    var book = app.Workbooks.Open(@"./test.xls");
    //注意,新的文件名没后缀
    book.SaveAs(Filename: @"./test", FileFormat: Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook);
    book.Close();
    app.Quit();
}

优点
各种格式、类型都兼容
缺点
需要在电脑上安装Excel,运行起来速度有点慢

你可能感兴趣的:(XLS转XLSX[C#,JavaScript])