2

我有一个相当大的 csv 文件(大约 800MB),我需要通过 VBA(我正在使用 Excel 2010)从 Excel 文件中访问它来运行一些计算。现在我想避免直接打开文件,因为 Excel 需要 aeons 来完成。

因此,我决定将其作为 ADO-Recordset 打开,如 本文所述(也在 stackoverflow 上) 不幸的是,列数似乎限制为 255至少这是我在调用该AdoRecordset.Fields.count方法时得到的数字。

我尝试在stackoverflow中搜索一些已解决的帖子,发现:

  1. 无法从 csv 文件传输超过 255 条记录以访问
  2. 使用 Microsoft Jet OLEDB 对 CSV 的列限制

还没有人回答第一个问题,我想知道除了第二篇文章中描述的以外,是否还有其他解决方案——如果可能的话,我想避免安装额外的软件。

我的问题是:

  1. 有没有办法将 csv 文件打开为具有超过 255 个可用字段/列的 ADO 记录集 - 我需要大约 3000 列和 10000 行。
  2. 如果不是这种情况,是否还有其他方法可以在不实际打开 csv 文件的情况下读取它(如果文件很大,这需要数年时间)?

csv 文件不是强制性的,我实际上可以将数据转换为任何必要的格式。Access 将不适用于我有 3000 列和 10000 行,而 MS Access 无法处理 3000 列。是否有一种文件类型可以更轻松、更快速地处理?(在使用 ExcelVBA 打开和阅读方面)

这一定是常见的问题,我想知道为什么在网上找不到解决方案。

4

1 回答 1

2

3000 看起来很大,但有一个杂项:

Dim FileNum As Integer
Dim DataLine As String
Dim SplitData()


FileNum = FreeFile()
Open "Filename" For Input As #FileNum

While Not EOF(FileNum)
    Line Input #Filename, DataLine ' read in data 1 record at a time
    SplitData = Split(DataLine, ",")
    'Process big array
Wend

读取数据的每一行都将进入field1SplitData(0)field3000SplitData(2999)(从零开始的数组)

于 2012-06-25T16:21:53.077 回答