工作中有一些2003版之前的Excel文件,現(xiàn)在想把他們批量轉(zhuǎn)換成2007+的格式,這里總結(jié)3種方法,復(fù)雜度依次遞增,完美度依次遞增。
1. JavaScript
利用js-xlsx包 ,可以在NodeJs環(huán)境中進(jìn)行xls到xlsx的轉(zhuǎn)換,非常簡(jiǎn)單,示例代碼如下:
先安裝依賴(lài)npm install xlsx
const XLSX = require('xlsx');
var oldFile= XLSX.readFile('./test.xls');
XLSX.writeFile(oldFile, './test.xlsx');
優(yōu)點(diǎn)
快,不依賴(lài)Office,易部署
缺點(diǎn)
只適合純文字類(lèi)的轉(zhuǎn)換,無(wú)法轉(zhuǎn)換公式、樣式、圖片、圖表。
2. C# NPOI
NPOI是從Java的POI移植過(guò)來(lái)的,速度也非常快,需要在nuget安裝NPOI依賴(lài),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);
}
}
優(yōu)點(diǎn)
速度非??欤灰蕾?lài)Office
缺點(diǎn)
無(wú)法轉(zhuǎn)換圖片、圖表。
3.C# Excel
這個(gè)是必殺技,100%成功率和兼容性,先安裝nuget依賴(lài),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");
//注意,新的文件名沒(méi)后綴
book.SaveAs(Filename: @"./test", FileFormat: Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook);
book.Close();
app.Quit();
}
優(yōu)點(diǎn)
各種格式、類(lèi)型都兼容
缺點(diǎn)
需要在電腦上安裝Excel,運(yùn)行起來(lái)速度有點(diǎn)慢