ClosedXMLで読み込んだセルの属性がが反映されない

C#でエクセルファイルを操作したかったのでClosedXMLを使用したのですが、読み込んだファイルを保存するときにセルの属性が反映されない場合があったので調査して修正してみました。

現象:

  1. 特定のセルを入力規則で「無効なデータが入力されたら・・」をOFFにしたエクセルファイルを用意。
  2. ClosedXMLでそのエクセルファイルを読み込む。
  3. ClosedXMLでセルの内容を加工する。
  4. ClosedXMLで保存する。
  5. 「無効なデータが入力されたら・・」がONに戻っている。

原因:
XLWorkbook_Load.cs:LoadDataValidations

if (dvs.ShowErrorMessage != null) dvt.ShowErrorMessage = dvs.ShowErrorMessage;

対策:

if (dvs.ShowErrorMessage != null)
{
dvt.ShowErrorMessage = dvs.ShowErrorMessage;
}
else
{
dvt.ShowErrorMessage = false;
}

解説:
「無効なデータが入力されたら・・」をOFFにするとファイルのShowErrorMessageはNULLになるのだけど、OFFだとコピーされずにデフォルトのtrueになってしまう。
なので、NULLでもfalseをセットするように変更。

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です