複数の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
- 公開