複数csvファイルをexcelの各シートに書き込む
複数のCSVファイルを各々一つのexcelファイルの各ワークシトに書き込む方法のコードを下記のようにQueryTableを使った形にしてみました。
$csvFile1 = "D:\test_data\test_data1.csv"
$csvFile2 = "D:\test_data\test_data2.csv"
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$book = $excel.Workbooks.Add()
$Book.Worksheets.Add()
$sheet1 = $excel.Worksheets.Item(2)
$sheet2 = $excel.Worksheets.Item(1)
$startRange = "C2"
$outputColumn = $sheet1.Range($startRange).Column
$outputRow = $sheet1.Range($startRange).Row
$QueryTable = $sheet1.QueryTables.Add("TEXT;$csvFile1",$sheet1.cells($outputRow,$outputColumn))
$QueryTable.TextFileCommaDelimiter = $True
$QueryTable.TextFilePlatform = 65001
$QueryTable.TextFileStartRow = 1
$QueryTable.Refresh($false)
$QueryTable.Name = "仮テーブル"
$QueryTable.Delete()
$startRange = "C2"
$outputColumn = $sheet2.Range($startRange).Column
$outputRow = $sheet2.Range($startRange).Row
$QueryTable = $sheet2.QueryTables.Add("TEXT;$csvFile2",$sheet2.cells($outputRow,$outputColumn))
$QueryTable.TextFileCommaDelimiter = $True
$QueryTable.TextFilePlatform = 65001
$QueryTable.TextFileStartRow = 1
$QueryTable.Refresh($false)
$QueryTable.Name = "仮テーブル"
$QueryTable.Delete()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null
[gc]::Collect()
これは2個のcsvファイルだから何とかなっていますがファイルが増えた場合これではとても面倒なことになります。私の能力ではコンパクトにコードを纏めることが出来ません。コンパクトな方法をお教えください。別にExport-Excel等使う方法でもかまいません。
お礼
いつもお世話になっております。 Webでも情報を集めてみましたが、 やはりご指摘のように記録マクロでコツコツと 調べていくしかないようです。 VBAヘルプも参考にしてみたいと思います。 ご回答いただきありがとうございました。