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