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,运行起来速度有点慢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • Awesome DotNet,这又是一个 Awesome XXX 系列的资源整理,由 quozd 发起和维护。内容...
    小明yz阅读 3,775评论 0 47
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,987评论 6 342
  • 又是一天过去了。没什么特别的事情发生,这学期的课程就要结束了。然后就是暑假工作,再开学。晚上室友说图书馆要搬迁,得...
    青五阅读 343评论 0 0
  • 学院:电子工程学院 学号:14020199025 姓名:徐铭晟 计算机视觉是最近炒得火热的一个课题。特别是作为最新...
    supportingvecto阅读 858评论 4 1