Jet Engine - 255个字符截断

Gra*_*eme 8 .net oledb import excel jet

我需要将Excel电子表格导入我的程序并具有以下代码:

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;""", MyExcelFile.xls);

command.CommandText = "SELECT * FROM [Sheet1$]";
Run Code Online (Sandbox Code Playgroud)

(注意,上面的代码不是真正的代码,但应该让你看看我在做什么)

我正在导入文件,唯一的问题是Excel工作表中超过255个字符的任何列都被截断.

有没有办法解决这个问题?

我在某处读到,如果你确保前8行中的列中有一长串文本,那么它将被视为备注字段,因此不会被截断,但这似乎不起作用.

有任何想法吗?

格雷姆

Chr*_*s J 6

几次撞到这一个.幸运的是有一个注册表黑客需要修复,在MSDN上有描述:http://support.microsoft.com/kb/189897

实际上,Excel仅查看前八行数据以确定列的长度.如果长度为255个字符或更少,则255是默认值.我上面引用的MSDN文章解释了如何添加一个注册表项" TypeGuessRows",它告诉Excel要扫描多少行来确定列长度.

  • 是的,这是我原来的帖子中的含义 - 检查我的注册表并且TypeGuessRows值为8.我故意在每列的第2行中放入一个500字符长的值,这可能有大数据但是这似乎不太合适有所作为...... (2认同)

Kon*_*man 1

也许您的问题有一个更简单的解决方案,但作为最后的手段,请尝试将 Excel 文件另存为 CSV 文本文件,然后使用常规文件和字符串操作类而不是 JET 引擎对其进行处理。

  • 这就是解决办法吗?严重地?多么糟糕啊!毫无价值,毫无价值的Excel电子表格。对于如此流行的格式,将其数据读入应用程序几乎是不可能的。迄今为止,还没有维护良好、开源、功能齐全的 API 来读取 xlsx 电子表格,而这些 JET 和 ACE 引擎就是这样的黑客(通过查看前 X 行来猜测字段类型,将字段截断为 255 个字符,更改选项所需的注册表黑客攻击、某些功能需要安装 Excel、在 Excel 中打开文件会更改行为等)。真是笑话! (14认同)