美文网首页
XLS转XLSX[C#,JavaScript]

XLS转XLSX[C#,JavaScript]

作者: JIGI | 来源:发表于2018-01-09 02:20 被阅读385次

    工作中有一些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]

          本文链接:https://www.haomeiwen.com/subject/aqbinxtx.html