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

本文关键字:单元格 导入 字符 256个 加载 工作 DataTable Excel | 更新日期: 2023-09-27 18:28:23

我有一个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;
}

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

我找到了一个解决方案。

问题是OleDb正在猜测要选择哪种数据库类型。而且,如果前几行只包含小于256个字符的数据,则这将应用于所有行。

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

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

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

此注册表修复程序对我有效。

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