5

私は、Sharepoint サーバー上のフォルダーにある何千もの Excel ワークブック (現在は約 14000) にわたってデータ セットが保存されているプロジェクトに取り組んでいます。各ワークブックは、そのワークブックのデータ サブセットへの変更を反映するために定期的に変更されます。このデータを保存して更新するのは良い方法ではないことはわかっていますが、それが現状です。

フォルダー内のすべてのワークブックから 1 つまたは複数のフィールドの内容を抽出するさまざまなクエリを実行する必要があります。私は次のように一連のワークブックを反復処理することでこれを行ってきました。

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ブックを開いたり閉じたりする必要のないデータを高速に読み取る方法はありますか? または、開閉プロセスを処理してこれを高速化する方法はありますか?

4

1 に答える 1

1

ADO を使用して Excel ワークブックにデータベースとして接続し、それらに対して SQL ステートメントを発行できるようにします。私は間違いなくデータの読み取りだけでなく、書き込みにもこれを行います (こちらを参照)。

Access にデータを保存すると、Excel に保存するよりも確実に改善されます。また、データベースのサイズを抑えるために、定期的にコンパクト化をスケジュールすることを検討することもできます。

于 2013-02-20T06:15:34.093 に答える