【发布时间】:2014-11-05 16:17:10
【问题描述】:
给你们一个东西:
我想在 VBA EXCEL 中使用 ADODB 从已关闭的工作簿中读取信息。 有时excel中单元格中的字符串长度大于255。
然后是这个限制:http://support.microsoft.com/kb/189897
“如果要截断的字段的前 8 条记录包含 255 个或更少字符,则您的数据可能会被截断为 255 个字符。默认情况下,Microsoft Excel ODBC 驱动程序会将数据的前 8 行扫描到确定每一列中的数据类型。”
对此有一个“解决方案”:在注册表中将 TypeGuessRows 值设置为零 (0),但是:
“出于性能原因,如果您的 Excel 表非常大,不建议将 TypeGuessRows 值设置为零 (0)。当此值设置为零时,Microsoft Excel 将扫描您表中的所有记录以确定类型每一列的数据。"
这是我的问题:
有没有一种方法可以告诉(谎言)驱动程序读取超过 255 个字符(除了在每列的第一行放置一个虚拟字符串或将 TypeGuessRows 值设置为零 (0))。
如果我不能;有没有办法写入已关闭的 Excel 工作簿并保存更改,以便在从已关闭的工作簿中读取信息之前,我可以在每列的顶部插入虚拟第一行。
【问题讨论】:
-
你用
TypeGuessRows = 0实际测试过性能吗?首先看看对性能有多大影响是有意义的...... -
顺便说一句。您可以使用
cn.Execute("INSERT INTO [namedRange] Values ('" & String(255, "i") & "'))"插入值,但它不会接受超过 255 个字符的字符串,因此不要依赖此作为解决方案。 -
我没有用 TypeGuessRows = 0 测试过性能但是我的文件很大,有很多信息,很多行,其中一些是共享的,我不想弄乱注册表设置。所以这对我来说不是解决方案。
-
我想知道微软为什么不解决这个愚蠢的问题。
-
@user2781180 我认为公认的答案给了我们原因:“旧的 Excel 二进制格式逐渐过时”。我不希望这会得到解决。