複数のExcelファイルを操作する
複数のExcelファイルを使って操作する時は、ファイル毎の「識別ID」を取得しておき、対象ファイルの操作時に「識別ID」を指定してから操作します。
一つのファイルを操作する時は何も意識しませんでしたが、複数ファイルの操作時は上記のように「識別ID」を意識しなければならないのでしょうか..面倒だなぁ。
基本的に OpenBookEx / ReadBookEx / CreateBookEx メソッドでファイルをオープンし。SelectBookメソッドで対象ファイルを選択し処理。最後にCloseBookExメソッドで保存、という流れです、が.....
サンプルプログラム1 (SelectBookメソッドを使用しない)
まずは、ExcelCreatorのヘルプを元にしてサンプルを作成しました。
そのサンプルソースを見るとOpenExメソッド実行後、SelectBookメソッドを使わず、すぐさまセル値の更新をしています。
対象ファイルをオープンした直後にセル更新をするなら、「SelectBookメソッドは必要ない」という事なのでしょうか?
サンプルソースを示します。
Dim xlsCr As New ExcelCreator.XlsCreator Dim FileID1 As UInt32 'ファイル1用 識別ID Dim FileID2 As UInt32 'ファイル2用 識別ID '------------------------------------- 'ファイル1 '------------------------------------- 'オープン xlsCr.OpenBookEx("c:\sample1.xls", "", FileID1) 'セルの更新 xlsCr.Cell("A2").Long = 50000 '------------------------------------- 'ファイル2 '------------------------------------- 'オープン xlsCr.OpenBookEx("c:\sample2.xls", "", FileID2) 'セルの更新 xlsCr.Cell("A3").Long = 50000 '------------------------------------- 'クローズ '------------------------------------- xlsCr.CloseBookEx(True, FileID1) xlsCr.CloseBookEx(True, FileID2) xlsCr.Dispose()
<実行結果>
ちゃんと出来てます...
サンプルプログラム2 (SelectBookメソッドを使用)
では次に、SelectBookメソッドを使ってみましょう。
サンプルソースを示します。
Dim xlsCr As New ExcelCreator.XlsCreator Dim FileID1 As UInt32 'ファイル1用 識別ID Dim FileID2 As UInt32 'ファイル2用 識別ID '------------------------------------- 'ファイル1 '------------------------------------- 'オープン xlsCr.OpenBookEx("c:\sample1.xls", "", FileID1) '操作対象ファイルを選択 xlsCr.SelectBook(FileID1) 'セルの更新 xlsCr.Cell("A2").Long = 50000 '------------------------------------- 'ファイル2 '------------------------------------- 'オープン xlsCr.OpenBookEx("c:\sample2.xls", "", FileID2) '操作対象ファイルを選択 xlsCr.SelectBook(FileID2) 'セルの更新 xlsCr.Cell("A3").Long = 50000 '------------------------------------- 'クローズ '------------------------------------- xlsCr.CloseBookEx(True, FileID1) xlsCr.CloseBookEx(True, FileID2) xlsCr.Dispose()
<実行結果>
ちゃんと出来てます...
サンプルプログラム3 (SelectBookメソッド使用したり、しなかったり)
では次に、サンプル1で仮定した事(対象ファイルをオープンした直後にセル更新をするなら、「SelectBookメソッドは必要ない」)を少し意地悪く確認してみます。
ファイル1をオープン後、普通にSelectBookメソッドを実行。
次にファイル2をオープンし、このときはSelectBookメソッドを実行しない、
という流れで行ってみます。
サンプルソースを示します。
Dim xlsCr As New ExcelCreator.XlsCreator Dim FileID1 As UInt32 'ファイル1用 識別ID Dim FileID2 As UInt32 'ファイル2用 識別ID 'ファイル1オープン xlsCr.OpenBookEx("c:\sample1.xls", "", FileID1) '操作対象ファイルを選択 xlsCr.SelectBook(FileID1) 'セルの更新 xlsCr.Cell("A1").Long = 1000 xlsCr.Cell("A2").Long = 2000 'ファイル2オープン xlsCr.OpenBookEx("c:\sample2.xls", "", FileID2) 'セルの更新 xlsCr.Cell("A3").Long = 3000 xlsCr.Cell("A4").Long = 4000 '------------------------------------- 'クローズ '------------------------------------- xlsCr.CloseBookEx(True, FileID1) xlsCr.CloseBookEx(True, FileID2) xlsCr.Dispose()
<実行結果>
ちゃんと出来てます...
この事から
「対象ファイルをオープンした直後にセル更新をするなら、SelectBookメソッドは必要ない」
と言えるかと思いますが、明示的にSelectBookメソッドを書いた方が混乱しないと思います。
履歴
- 2012/02/16
- 公開