c#Excel导入查询

时间:2011-07-15 08:49:54

标签: c# excel

我被要求导入一个excel电子表格,这很好,但我在导入包含数字和字母数字字符的某个单元格时出现问题。

excel例如

      Col
       A            B              C
Row  0123    8 Fake Address    CF11 1XX
     XX123   8 Fake Address    CF11 1XX

根据上面的例子,当加载数据集时,它处理第2行,col(A)作为数字字段,导致数组中的空列。

我与OleDb的关系是

var dbImportConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dataSource 
                + @";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";")

在这方面,我设置了IMEX = 1,它应该将所有内容解析为数据集中的字符串。此外,如果我将第1行Col(A)更改为'XX123',则整个Col(A)成功解析为字符串!不幸的是,这不会对我的场景有所帮助,因为excel文件是从外部客户端传递的,外部客户端也建议没有办法通过带有标题行的文件来解决我的问题。

我在这一点上的想法是,当我收到编辑文件(以编程方式)插入标题的文件时,但是因为客户端可能会更改包含的列数,这对我来说不是一个安全的选项。

所以基本上我需要找到一个解决方案来处理电子表格中的当前格式并将所有单元格传递到数组中。有没有人遇到过这个问题?或者知道如何解决这个问题?

我在等待你的想法 谢谢 斯科特 ps如果这不清楚只是喊

3 个答案:

答案 0 :(得分:2)

您好有一个名为TypeGuessRows的注册表设置,您可以更改它,告诉Excel扫描所有列,然后再决定它的类型。目前,似乎设置为读取列中的x个行并确定列的类型,例如如果您的前x行是整数而x + 1是字符串,则导入将失败,因为它已经确定这是一个整数列。您可以在决定之前更改注册表设置以读取整个列。

请同时看到

http://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/

答案 1 :(得分:0)

这不是一个直接的答案,但我建议您使用Excel Data Reader,这是LGPL许可下的开源,是用C#编写的轻量级快速库,用于读取Microsoft Excel文件('97 -2007)。

答案 2 :(得分:0)

点击此链接:http://www.dbsoftlab.com/imex1.html

提供的解决方案,或多或少,与发布的saj相比是相同的......但IMO此链接有更好的解释。