前回EPPlusというパッケージの情報があったのでこれを使ってみる。
EPPlus-Create advanced Excel 2007 spreadsheets on the server
名前からしてもExcelPackeageのPlusなので、こちらの方が偉そうだ。
最終更新日が2007年のExcelPackeageに比べ、こちらは2012年9月と今でも開発が継続されていそうなので機能・品質ともに期待できる。
ちょこちょこ調べながら使ってみたが、あまり悩むことも無く簡単に使えた。
書式も結構自由に設定できるのでサーバーでちょっとしたレポートを作るには十分といった感じ。
品質的にも日本仕様でちょっとうまくいかない(金額の$編集は出来るが\編集ができない)ことが有ったが、ExcelPackeageよりはかなり良さげ。
難しくないのでサンプルソースだけUPしておく。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 | #Excelモジュールロード $scriptPath = Split-Path $myInvocation.MyCommand.path $dllPath = Join-Path $scriptPath "dll\EPPlus" | Join-Path -ChildPath EPPlus.dll [Reflection.Assembly]::LoadFrom($dllPath) | Out-Null #Excelシート作成 $filePath = join-path ([Environment]::GetFolderPath("desktop")) "test.xlsx" if(test-path $filepath){del $filePath} $excel = New-Object OfficeOpenXml.ExcelPackage -ArgumentList $filePath $sheet = $excel.Workbook.Worksheets.Add("テストシート1") $sheet.Cells["A1"].Value = "NO" $sheet.Cells["A1"].Style.Font.Bold = $true $cell = $sheet.Cells.Item(1,2) $sheet.Cells.Item(1,2).Value = "名前" $sheet.Cells.Item(1,2).Style.Font.Size = 18 $cell.Style.Font.Name = "メイリオ" $cell.Style.Font.Color.SetColor("red") $cell.Style.Fill.PatternType = [OfficeOpenXml.Style.ExcelFillStyle]::Solid $cell.Style.Fill.BackgroundColor.SetColor([Drawing.Color]::Green) $cell.Style.Border.BorderAround([OfficeOpenXml.Style.ExcelBorderStyle]::Thick) $sheet.Cells["C1"].Value = "住所" $sheet.Cells.Item(2,1).Value = 1 $sheet.Cells.Item(2,2).Value = "原辰則" $sheet.Cells.Item(2,3).Value = "田園調布" $sheet.Cells.Item(3,1).Value = 2 $sheet.Cells.Item(3,2).Value = "中畑清" $sheet.Cells.Item(3,3).Value = "所沢" $sheet.Cells["D1"].Value = "年棒" $sheet.Cells["D2"].Value = 1200000 $sheet.Cells["D2"].Style.Numberformat.Format = "#,##0" $sheet.Cells["D2"].Style.Font.Name = "メイリオ" $sheet.Cells["D3"].Value = 4200000 $sheet.Cells["D3"].Style.Numberformat.Format = "#,##0" $sheet.Cells["A4"].Formula = "SUM(A2:A3)" $sheet.Cells["B4"].Formula = "A2+A3" $sheet.Cells["A1:D1"].Style.HorizontalAlignment = [OfficeOpenXml.Style.ExcelHorizontalAlignment]::Center $sheet.Cells["A2:C3"].Style.Border.Left.Style = [OfficeOpenXml.Style.ExcelBorderStyle]::Dotted $sheet.Cells["A2:C3"].Style.Border.Top.Style = [OfficeOpenXml.Style.ExcelBorderStyle]::Dotted $sheet.Cells["A2:C3"].Style.Border.Right.Style = [OfficeOpenXml.Style.ExcelBorderStyle]::Dotted $sheet.Cells["A2:C3"].Style.Border.Bottom.Style = [OfficeOpenXml.Style.ExcelBorderStyle]::Dotted $excel.Save() $excel.Dispose() |
結果は、こんな感じのExcelが出来上がる。
いい感じ。
なぜか、Windows8では依存関係ファイルが見つからないといってDLLがロードできなかったが(C#ではOK)、サーバー側は当面2012にはならないので良しとした。
また、ExcelPackeageではテンプレートファイルを使ってExcelを作るケースが多かったのでEPPlusでも試してみたのだが、ExcelPackeageと同様の指定ではうまくいかなかった。
コンストラクタの定義を見ると、出力ファイル・テンプレートファイルともに「FileInfo」型をサポートしていたので、ファイルパスの文字列では無く、ちゃんと「FileInfo」オブジェクトを作ってアサインするとうまくいった。
#FileInfo作成(出力ファイル、テンプレートファイル) $excel = New-Object OfficeOpenXml.ExcelPackage -ArgumentList $fileInfo,$templateInfo |
0 件のコメント:
コメントを投稿