当前位置: 代码迷 >> C# >> NPOI读取excel2003 报block[二] already removed
  详细解决方案

NPOI读取excel2003 报block[二] already removed

热度:663   发布时间:2016-05-05 05:27:40.0
NPOI读取excel2003 报block[2] already removed?
大神们,小弟在用NPOI读取Excle2003时 HSSFWorkbook wk = new HSSFWorkbook(fs); 初始化WorkBook时报block[2] already removed 错误,请问大神们,如何解决?我google了一下,参照java的一些建议说修改Excel文件的权限,设置过后,一样无效。初始化fs时用的是全路径。急!NPOI版本2.1.1。VS2013、.NET 4.0、windows7.
还有一个问题,Excel第一行是标题,第一列的标题是“时间\科目”,用OleDb第一列没有读出来,不知道是什么问题,后来就改用NPOI,也出了问题,烦请大神帮忙,不胜感激!!!
------解决思路----------------------
读取excel,我还是建议用oledb,虽然有些问题,包括某些标题读不出(通常是合并单元格),数据类型会搞错,顺序会和excel中不一样,但好歹只要格式对,基本能读出来,且格式不变,问题也比较稳定。
比如你读不出的这列列头一般来说会变成F1,还是能够用的。
NPOI我主要是写excel才用,比oledb快,且方便,且有更多的可控制项。
------解决思路----------------------
如果只是读取应该不会这样,是不是文件处于打开或写状态?
------解决思路----------------------


     string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test1.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
             OleDbConnection conn = new OleDbConnection(strConn);
             string strExcel = "";
             DataSet ds = new DataSet();
             strExcel = "select * from [sheet1$]";
             OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn);
             da.Fill(ds);  
             dataGridView1.DataSource = ds.Tables[0];
             for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
             {
                 string s = ds.Tables[0].Rows[i][0].ToString();//读取第一列值
             }




------解决思路----------------------
引用:
Quote: 引用:

读取excel,我还是建议用oledb,虽然有些问题,包括某些标题读不出(通常是合并单元格),数据类型会搞错,顺序会和excel中不一样,但好歹只要格式对,基本能读出来,且格式不变,问题也比较稳定。
比如你读不出的这列列头一般来说会变成F1,还是能够用的。
NPOI我主要是写excel才用,比oledb快,且方便,且有更多的可控制项。

刚开始是用的OleDb,不是第一行第一列读不出来,是整个第一列都没读出来,这才换的NPOI,刚刚又做了一个测试,把源Excel文件中的内容,Copy到新的Excel中,然后用OleDb读,一样读不出来,但用NPOI读就读出来了,也不晓得原Excel格式有啥问题?郁闷的不行。。。


Excel有很多原因导致读取不到数据,曾经遇到好几次,把Excel里面的内容重新复制到新Excel里面就可以读取了
------解决思路----------------------
http://download.csdn.net/detail/diaodiaop/7611721

一般来说应该不是权限的问题.. 看是否是版本的问题.

上面的读取没问题 建议LZ下载下来看看读取你的xls看是否保存..
  相关解决方案