各製品の資料を入手。
詳細はこちら →CData
こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。
CData Cmdlets for Excel を使えば、PowerShell からExcel のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for Excel およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でExcel への接続を行います。レプリケーションは4つのステップがあります。
Authentication セクションのExcelFile には有効なExcel ファイルを設定する必要があります。
URI をバケット内のExcel ファイルに設定します。さらに、次のプロパティを設定して認証します。
URI をExcel ファイルへのパスに設定します。Box へ認証するには、OAuth 認証標準を使います。 認証方法については、Box への接続 を参照してください。
URI をExcel ファイルへのパスに設定します。Dropbox へ認証するには、OAuth 認証標準を使います。 認証方法については、Dropbox への接続 を参照してください。ユーザーアカウントまたはサービスアカウントで認証できます。ユーザーアカウントフローでは、以下の接続文字列で示すように、ユーザー資格情報の接続プロパティを設定する必要はありません。
URI をExcel ファイルを含むドキュメントライブラリに設定します。認証するには、User、Password、およびStorageBaseURL を設定します。
URI をExcel ファイルを含むドキュメントライブラリに設定します。StorageBaseURL は任意です。指定しない場合、ドライバーはルートドライブで動作します。 認証するには、OAuth 認証標準を使用します。
URI をExcel ファイルへのパスが付いたサーバーのアドレスに設定します。認証するには、User およびPassword を設定します。
デスクトップアプリケーションからのGoogle への認証には、InitiateOAuth をGETANDREFRESH に設定して、接続してください。詳細はドキュメントの「Google Drive への接続」を参照してください。
モジュールのインストール:
Install-Module ExcelCmdlets
Excel への接続:
$excel = Connect-Excel -Excel File $Excel File
取得ターゲットのリソースの取得:
$data = Select-Excel -Connection $excel -Table "Sheet"
Invoke-Excel cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-Excel -Connection $excel -Query 'SELECT * FROM Sheet WHERE Name = @Name' -Params @{'@Name'='Bob'}
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
モジュールのインストール:
Install-Module MySQLCmdlets
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
Excel、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Excel のリソース(Sheet)と同じテーブル名を持っている必要があります。
$data | % {
$row = $_
$values = @()
$columns | % {
$col = $_
$values += $row.$($col)
}
Add-MySQL -Connection $mysql -Table "Sheet" -Columns $columns -Values $values
}
一度PowerShell でExcel とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-Excel -Connection $excel -Table "Sheet" | % {
$row = $_
$values = @()
$columns | % {
$col = $_
$values += $row.$($col)
}
Add-MySQL -Connection $mysql -Table "Sheet" -Columns $columns -Values $values
}
別のPowerShell モジュールで、Excel を別のデータベースに複製する場合、Select-Excel cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
これで、Excel のデータをMySQL に複製できました。分析、BI などでExcel のデータをMySQL から使うことができるようになります。