C#でエクセルファイルを操作したかったのでClosedXMLを使用したのですが、読み込んだファイルを保存するときにセルの属性が反映されない場合があったので調査して修正してみました。
現象:
- 特定のセルを入力規則で「無効なデータが入力されたら・・」をOFFにしたエクセルファイルを用意。
- ClosedXMLでそのエクセルファイルを読み込む。
- ClosedXMLでセルの内容を加工する。
- ClosedXMLで保存する。
- 「無効なデータが入力されたら・・」が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をセットするように変更。