使用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文件中查询数据。