使用ADODB Excel 2010 VBA读取和使用长度超过255的字符串

时间:2014-09-11 15:59:43

标签: excel vba excel-vba ado adodb

这对你们来说是个好事:

我想在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工作簿并保存更改,以便我可以在从已关闭的工作簿中读取信息之前在每列的顶部插入虚拟的第一行。

2 个答案:

答案 0 :(得分:4)

修改

除非你愿意经历unzipping and editing the underlying XML data的艰难过程,否则答案是否定的。

但是,如果你放松了不打开这些源文件的约束,那么下面的过程就可以了。

原始回答:

由于您已经在使用Excel VBA并且愿意添加虚拟数据行,因此在查询数据之前将以下内容添加到宏中:​​

  • 在Excel中原生打开文件
  • 插入虚拟行
  • close&保存文件

然后,您可以继续使用ADODB查询已关闭的Excel文件中的数据。

答案 1 :(得分:1)

几年前你的问题会非常有趣并且是最新的。

自2007年以来(参见MSDN: Introducing the Office (2007) Open XML File Formats)旧的Excel二进制格式变得缓慢过时,留在封闭源空间中,一些遗留API(连同它们的局限性)被替代品取代,尤其是{{3 }}

我不知道你是否可以破解传统ADODB驱动程序的行为方式不同,但肯定有其他方法和库可以完成工作。

一些相关的Stack Overflow问题,其中包含可能有用的解决方案的链接:

一些相关的API(用于C#)取代ADODB并消除其局限性: