将Excel工作表加载到DataTable中,但只导入每个单元格的前256个字符,

时间:2012-03-21 07:48:19

标签: c# .net excel oledb

我有一张excel表,我想用OleDb加载到数据表中。 该工作表包含一个多行文本列,最多包含1000个字符。

但是,使用下面的代码,导入后每个单元格中我的DataTable中只有256个字符。

这是提供者的限制还是可以告诉它读取整个列?

var connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\file.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";";
var sheetName = "Sheet1";

using (var con = new OleDbConnection(connectionString))
{
    con.Open();

    var table = new DataTable(sheetName);
    var query = "SELECT * FROM [" + sheetName + "]";
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
    adapter.Fill(table);
    return table;
}

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。

问题是OleDb正在猜测,选择哪种dbtype。 并且,如果前几行只包含短于256个字符的数据,那么它将应用于所有行。

但是,作为一种解决方法,我只是将包含大量数据的一行移动到工作表的开头,现在导入了整个数据。

这是一个描述问题的链接。还有一个注册表项的解决方法,但我没有尝试过。

http://www.xtremevbtalk.com/showthread.php?t=206454

答案 1 :(得分:1)

此注册表修复程序适用于我。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000000