この記事では、AccessのテーブルデータをCSVファイルにエクスポートする方法についてご説明します。
【動画】AccessのテーブルデータをCSVファイルにエクスポートする実際の動き
本題に入る前に、まずは次の動画をご覧ください。
PowershellからAccessのインスタンスを生成してTransferTextメソッドを実行し、AccessのテーブルデータをCSVファイルにエクスポートします。
コードの流れ
Accessのデータベースファイルの例
今回は下のAccessのデータベースファイルを用意しました。
Accessのデータベースに「t_item」のテーブルが存在しています。
今回はこの「t_item」のテーブルデータをCSVファイルにエクスポートします。
エクスポートしたCSVファイルは下のとおりです。
「t_item」のテーブルデータがCSVファイルに出力されています。
PowerShellのコード(例)
# フォルダパスを設定する $folderPath = "C:\work\10_勉強\18_PowerShell\0006\" # データベースファイル名を設定する $accessDB = $folderPath + "0006.mdb" # 取得したデータを出力するCSVファイル名を設定する $csvFile = $folderPath + "data.csv" # エクスポートするデータのテーブル名を設定する $tableName = "t_item" # Accessデータベースに接続して操作を行うためのAccessアプリケーションのインスタンスを生成する $accessApp = New-Object -ComObject Access.Application # Accessのデータベースファイルに接続する $accessApp.OpenCurrentDatabase($accessDB) # AccessのテーブルデータをCSVファイルにエクスポートする $accessApp.DoCmd.TransferText([Microsoft.Office.Interop.Access.AcTextTransferType]::acExportDelim, $Null, $tableName, $csvFile, $True) # Accessを終了する $accessApp.Quit() # COMオブジェクトへの参照を解放する [System.Runtime.Interopservices.Marshal]::ReleaseComObject($accessApp) | Out-Null # 変数accessAppを削除し、メモリを解放する Remove-Variable accessApp
注目すべきコード①
最初に見て頂きたいのは2行目から11行目です。
# フォルダパスを設定する $folderPath = "C:\work\10_勉強\18_PowerShell\0005\" # データベースファイル名を設定する $accessDB = $folderPath + "0005.mdb" # 取得したデータを出力するCSVファイル名を設定する $csvFile = $folderPath + "data.csv" # エクスポートするデータのテーブル名を設定する $tableName = "t_item"
コードの説明
以上のコードは、AccessのデータベースファイルのフルパスとCSVファイル名、そしてエクスポートするデータのテーブル名を設定するコードです。
注目すべきコード②
次に見て頂きたいのは14行目から17行目です。
# Accessデータベースに接続して操作を行うためのAccessアプリケーションのインスタンスを生成する $accessApp = New-Object -ComObject Access.Application # Accessのデータベースファイルに接続する $accessApp.OpenCurrentDatabase($accessDB) # AccessのテーブルデータをCSVファイルにエクスポートする $accessApp.DoCmd.TransferText([Microsoft.Office.Interop.Access.AcTextTransferType]::acExportDelim, $Null, $tableName, $csvFile, $True)
コードの説明
以上のコードは、Accessデータベースに接続して操作を行うためのAccessアプリケーションのインスタンスを生成したら、Accessのデータベースファイルに接続してエクスポート処理を行うコードです。
ではエクスポートするのにはどうするのか?というと、PowerShellが直接Accessのメソッドを実行する、という方法を使います。
そのためには、まずはAccessのインスタンスを生成します。(14行目)
「Access.Application」はAccessのアプリケーションを指し、New-Objectコマンドレットの引数に指定して実行することでAccessのインスタンスが生成されます。
Accessのインスタンスを生成することで、PowerShellがAccessのデータベースへの接続ができるようになります。
また、Accessのメソッドも実行することができるようになります。
なお、Accessのアプリケーションをインスタンスとして扱うには、「-ComObject」オプションが必要です。
Accessのデータベースの接続はOpenCurrentDatabaseメソッドにAccessのデータベースファイルを引数に指定して実行します。(17行目)
Accessのデータベースに接続したら、エクスポート処理を行うためのTransferTextメソッドを実行します。(20行目)
TransferTextメソッドの引数は下のとおりです。
第1引数:TransferType
第1引数のTransferTypeは、エクスポートするCSVファイルの形式を指定する引数の項目です。
区切り文字で区切られたデータをCSVファイルにエクスポートしたいので、acExportDelimを指定しています。(acExportDelimは区切り文字で区切られたテキストファイルをエクスポートするための定数)
なお[Microsoft.Office.Interop.Access.AcTextTransferType]は何かというと、型です。
つまりacExportDelimは、Microsoft.Office.Interop.Access.AcTextTransferTypeという列挙型の定数です。
ちなみに、acExportDelimの値は2です。
第2引数:SpecificationName
第2引数のSpecificationNameには、インポートまたはエクスポートの定義名を指定します。
今回は何か定義したものを使うわけではないので$null(何も無し)を指定しています。
第3引数:TableName
第3引数のTableNameにはデータのエクスポートするテーブル名を指定します。
第4引数:FileName
第4引数のFileNameにはCSVファイルのフルパスを指定します。
第5引数:HasFieldNames
第5引数のHasFieldNamesは、エクスポートするCSVファイルの最初の行がフィールド名を含むかどうかを設定します。
今回はヘッダをCSVファイルに出力したいのでTrueを指定しています。
注目すべきコード③
次に見て頂きたいのは23行目から32行目です。
# Accessのデータベースファイルの接続を閉じる $accessApp.CloseCurrentDatabase() # Accessを終了する $accessApp.Quit() # COMオブジェクトへの参照を解放する [System.Runtime.Interopservices.Marshal]::ReleaseComObject($accessApp) | Out-Null # 変数accessAppを削除し、メモリを解放する Remove-Variable accessApp
コードの説明
以上のコードは、Accessのデータベースファイルの接続を閉じてAccessを終了させ、そしてCOMオブジェクトへの参照を解放(Accessのプロセスの終了)する処理のコードです。
コードの詳細
23行目のコードでは、CloseCurrentDatabaseメソッドを実行してAccessのデータベースファイルの接続を閉じます。
26行目のコードでは、Accessを終了させます。
29行目のコードでは、COMオブジェクトへの参照を解放(Accessのプロセスの終了)します。
ReleaseComObjectメソッドの引数にAccessのインスタンスを指定して実行することで、COMオブジェクトへの参照が解放されます。
32行目のコードでは、変数accessAppを削除し、メモリを解放します。
動作確認
「Accessのデータベースファイルの例」をご覧ください。
最後に
この記事では、AccessのテーブルデータをCSVファイルにエクスポートする方法についてご説明しました。
PowerShellからAccessのテーブルデータをCSVファイルにエクスポートしたい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。