FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read); IWorkbook workbook = WorkbookFactory.Create(file); 总是报错:“NPOI.OpenXmlFormats.Spreadsheet.ThemeDocument”的类型初始值设定项引发异常。 —> System.InvalidOperationException: 无法生成临时类(result=1)。 |
|
5分 |
FileStream file = new FileStream(@filePath, FileMode.Open, FileAccess.Read);
HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); 试试这个可能行不行 |
HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); 官网说 HSSFWorkbook是针对Excel2003版本的。在最新的2.0中,Workbookfactory会自动根据文件系统的类型返回HSSFWorkbook或XSSFWorkbook(针对2007)。但是我用Workbookfactory,如果模板是2003是没有错误的,一用2007的模板文件就报了上面的错误。 |
|
2007 及以上的版本建议使用 openxml,不要用 NPOI
|
|
15分 |
这个问题我刚刚解决
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read)) { xssfworkbook = new XSSFWorkbook(file); } void ConvertToDataTable() { ISheet sheet = hssfworkbook.GetSheetAt(0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); DataTable dt = new DataTable(); int t = 0; while (rows.MoveNext()) { IRow row = (XSSFRow)rows.Current; int cellCount = row.LastCellNum; DataRow dr = dt.NewRow(); for (int i = 0; i < row.LastCellNum; i++) { ICell cell = row.GetCell(i); if (t == 0) { DataColumn column = new DataColumn(cell.ToString()); dt.Columns.Add(column); } if (cell == null) { dr[i] = null; } else { dr[i] = cell.ToString(); } } dt.Rows.Add(dr); t++; } dataSet1.Tables.Add(dt); } |
好辛苦的那处理分享LZ都不理会
|
|
感谢楼上的代码分享,NPOI终于读出了excel2008的数据。
|
|
NPOI 2.0 导出大容量数据不好用
XSSFWorkbook对2007版本的EXCEL支持不够好,导出70000条数据时,用时超过了5分钟。 |
|
LZ workbook你用workbookfactory创建,那么worksheet呢
|
|
Aspose.Cell不用
|
|
我用workbook = workbookfactory.create(fs)老报错
Non-negative number required. |
|
还在研究~~赶脚和1.2.5区别好大~~
|
|
读取07时:错误 程序集“NPOI.OOXML, Version=2.0.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1”所使用的“NPOI, Version=2.0.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1”版本高于所引用的程序集“NPOI, Version=1.2.5.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1”的版本 求大神帮忙
|
|
931585640@qq.com
|
|
楼主你好。我也遇到这种问题了,请问你是怎么解决的呢。看到及时回复我好吗。多谢了!
|
|
/// <summary>
/// 读取Excels /// </summary> /// <param name=”filePath”>文件路劲</param> /// <returns></returns> public static DataTable ReadExcel(string filePath) { try { //根据路径通过已存在的excel来创建HSSFWorkbook,即整个excel文档 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); IWorkbook workbook = WorkbookFactory.Create(fs); //获取excel的第一个sheet ISheet sheet = workbook.GetSheetAt(0); DataTable table = new DataTable(); //获取sheet的首行 IRow headerRow = sheet.GetRow(0); //一行最后一个方格的编号 即总的列数 for (int i = headerRow.FirstCellNum; i < cellCount; i++) for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) for (int j = row.FirstCellNum; j < cellCount; j++) table.Rows.Add(dataRow); workbook = null; dll下载地址:http://npoi.codeplex.com/releases/view/115353 |
|
楼主怎么解决的啊?
|
|
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReadExcel //工作薄下的第一张表,遍历所有行 } |