GOTO M.

趣味のコーディングとか、勉強とか、読書とか

Windows PowerShell 指定したフォルダ以下のExcelファイルのシートを統合

## 利用例
## .\integrateExclel.ps1 c:\excels c:\result.xls 

## コマンドラインからの呼び出し時の引数
param(
 [String]$srcDirStr,  # 入力ディレクトリ
 [String]$dstFileStr  # 出力先ファイル
)

## Excelオブジェクトを作成
$xl = new-object -c excel.application
$xl.displayAlerts = $false

## 出力先オブジェクトを作成
$wbDst = $xl.workbooks.add()

## 入力ディレクトリから.xlsファイルを抽出
$srcFileList = dir $srcDirStr -recurse -include *.xls `
              | where {!$_.PSIsContainer}

## 各.xlsファイルから、出力先オブジェクトにシートをコピー
foreach($srcFile in $srcFileList){

 $srcFilePath = $srcFile.fullname
 $wbSrc = $xl.workbooks.open($srcFilePath)

 $sheetCount = $wbSrc.sheets.count
 for ($i = 1; $i -le $sheetCount; $i++){

   ## 空でないシートのみをコピー
   if($wbSrc.sheets.item($i).usedrange.count -gt 1){
     $wbSrc.sheets.item($i).copy($wbDst.sheets.item(1))
   }
 }

 $wbSrc.close($false) # 入力ファイルをクローズ
}

## 自動生成された3シート(Sheet1,..,Sheet3)を削除
for ($i = 1; $i -le 3 ; $i++){
 $wbDst.sheets.item($wbDst.sheets.count).delete()
}
## 出力先オブジェクトをファイルとして保存
$wbDst.SaveAs($dstFileStr)
$wbDst.close($true)

$xl.quit()