diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 55cd13f..6e10787 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -1028,7 +1028,7 @@ } else if (Double.TryParse(val, out dTest)) _dataType = XLCellValues.Number; - else if (DateTime.TryParse(val, out dtTest)) + else if (DateTime.TryParse(val, out dtTest) && dtTest >= BaseDate) { _dataType = XLCellValues.DateTime; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidation.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidation.cs index 5f64087..fdb6c34 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidation.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidation.cs @@ -99,6 +99,7 @@ public void List(String list, Boolean inCellDropdown) { AllowedValues = XLAllowedValues.List; + InCellDropdown = inCellDropdown; Value = list; } @@ -110,7 +111,8 @@ public void List(IXLRange range, Boolean inCellDropdown) { AllowedValues = XLAllowedValues.List; - Value = String.Format("'{0}'!{1}", ((XLRange)range).Worksheet.Name, range.RangeAddress); + InCellDropdown = inCellDropdown; + Value = String.Format("'{0}'!{1}", ((XLRange)range).Worksheet.Name, range.RangeAddress.ToStringFixed()); } public void Custom(String customValidation) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 2dde39b..c0025f0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -3243,20 +3243,33 @@ { return value == defaultValue ? null : new BooleanValue(value); } - + private struct MinMax + { + public MinMax (UInt32 min, UInt32 max) + { + Min = min; + Max = max; + } + public UInt32 Min; + public UInt32 Max; + } private static void CollapseColumns(Columns columns, Dictionary sheetColumns) { UInt32 lastMin = 1; Int32 count = sheetColumns.Count; - foreach (KeyValuePair kp in sheetColumns.OrderBy(kp => kp.Key)) + //var minMaxList = new List(); + //var columnsToAdd = new List(); + foreach (KeyValuePair kp in sheetColumns + .Where(kp => !(kp.Key < count && ColumnsAreEqual(kp.Value, sheetColumns[kp.Key + 1]))) + .OrderBy(kp => kp.Key)) { - if ((kp.Key < count && ColumnsAreEqual(kp.Value, sheetColumns[kp.Key + 1]))) continue; - var newColumn = (Column)kp.Value.CloneNode(true); newColumn.Min = lastMin; uint newColumnMax = newColumn.Max.Value; + //minMaxList.Add(new MinMax(lastMin, newColumnMax)); + //columnsToAdd.Add(newColumn); var columnsToRemove = - columns.Elements().Where(co => co.Min.Value >= lastMin && co.Max.Value <= newColumnMax). + columns.Elements().Where(co => co.Min >= lastMin && co.Max <= newColumnMax). Select(co => co).ToList(); columnsToRemove.ForEach(c => columns.RemoveChild(c)); @@ -3264,6 +3277,7 @@ lastMin = kp.Key + 1; } + } private static double GetColumnWidth(double columnWidth) diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/DataValidation.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/DataValidation.xlsx index 613888f..cde9185 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/DataValidation.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/DataValidation.xlsx Binary files differ