我有一个Excel文件,在这种形式:

Column 1    Column 2    Column 3  
 data1        data2    
 data1        data2  
 data1        data2  
 data1        data2  
 data1        data2       data3  

也就是说,整个第3栏是空的,除了最后一行中。我访问的Excel文件通过OleDbDataAdapter,返回一个数据表:这里的代码。

query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;

这一点是,在这种情况下,我的代码返回的数据表只有第1列和第2列.
我的猜测是,喷气发动机试图推断列类型的种类型的第一个单元在每个柱;第一个值null,整个列被忽略。
我试图填补在零和这个代码实际上是回所有三个列;这显然是最可取的办法,因为我必须要处理大量的小文件。
反转的选择范围(从,即"A1:C5"到"C5:A1")不工作。我在找一些更优雅。
我已经发现了几个员额的讨论类型的不匹配(varchar细胞在int列,反之亦然),但实际上还没有找到任何与此相关的一个。
谢谢你读!

编辑

奇怪的行为。我需要工作大多是Excel2003年。xls文件,但由于这个问题已经回答了我想我可以试验我的代码对Excel2007年。xslx文件。连串如下:

string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";

我得到"外表并不是预期的格式"的例外而我想是标准的例外时,有一个版本之间的不匹配ACE/喷气机和文件被打开。

字符串

Provider=Microsoft.ACE.OLEDB.12.0 

意味着我使用的是最新版本的OLEDB,我参加了一个快速查看周围,这个版本使用到处都是需要的连接。阅读文件。
我已经尝试过只有一个香草的提供者(仅Excel12.0,而不IMEX也不HDR)但是我得到同样的例外。
我上。净2.0.50727SP2,也许时间的升级?

有帮助吗?

解决方案

我重建了你的情况下返回的3所列是否正确。也就是说,第一两列充分填充数据和第三包含空,直至最后一行,其中有数据。

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";
DataTable dt = new DataTable();
OleDbConnection conn = new OleDbConnection(connString);
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn);

adapter.Fill(dt);

注意我用的 Access Database Engine(ACE) 提供商,成功地老 Joint Engine Technology(JET) 提供者,和我结果可以表示行为之间的差异。当然,如果你不是已经在使用它,我建议使用 ACE 供应商,因为我认为,微软将太多。此外,请注意连接的 Extended Properties:

"HDR=是;"表示第一 行包含columnnames,不是数据。"HDR=否;"表示相反。

"IMEX=1;"告诉驾驶员总是 读"混合的"(数字,日期, 串等)数据列为文本。注意,这一选择可能会影响 excel表格编写入负面的。

让我知道如果这有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top