NPOI 2.0版本 如何读取Excel(2007)模板 FileStream file = new FileStream(@filePath, FileMode.Open, FileAccess.Read); HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); 试试这个可能行不行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);官网说 HSSFWorkbook是针对Excel2003版本的。在最新的2.0中,Workbookfactory会自动根据文件系统的类型返回HSSFWorkbook或XSSFWorkbook(针对2007)。但是我用Workbookfactory,如果模板是2003是没有错误的,一用2007的模板文件就报了上面的错误。 2007 及以上的版本建议使用 openxml,不要用 NPOI 这个问题我刚刚解决 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); } 感谢楼上的代码分享,NPOI终于读出了excel2008的数据。 NPOI 2.0 导出大容量数据不好用XSSFWorkbook对2007版本的EXCEL支持不够好,导出70000条数据时,用时超过了5分钟。 LZ workbook你用workbookfactory创建,那么worksheet呢 我用workbook = workbookfactory.create(fs)老报错Non-negative number required.Parameter name: value 读取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”的版本 求大神帮忙 /// <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); //一行最后一个方格的编号 即总的列数 int cellCount = headerRow.LastCellNum; for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } //最后一列的标号 即总的行数 int rowCount = sheet.LastRowNum; for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } table.Rows.Add(dataRow); } workbook = null; sheet = null; return table; } catch (Exception ex) { throw ex; } }dll下载地址:http://npoi.codeplex.com/releases/view/115353 关于程序窗体如何才能置于游戏之前 在winform中怎样调用html里的js函数 我在调用别人的dll时,死锁了,没有任何返回信息,一般怎么处理?? 用dllimport导入的 winform的另一个bug 请进教C#中的索引与集合中的迭代器相关 单步调试的问题 怎樣把sql server2000的一個表導入到Excel? C# 循环截取字符串,高手大神们进啊 如何引用另一个项目的类? 急招C#高级工程师两名 求注释范文,详细的代码加注释,学习一下 求高手看下程序,顺便帮忙修改下
官网说 HSSFWorkbook是针对Excel2003版本的。在最新的2.0中,Workbookfactory会自动根据文件系统的类型返回HSSFWorkbook或XSSFWorkbook(针对2007)。但是我用Workbookfactory,如果模板是2003是没有错误的,一用2007的模板文件就报了上面的错误。
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);
}
Parameter name: value
/// 读取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); //一行最后一个方格的编号 即总的列数
int cellCount = headerRow.LastCellNum; for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
//最后一列的标号 即总的行数
int rowCount = sheet.LastRowNum; for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
} table.Rows.Add(dataRow);
} workbook = null;
sheet = null;
return table;
}
catch (Exception ex)
{
throw ex;
}
}dll下载地址:http://npoi.codeplex.com/releases/view/115353