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的情况了。