有没有更快的方法从工作簿收集数据比迭代Workbooks.Open()?

我正在处理一个项目,在该项目中,数据集存储在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连接打开和closures很多工作簿的过程非常缓慢; 通常需要12-14小时来运行完整的查询。 有没有更快的方式从Excel书籍中读取数据,而无需打开/closures? 还是有办法,我可以处理打开/closures进程,使这个更快?

我将使用ADO并将其连接到Excel工作簿作为数据库,从而允许您针对它们发出SQL语句。 我肯定会这样做的读取数据,但也为写作(见这里 )。

在Access中保存数据肯定会比在Excel中保存数据有所改进,您可以考虑每隔一段时间调度一次压缩文件,以减小数据库的大小。