是否有更快的方法从工作簿收集数据而不是迭代Workbooks.Open()?

时间:2013-02-12 20:27:10

标签: excel sharepoint excel-vba vba

我正在开发一个项目,其中数据集存储在Sharepoint服务器上的数千个Excel工作簿(目前为14000个)中,每个工作簿都会定期修改以反映该工作簿中数据子集的更改。我知道这不是存储和更新这些数据的好方法,但情况就是这样。

我必须执行各种查询,涉及从文件夹中的所有工作簿中提取一个或多个字段的内容。我一直在通过迭代这组工作簿来做到这一点:

Function getData() As Workbook

Dim resultBk As Workbook
Dim fldr As Folder
Dim fso As New FileSystemObject
Dim fileObj As File
Dim filePath As String
Dim queryBk As Workbook

'create a workbook for storing the query results
Set resultBk = Workbooks.Add(resultBkTemplatePath)

'get the folder with all the workbooks to be queried
Set fldr = fso.GetFolder(sharepointFolderPath)

For Each fileObj In fldr.Files
    'try opening each of the workbooks
    Set queryBk = Workbooks.Open(fileObj.Path, ReadOnly:=True)

    'get data from queryBk and add it to resultBk, or add a row with an error message if queryBk failed to open
    addBkDataToResults resultBk, queryBk

    queryBk.Close False
    Set queryBk = Nothing
Next

getData = resultBk

End Function

在Sharepoint连接中打开和关闭这么多工作簿的过程非常缓慢;运行完整查询通常需要12-14个小时。有没有更快的方法从Excel中读取数据而不需要打开/关闭它?或者有没有办法可以处理打开/关闭过程以使其更快?

1 个答案:

答案 0 :(得分:1)

我会使用ADO并连接到Excel工作簿作为数据库,允许您针对它们发出SQL语句。我肯定会这样做是为了阅读数据,也是为了写作(见here)。

将数据保存在Access中肯定比在Excel中保存数据有所改进,并且您可以考虑每隔一段时间安排一次压缩以保持数据库大小不变。