www.cftea.com

NPOI 处理 2003 格式时,提示:not to be a valid OLE2 document

ITPOW2020/6/8 16:35:27

开始,我们使用的是老版本的 NPOI 来处理 Excel,为了自动识别 2007(及以上版本,下同)、2003 版本,使用如下代码:

try
{
	UserModel = new NPOI.XSSF.UserModel.XSSFWorkbook(stream); // 2007 格式
}
catch (Exception)
{
	UserModel = new NPOI.HSSF.UserModel.HSSFWorkbook(stream); // 2003 格式
}

基本运转正常,能够正常识别 2007、2003 格式,但是由于 NPOI 是老版本,所以某些 2007 中的方法还是 Not NotImplementedException(),没办法,只好升级 NPOI 的版本(新版本的 NPOI 不再支持 .NET 2.0),升级 NPOI 后,还是使用的上述代码来判断是哪种格式,但是在遇到 2003 时,提示如下错误:

Invalid header signature; read System.Char[], expected System.Char[] - Your file appears not to be a valid OLE2 document

解决办法如下:

try
{
	UserModel = new NPOI.XSSF.UserModel.XSSFWorkbook(stream); // 2007 格式
}
catch (Exception)
{
	stream.Position = 0; // 增加这句
	UserModel = new NPOI.HSSF.UserModel.HSSFWorkbook(stream); // 2003 格式
  }

或者使用下面的方法:

NPOI.SS.UserModel.WorkbookFactory.Create(stream)

当然,如果遇到 Excel 格式被破坏,或者不是真 Excel 格式,也会遇到上述错误,这种就没办法用上述方法解决了。

<<返回首页<<