使用ADODB Excel 2010 VBA读取和处理长度超过255的string

这里有一件事给你们:

我想使用VBA EXCEL中的ADODB从封闭的工作簿中读取信息。 碰巧excel中单元格中的string有时长度大于255。

然后这里是这个限制: http : //support.microsoft.com/kb/189897

“如果字段的前8条logging被截断包含255个或更less的字符,您的数据可能会被截断为255个字符Microsoft Excel ODBC驱动程序将默认情况下扫描您的数据的前8行以确定types每列数据“。

有一个“解决scheme”:在registry中将TypeGuessRows值设置为零(0),但是:

“出于性能方面的原因,如果Excel表格非常大,则不build议将TypeGuessRows值设置为零(0)。将此值设置为零时,Microsoft Excel将扫描表中的所有logging以确定每个表中的数据types列“。

所以这是我的问题:

有一种方法,我可以告诉(谎言)驱动程序读取超过255个字符(除了在每列的第一行放置一个虚拟string或设置TypeGuessRows值为零(0))。

如果我不能; 有没有办法写封闭的Excel工作簿,并保存所做的更改,以便我可以在每列的顶部插入虚拟的第一行,然后再从closures的工作簿中读取信息。

你的问题在几年前是非常有趣和最新的。

自2007年以来(请参阅MSDN:Office(2007)Open XML File Formats简介 ),旧的Excel二进制格式慢慢过时,留在闭源空间中,一些遗留API(连同它们的限制)被替代replace,特别是Microsoft:Open XML SDK 2.5

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

一些相关的堆栈溢出问题,可能有用的解决scheme的链接:

  • 从C#读取Excel文件
  • Interop Excel很慢

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

编辑:

除非您愿意经历解压和编辑底层XML数据的艰难过程,否则答案是否定的。

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

原始答案:

由于您已经在Excel VBA中工作并且愿意添加虚拟行数据,所以在查询数据之前将以下内容添加到您的macros中:

  • 在Excel中本地打开文件
  • 插入虚拟行(s)
  • closures并保存文件

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