diff --git a/ClosedXML/ClosedXML/ClosedXML.sln b/ClosedXML/ClosedXML/ClosedXML.sln index cfa7fa3..6cad801 100644 --- a/ClosedXML/ClosedXML/ClosedXML.sln +++ b/ClosedXML/ClosedXML/ClosedXML.sln @@ -1,8 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClosedXML_Sandbox", "ClosedXML_Sandbox\ClosedXML_Sandbox.csproj", "{38B882F0-E6F2-45C5-9BE9-CDC27FBEB4AB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5C94E22C-85AA-48FD-B082-CF929FFC6C31}" @@ -32,6 +30,9 @@ EndProjectSection EndProject Global + GlobalSection(TestCaseManagementSettings) = postSolution + CategoryFile = ClosedXML.vsmdi + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms @@ -135,7 +136,7 @@ GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(TestCaseManagementSettings) = postSolution - CategoryFile = ClosedXML.vsmdi + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true EndGlobalSection EndGlobal diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs index 2990966..77d0838 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs @@ -8,8 +8,8 @@ { private readonly Dictionary> rowsCollection = new Dictionary>(); - public Dictionary ColumnsUsed = new Dictionary(); - public HashSet Deleted = new HashSet(); + public readonly Dictionary ColumnsUsed = new Dictionary(); + public readonly Dictionary> deleted = new Dictionary>(); public Int32 MaxColumnUsed; @@ -45,9 +45,10 @@ columnsCollection.Add(column, cell); if (row > MaxRowUsed) MaxRowUsed = row; if (column > MaxColumnUsed) MaxColumnUsed = column; - var sp = new XLSheetPoint(row, column); - if (Deleted.Contains(sp)) - Deleted.Remove(sp); + + HashSet delHash; + if (deleted.TryGetValue(row, out delHash)) + delHash.Remove(column); } private static void IncrementUsage(Dictionary dictionary, Int32 key) @@ -90,8 +91,20 @@ Count--; DecrementUsage(RowsUsed, row); DecrementUsage(ColumnsUsed, row); - var sp = new XLSheetPoint(row, column); - Deleted.Add(sp); + + HashSet delHash; + if (deleted.TryGetValue(row, out delHash)) + { + if (!delHash.Contains(column)) + delHash.Add(column); + } + else + { + delHash = new HashSet(); + delHash.Add(column); + deleted.Add(row, delHash); + } + Dictionary columnsCollection; if (rowsCollection.TryGetValue(row, out columnsCollection)) { diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 0b7840d..3173dac 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -3956,7 +3956,7 @@ { sheetData.RemoveChild(sheetDataRows[r.Key]); sheetDataRows.Remove(r.Key); - xlWorksheet.Internals.CellsCollection.Deleted.RemoveWhere(d => d.Row == r.Key); + xlWorksheet.Internals.CellsCollection.deleted.Remove(r.Key); } var distinctRows = cellsByRow.Keys.Union(xlWorksheet.Internals.RowsCollection.Keys); @@ -4026,14 +4026,20 @@ ++lastCell) + distinctRow : c.CellReference.Value, c => c); - foreach (var c in xlWorksheet.Internals.CellsCollection.Deleted.ToList()) + foreach (var kpDel in xlWorksheet.Internals.CellsCollection.deleted.ToList()) { - var key = XLHelper.GetColumnLetterFromNumber(c.Column) + c.Row.ToStringLookup(); - if (!cellsByReference.ContainsKey(key)) continue; - row.RemoveChild(cellsByReference[key]); - xlWorksheet.Internals.CellsCollection.Deleted.Remove(c); + foreach (var delCo in kpDel.Value.ToList()) + { + var key = XLHelper.GetColumnLetterFromNumber(delCo) + kpDel.Key.ToStringLookup(); + if (!cellsByReference.ContainsKey(key)) continue; + row.RemoveChild(cellsByReference[key]); + kpDel.Value.Remove(delCo); + } + if (kpDel.Value.Count == 0) + xlWorksheet.Internals.CellsCollection.deleted.Remove(kpDel.Key); } + if (!cellsByRow.ContainsKey(distinctRow)) continue; var isNewRow = !row.Elements().Any(); @@ -4148,11 +4154,11 @@ } } } - xlWorksheet.Internals.CellsCollection.Deleted.RemoveWhere(d => d.Row == distinctRow); + xlWorksheet.Internals.CellsCollection.deleted.Remove(distinctRow); } foreach ( var r in - xlWorksheet.Internals.CellsCollection.Deleted.Select(c => c.Row).Distinct().Where( + xlWorksheet.Internals.CellsCollection.deleted.Keys.Where( sheetDataRows.ContainsKey)) { sheetData.RemoveChild(sheetDataRows[r]); diff --git a/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs b/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs index 9abc417..5765c10 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClosedXML")] -[assembly: AssemblyCopyright("Copyright © Manuel De Leon 2013")] +[assembly: AssemblyCopyright("Copyright © Manuel De Leon 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -31,6 +31,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.71.0.0")] -[assembly: AssemblyFileVersion("0.71.0.0")] +[assembly: AssemblyVersion("0.71.1.0")] +[assembly: AssemblyFileVersion("0.71.1.0")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("ClosedXML_Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100a1fb8ba59167fe734d64128ca73d32c45cb8a117246d09c95c8769db88fe332b0a3396bedd0ea48ee42b0e5796fec0798ca5cb628a9a6de80d35d6c67b936ca1670347b3d4f2b769c8ce2ddcf959dbac6bcd88e6c08751ea1fffa0522de3507193e7035305a8aa008d6c88cca1341b3120fa9c347ab3f97e2d772e2709277da5")] \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs b/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs index 9f44c09..fb5cf8a 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Net3.5/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClosedXML_Net3.5")] -[assembly: AssemblyCopyright("Copyright © Manuel De Leon 2012")] +[assembly: AssemblyCopyright("Copyright © Manuel De Leon 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.71.0.0")] -[assembly: AssemblyFileVersion("0.71.0.0")] +[assembly: AssemblyVersion("0.71.1.0")] +[assembly: AssemblyFileVersion("0.71.1.0")]