今日もちょいつか

お酒の飲み過ぎか、それとも歳のせいなのか毎日ちょっぴり疲れ気味なフリーのソフト屋です。ソフト開発の話題をblogにしてみます。

ASP.NET Core MVC EPPlusを使ったExcelファイル操作

ASP.NET Core MVCExcelファイルを操作する方法を調べてみました。
ASP.NET Core MVCMicrosoftテクノロジーなので
Excelとは親和性が良いと思いますのでサクッと行けると思ったのですが・・・。

ネットを調べてみると「EPPlus」パッケージが良いみたいですので
試してみました。
Visual Studio Community 2017 for Macで確認しています。

NuGetでパッケージの追加

いつものごとく、「EPPlus」パッケージを追加します。

Excel操作のサンプルコード

適当なControllersにサンプルコードを記述して動作を確認してみます。

using OfficeOpenXml;

var xlsxFile = System.IO.File.Create("hatena.xlsx");
using (var package = new ExcelPackage(xlsxFile))
{
 // ワークシートを1枚追加
   ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("新しいシート");
   // セルに値をセット
   worksheet.Cells[1, 1].Value = "test";
   // 保存
   package.Save();
}

新しくhatena.xlsxを作成してワークシートを追加。
そしてセルに値を入れて保存をする。すっごく簡単サンプルコードなのです。

が、
エラーで動きません。

package.Save();

のところで

ArgumentException: 'IBM437' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
Parameter name: name

となってしまいます。
相変わらずこんなところではまってしまうASP.NETなのでした。

いつものごとく対策をネットで調査して
なんとか英語サイトで対策を見つけることができました。
こんなに大変だとは?!

対策は
NuGetで「System.Text.Encoding.CodePages」パッケージを追加して。

上記サンプルコードに呪文を唱えたら無事に保存できました。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

最終的に動いたコードです。

using OfficeOpenXml;

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var xlsxFile = System.IO.File.Create("hatena.xlsx");
using (var package = new ExcelPackage(xlsxFile))
{
 // ワークシートを1枚追加
   ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("新しいシート");
   // セルに値をセット
   worksheet.Cells[1, 1].Value = "test";
   // 保存
   package.Save();
}

毎度のことですが、よーくハマります。
こんな調子でシステムの開発ができるのかとっても不安です。
でも少しづつクリアして行かないと!

かっこいいApple小物のご紹介

Apple Watch 充電 スタンドです。
Apple Watchをセットすると、ちょうどディプレイのようになるカッコよさ。
形状が90年代のMacintoshなのがとても嬉しいです!