diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/IXLDataValidations.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/IXLDataValidations.cs index a5bc443..424a0f0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/IXLDataValidations.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/IXLDataValidations.cs @@ -8,5 +8,6 @@ public interface IXLDataValidations: IEnumerable { void Add(IXLDataValidation dataValidation); + Boolean ContainsSingle(IXLRange range); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidations.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidations.cs index 05aba35..b20d6f5 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidations.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/DataValidation/XLDataValidations.cs @@ -27,5 +27,15 @@ { return GetEnumerator(); } + + public Boolean ContainsSingle(IXLRange range) + { + foreach (var dv in dataValidations) + { + if (dv.Ranges.Count == 1 && dv.Ranges.Contains(range)) + return true; + } + return false; + } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs index 0506ff6..5e6e5a3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs @@ -22,6 +22,8 @@ /// The range to remove from this group. void Remove(IXLRange range); + Int32 Count { get; } + Boolean Contains(IXLRange range); IXLStyle Style { get; set; } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs index 996842d..b0b408d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs @@ -969,10 +969,12 @@ return FindColumns(search, searchContents, false, false); } public IXLRangeColumns FindColumns(String search, XLSearchContents searchContents, Boolean useRegularExpressions) - { + { + throw new NotImplementedException(); } public IXLRangeColumns FindColumns(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) - { + { + throw new NotImplementedException(); } public IXLRangeRows FindRows(String search) @@ -985,9 +987,11 @@ } public IXLRangeRows FindRows(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { + throw new NotImplementedException(); } public IXLRangeRows FindRows(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { + throw new NotImplementedException(); } public new IXLRange Replace(String oldValue, String newValue) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 6766d38..124539d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -945,13 +945,10 @@ { get { - String address = this.RangeAddress.ToString(); - if (Worksheet.DataValidations.Where(dv => - dv.Ranges.Count() == 1 - && dv.Ranges.Contains(this.AsRange()) - ).Any()) + var thisRange = this.AsRange(); + if (Worksheet.DataValidations.ContainsSingle(thisRange)) { - return Worksheet.DataValidations.Where(dv => dv.Ranges.Contains(this.AsRange())).Single(); + return Worksheet.DataValidations.Where(dv => dv.Ranges.Contains(thisRange)).Single(); } else { @@ -1051,9 +1048,11 @@ } public IXLCells FindCells(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { + throw new NotImplementedException(); } public IXLCells FindCells(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { + throw new NotImplementedException(); } public IXLRangeBase Replace(String oldValue, String newValue) @@ -1066,7 +1065,7 @@ } public IXLRangeBase Replace(String oldValue, String newValue, XLSearchContents searchContents, Boolean useRegularExpressions) { - + throw new NotImplementedException(); } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs index fb0c7f3..a5f3d2e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs @@ -23,10 +23,12 @@ public void Add(IXLRange range) { + count++; ranges.Add((XLRange)range); } public void Add(String rangeAddress) { + count++; var byExclamation = rangeAddress.Split('!'); var wsName = byExclamation[0].Replace("'", ""); var rng = byExclamation[1]; @@ -35,9 +37,16 @@ } public void Remove(IXLRange range) { + count--; ranges.RemoveAll(r => r.ToString() == range.ToString()); } + private Int32 count; + public Int32 Count { + get { return count; } + private set { count = value; } + } + public IEnumerator GetEnumerator() { var retList = new List(); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs index a72b43f..5369185 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs @@ -360,9 +360,11 @@ } public new IXLTableRows FindRows(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { + throw new NotImplementedException(); } public new IXLTableRows FindRows(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { + throw new NotImplementedException(); } public new IXLTable Replace(String oldValue, String newValue) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs index bd4e165..1672bea 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs @@ -7,7 +7,7 @@ namespace ClosedXML.Excel { - internal struct XLAddress: IXLAddress + internal class XLAddress: IXLAddress { #region Constructors /// diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 49b39e6..e214c44 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -821,9 +821,11 @@ } public IXLColumns FindColumns(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { + throw new NotImplementedException(); } public IXLColumns FindColumns(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { + throw new NotImplementedException(); } public IXLRows FindRows(String search) @@ -836,9 +838,11 @@ } public IXLRows FindRows(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { + throw new NotImplementedException(); } public IXLRows FindRows(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { + throw new NotImplementedException(); } public new IXLWorksheet Replace(String oldValue, String newValue) diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index cface98..efc4cc8 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -15,19 +15,20 @@ static void Main(string[] args) { //var fileName = "BasicTable"; - var fileName = "Sandbox"; - //var fileName = "Issue_6429"; - //var wb = new XLWorkbook(String.Format(@"c:\Excel Files\ForTesting\{0}.xlsx", fileName)); - var wb = new XLWorkbook(); - var ws = wb.Worksheets.Add("Sheet1"); - ws.Cell("A1").Value = "Category"; - ws.Cell("A2").Value = "A"; - ws.Cell("A3").Value = "B"; - ws.Cell("B1").Value = "Value"; - ws.Cell("B2").Value = 5; - ws.Cell("B3").Value = 10; + //var fileName = "Sandbox"; + var fileName = "Issue_6510"; + var wb = new XLWorkbook(String.Format(@"c:\Excel Files\ForTesting\{0}.xlsx", fileName)); + //var wb = new XLWorkbook(); + //var ws = wb.Worksheets.Add("Sheet1"); + //ws.Cell("A1").Value = "Category"; + //ws.Cell("A2").Value = "A"; + //ws.Cell("A3").Value = "B"; + //ws.Cell("B1").Value = "Value"; + //ws.Cell("B2").Value = 5; + //ws.Cell("B3").Value = 10; wb.SaveAs(String.Format(@"c:\Excel Files\ForTesting\{0}_Saved.xlsx", fileName)); + //Console.ReadKey(); } @@ -59,7 +60,7 @@ { foreach (var co in Enumerable.Range(1, 5)) { - //ws.Cell(ro, co).Style = GetRandomStyle(); + ws.Cell(ro, co).Style = GetRandomStyle(); //if (rnd.Next(1, 5) == 1) //ws.Cell(ro, co).FormulaA1 = ws.Cell(ro + 1, co + 1).Address.ToString() + " & \"-Copy\""; //else @@ -67,6 +68,13 @@ } //System.Threading.Thread.Sleep(10); } + + Int32 rowCount = ws.LastRowUsed().RowNumber(); + for (Int32 ro = 1; ro <= rowCount; ro += 100) + { + var dv = ws.Range(ro, 1, ro + 99, 5).DataValidation; + } + //ws.RangeUsed().Style.Border.BottomBorder = XLBorderStyleValues.DashDot; //ws.RangeUsed().Style.Border.BottomBorderColor = XLColor.AirForceBlue; //ws.RangeUsed().Style.Border.TopBorder = XLBorderStyleValues.DashDotDot; @@ -85,12 +93,12 @@ //ws.RangeUsed().Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; //ws.RangeUsed().Style.Alignment.WrapText = true; - var startS = DateTime.Now; - ws.Sort(); - var endS = DateTime.Now; - var savedS = (endS - startS).TotalSeconds; - runningSave.Add(savedS); - Console.WriteLine("Sorted in {0} secs.", savedS); + //var startS = DateTime.Now; + //ws.Sort(); + //var endS = DateTime.Now; + //var savedS = (endS - startS).TotalSeconds; + //runningSave.Add(savedS); + //Console.WriteLine("Sorted in {0} secs.", savedS); } @@ -103,7 +111,7 @@ //Console.WriteLine("Bolded all cells in {0} secs.", (end3 - start3).TotalSeconds); var start = DateTime.Now; - //wb.SaveAs(@"C:\Excel Files\ForTesting\Benchmark.xlsx"); + wb.SaveAs(@"C:\Excel Files\ForTesting\Benchmark.xlsx"); var end = DateTime.Now; var saved = (end - start).TotalSeconds; runningSave.Add(saved); @@ -130,7 +138,7 @@ Console.WriteLine("Avg Save time: {0}", runningSave.Average()); Console.WriteLine("Avg Load time: {0}", runningLoad.Average()); Console.WriteLine("Avg Save Back time: {0}", runningSavedBack.Average()); - Console.ReadKey(); + //Console.ReadKey(); } private static IXLStyle style1;