質問: wb.Worksheet("Sheet1") wb.SaveAs("新しく作成されるExcelフルパス.xlsx") End Sub ``` ### 補足情報(FW/ツールのバージョンなど) 環境:VB.NET(VisualStudio2017) ClosedXML(バージョン0.93.1.0)
回答: 現象の確認を行っただけで、解決には至っておりません。 ご提示の現象を確認致しました。 当方で実験した結果、同一列に同じ入力規則があった場合、入力規則のRangeが変わります。 | 列A | 列B | 列C | | --- | --- | --- | | 入力規則A | | | | 入力規則B | | | | 入力規則A | 入力規則A | | とあった場合 Save前は ws.DataValidations.Count=4 ws.DataValidations(0).Range="A1:A1" ws.DataValidations(1).Range="A2:A2" ws.DataValidations(2).Range="A3:A3" ws.DataValidations(3).Range="B3:B3" とあるのが ws.DataValidations.Count=2 ws.DataValidations(0).Range="A1:A3,B3:B3" ws.DataValidations(1).Range="A2:A2" となって保存され、エクセルにて確認したところ、A2のセルは入力規則Aが適用されました。 保存した後、纏められた入力規則のRangeを"A1:A3,B3:B3"から”A1:A1,A3:A3,B3:B3”に変更してみましたが、Saveを実行すると"A1:A3,B3:B3"に変わりました。 ClosedXMLのソースを見てみましたが、保存する際にDataValidationsを纏める行為を行っているようです。 (/ClosedXML/Excel/XLWorkbook_Save.csの5146行あたり) この部分を修正し、ビルドしなおせば今回の現象は起こらなくなるかと思いますが、他にどのような影響があるかは分かりません。 ### 追記 ClosedXMLのMasterブランチのソースをダウンロードし、XLWorkbook_Save.csの5172行あたりの ``` var dataValidations = worksheetPart.Worksheet.Elements().First(); cm.SetElement(XLWSContentManager.XLWSContents.DataValidations, dataValidations); dataValidations.RemoveAllChildren(); xlWorksheet.DataValidations.Consolidate(); ``` を ``` var dataValidations = worksheetPart.Worksheet.Elements().First(); cm.SetElement(XLWSContentManager.XLWSContents.DataValidations, dataValidations); dataValidations.RemoveAllChildren(); //xlWorksheet.DataValidations.Consolidate(); ``` とコメントアウトしビルドしたもので試したところ、DataValidationsが纏められて入力規則が必要なところ以外に適用されることはなくなりました。 ただ、この修正を加えることにより他に影響があるのかは分かりません。 修正を加えたものを使用するかは自己責任でお願いいたします。