EPPlus - Excelファイルを保存する
EPPlus - Excelファイルを保存する
EPPlus でブックを保存する方法を紹介する。
サンプルの動作確認には、以下の環境を利用した。
- .NET Framework 4.8
- EPPlus 4.5.3.3
(商用利用できる最後のバージョン)
上書き保存
Excel ブックを FileInfo 指定で開いた場合は、 ExcelPackage.Save メソッドで上書き保存できる。
良いか悪いか、書き込みパスワードが設定されているブックも、パスワードを入力することなく上書き保存できた。
var fi = new FileInfo(@"C:\tmp\EPPlus\Book1.xlsx");
using (var package = new ExcelPackage(fi))
{
//
// ~~~何らかの処理~~~
//
// 上書き保存
package.Save();
}
Stream 指定で開いた場合、Save メソッドでは保存されなかった。
(Stream.CanWrite プロパティは true なのに)
例外も発生しなかったので、上書き保存されなかったことを検知する術はなさそうだ。
Stream 指定で開いた場合は、後述の「名前を付けて保存」のやり方で保存するしかないだろう。
using (var package = new ExcelPackage())
{
using (var stream = new FileStream(@"C:\tmp\EPPlus\Book1.xlsx",
FileMode.Open))
{
// ブックを開く
package.Load(stream);
//
// ~~~何らかの処理~~~
//
// 上書き保存……されない?!
package.Save();
}
}
名前を付けて保存
ExcelPackage.SaveAs メソッドで名前を付けて保存ができる。
メソッドの引数には FileInfo または Stream を指定する。
// 名前を付けて保存
var newFi = new FileInfo(@"C:\tmp\EPPlus\NewBook1.xlsx");
package.SaveAs(newFi);
// 名前を付けて保存
using (var outputStream = new FileStream(@"C:\tmp\EPPlus\NewBook1.xlsx",
FileMode.Create))
{
package.SaveAs(outputStream);
}
書き込みできないストリーム(Stream.CanWrite プロパティが false)を指定した場合、例外が発生する。
発生する例外は System.Exception: Can not write to outputstream 。
try
{
// 名前を付けて保存
// 読み取り専用のストリームを指定してみる
using (var outputStream = new FileStream(@"C:\tmp\EPPlus\NewBook1.xlsx",
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
package.SaveAs(outputStream);
}
}
catch (Exception ex)
{
// 例外が投げられた
// System.Exception: Can not write to outputstream
System.Diagnostics.Debug.WriteLine(ex.Message);
}
読み取りパスワードを付けて保存
読み取りパスワードを付けて保存するには、次のいずれかの方法を使う。
- プロパティに設定してから保存する
- 保存時に指定する
プロパティに設定してから保存する
ExcelPackage.Encryption.Password プロパティにパスワードを設定してから保存する。
// パスワードを設定
package.Encryption.Password = "ABCDEFGH";
// 上書き保存
package.Save();
// ↑もちろん名前を付けて保存(SaveAs)も可
保存時に指定する
ExcelPackage.SaveAs メソッドの第2引数にパスワードを指定して保存する。
// 名前を付けて保存(SaveAs メソッドの第2引数がパスワード)
var newFi = new FileInfo(@"C:\tmp\EPPlus\NewBook1.xlsx");
package.SaveAs(newFi, "ABCDEFGH");
優先度は SaveAs メソッドで指定したパスワードの方が高い
もし、両方に指定した場合、 SaveAs メソッドに指定したパスワードが保存される。
// パスワードを設定
package.Encryption.Password = "ABCDEFGH";
// 名前を付けて保存
// (SaveAs メソッドの第2引数にもパスワードを指定。こちらが使われる)
var newFi = new FileInfo(@"C:\tmp\EPPlus\NewBook1.xlsx");
package.SaveAs(newFi, "12345678");
書き込みパスワードを付けて保存(おそらくできない)
書き込みパスワードを付ける機能はないと思われ。
元から書き込みパスワードが設定されたブックを開いて上書き保存は可能だが、新しくパスワードを設定したり、パスワードを変更したりはできない。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?