FileStream file = new FileStream(@filePath, FileMode.Open, FileAccess.Read);
                HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);  试试这个可能行不行

解决方案 »

  1.   

    HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
    官网说 HSSFWorkbook是针对Excel2003版本的。在最新的2.0中,Workbookfactory会自动根据文件系统的类型返回HSSFWorkbook或XSSFWorkbook(针对2007)。但是我用Workbookfactory,如果模板是2003是没有错误的,一用2007的模板文件就报了上面的错误。
      

  2.   

    2007 及以上的版本建议使用 openxml,不要用 NPOI
      

  3.   

    这个问题我刚刚解决
       
     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);
            }
      

  4.   

    感谢楼上的代码分享,NPOI终于读出了excel2008的数据。
      

  5.   

    NPOI 2.0 导出大容量数据不好用XSSFWorkbook对2007版本的EXCEL支持不够好,导出70000条数据时,用时超过了5分钟。
      

  6.   

    LZ workbook你用workbookfactory创建,那么worksheet呢
      

  7.   

    我用workbook = workbookfactory.create(fs)老报错Non-negative number required.
    Parameter name: value
      

  8.   

    读取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”的版本  求大神帮忙
      

  9.   

    /// <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