C# 实现xls类型转换为xlsx类型

Office97-2003 创建的Excel文件后缀为xls, Office 2007 之后的版本创建的Excel文件后缀为 xlsx,在C#中使用EPPLUS模块读取2003版本创建的Excel存在一些问题,但是2007版本后创建的Excel不存在问题,所以需要将xls 版本转换为xlsx版本再操作,就不存在问题。

例如:

存在一个 Sample.xls 文件

转换代码如下:

private const int OLDOFFICEVESION = -4143;

private const int NEWOFFICEVESION = 56;

void ExcelFormatConvert(string oldExcelfile)

{

var app = new Microsoft.Office.Interop.Excel.Application { Visible = false };

var book = app.Workbooks.Open(oldExcelfile);

int FormatNum; //保存excel文件的格式

string Version; //excel版本号

Version = app.Version;  //获取你使用的excel 的版本号

if (Convert.ToDouble(Version) < 12)//使用Excel 97-2003

{

FormatNum = OLDOFFICEVESION;

}

else

{

FormatNum = NEWOFFICEVESION;  //使用 excel 2007或更新

}

//注意,新的文件名没后缀

//book.SaveAs(Filename: @“newExcel”, FileFormat: Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook);

//book.SaveAs(@“D:\CodeTest\Excel操作\测试报告\NewSample”, FormatNum);

book.SaveAs(@“D:\CodeTest\Excel操作\测试报告\NewSample”, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook);

book.Close();

app.Quit();

}

将老版本格式的xls文件传入到转换函数,将转换后的Excel而文件另存到指定目录下,D:\CodeTest\Excel操作\测试报告\NewSample,且名称为NewSample,无需指定文件后缀的。

在WPF中创建一个Button,执行click事件中执行选择xls文件,转换。

private void btnXls2Xlsx_Click(object sender, RoutedEventArgs e)

{

string filePath = string.Empty;

string fileExt = string.Empty;

OpenFileDialog file = new OpenFileDialog(); //open dialog to choose file

if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK) //if there is a file choosen by the user

{

filePath = file.FileName; //get the path of the file

fileExt = System.IO.Path.GetExtension(filePath); //get the file extension

if (fileExt.CompareTo(".xls") == 0) //2003

{

try

{

ExcelFormatConvert(filePath);

}

catch (Exception ex)

{

ShowMessage(“转换失败!\n” + ex.Message);

return;

}

}

}

ShowMessage(“转换成功!”);

}

转换成功后:

文件的后缀变成了 xlsx, 使用Epplus读写不再会存在null的情况了。


版权声明:本文为flysh05原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。