本帖最后由 u010849712 于 2013-05-27 10:57:21 编辑

解决方案 »

  1.   

    要不你用我这个方法试试吧,数据丢失是因为单元格的数据类型不一致,比如相邻两行的单元格数据类型不一致就会忽略.设置属性 IMEX=1就可以读取这些数据了.        //读取excel
            public DataSet ExcelToDS(string Path)
            {
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=\"Excel 8.0;IMEX=1\";";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                string strExcel = "";
                OleDbDataAdapter myCommand = null;
                DataSet ds = null;
                strExcel = "select * from [sheet1$]";
                //sheet1 是你的excel文件需要读取的那个sheet的名字
                myCommand = new OleDbDataAdapter(strExcel, strConn);
                ds = new DataSet();
                myCommand.Fill(ds, "table1");
                return ds;
            }
    获取到的是dataset,要转成datatable很容易                DataSet ds = ExcelToDS(ExcelUrl);
                    //ExcelUrl是你的excel文件的地址(完整地址带后缀名)
                    DataTable drS = new DataTable();
                    drS = ds.Tables[0];
      

  2.   

    这个应该是excel的扩展名问题,.xlsx  应该XSSFWorkbook workbook = new XSSFWorkbook(file);而xls应该用 HSSFWorkbook workbook = new HSSFWorkbook(file);