PowerShell から Excel を操作して Workbook を Unicode text として保存するスクリプト
このスクリプトは、chooseExcelFileで選択したExcelWorkbookと同じフォルダにある全てのExcelWorkbookをUnicode textファイルに変換する。
xls2UnicodeTxt と chooseExcelFile は .psm1 としてそのうちモジュール化したい。
# toolXls2UnicodeTxt.ps1 # handling for Excel Workbook function xls2UnicodeTxt{ param( $xlsW, $xlsU ) # Excel の機能を参照 :: Excel File を参照するための御膳立て $oXl = New-Object -ComObject Excel.Application # File 選択 Dialog で選択されたワークブックを開く $oBk = $oXl.Workbooks.Open( $xlsW ) # 単一ワークシートのワークブックを想定している $oSh = $oBk.sheets.item(1) # SaveAs で確認Dialog が開かないようにする $oXl.displayAlerts = $false # Excel 定数 xlUnicodeText : 42 / CSV を指定するときはこちら xlCSV : 6 $oBk.SaveAs( $xlsU, 42 ) $oBk.Close() $oXl.quit() [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($oXl) | Out-Null } # choose of ExcelWorkbook # File 選択 Dialog が開き(ShowDialog) "OK" ボタンが押された場合:選択された filePath、そうでない場合:nullstring が返る $chooseExcelFile = { # Sytem.Windows.Forms 参照 :: File 選択 Dialog の御膳立て Add-Type -Assembly System.Windows.Forms # File 選択 Dialog を参照 $dlg = New-Object System.Windows.Forms.OpenFileDialog $dlg.Filter = "Excel(*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm" $dlg.InitialDirectory = "." $dlg.Title = "ファイル選択" return $( if($dlg.ShowDialog() -eq "OK"){ $dlg.FileNames }else{ "" } ) } $ScriptBase = Split-Path ( & { $myInvocation.ScriptName } ) -parent pushd $ScriptBase $choosePath = &$chooseExcelFile $chooseParent = split-path $choosePath -parent gci $chooseParent | ? { $_.name -match ".xls" } | % { $srcPath = join-path $chooseParent $_.name; $srcPath $dstPath = join-path $chooseParent $([regex]::replace($_.name,".xls.$|.xls$",".txt")); # $dstPath xls2UnicodeTxt -xlsW $srcPath -xlsU $dstPath } popd