diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 2dc1563..31bcea2 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -1620,7 +1620,7 @@ if (val.Contains(Environment.NewLine) && !style.Alignment.WrapText) Style.Alignment.WrapText = true; } - else if (value is TimeSpan || (TimeSpan.TryParse(val, out tsTest) && !Double.TryParse(val, out dTest))) + else if (value is TimeSpan || (!Double.TryParse(val, out dTest) && TimeSpan.TryParse(val, out tsTest))) { _dataType = XLCellValues.TimeSpan; if (style.NumberFormat.Format == String.Empty && style.NumberFormat.NumberFormatId == 0) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 3ac3162..28f268c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -749,27 +749,23 @@ public XLCell Cell(XLAddress cellAddressInRange) { - //var absoluteAddress = cellAddressInRange + RangeAddress.FirstAddress - 1; - var absoluteAddress = new XLAddress(cellAddressInRange.Worksheet, - cellAddressInRange.RowNumber + RangeAddress.FirstAddress.RowNumber - 1, - cellAddressInRange.ColumnNumber + RangeAddress.FirstAddress.ColumnNumber - 1, - cellAddressInRange.FixedRow, - cellAddressInRange.FixedColumn); + Int32 absRow = cellAddressInRange.RowNumber + RangeAddress.FirstAddress.RowNumber - 1; + Int32 absColumn = cellAddressInRange.ColumnNumber + RangeAddress.FirstAddress.ColumnNumber - 1; - if (absoluteAddress.RowNumber <= 0 || absoluteAddress.RowNumber > XLHelper.MaxRowNumber) + if (absRow <= 0 || absRow > XLHelper.MaxRowNumber) { throw new IndexOutOfRangeException(String.Format("Row number must be between 1 and {0}", XLHelper.MaxRowNumber)); } - if (absoluteAddress.ColumnNumber <= 0 || absoluteAddress.ColumnNumber > XLHelper.MaxColumnNumber) + if (absColumn <= 0 || absColumn > XLHelper.MaxColumnNumber) { throw new IndexOutOfRangeException(String.Format("Column number must be between 1 and {0}", XLHelper.MaxColumnNumber)); } - var cell = Worksheet.Internals.CellsCollection.GetCell(absoluteAddress.RowNumber, - absoluteAddress.ColumnNumber); + var cell = Worksheet.Internals.CellsCollection.GetCell(absRow, + absColumn); if (cell != null) return cell; @@ -777,20 +773,25 @@ //var style = Style; Int32 styleId = GetStyleId(); Int32 worksheetStyleId = Worksheet.GetStyleId(); - + if (styleId == worksheetStyleId) { XLRow row; XLColumn column; - if (Worksheet.Internals.RowsCollection.TryGetValue(absoluteAddress.RowNumber, out row) + if (Worksheet.Internals.RowsCollection.TryGetValue(absRow, out row) && row.GetStyleId() != worksheetStyleId) styleId = row.GetStyleId(); - else if (Worksheet.Internals.ColumnsCollection.TryGetValue(absoluteAddress.ColumnNumber, out column) + else if (Worksheet.Internals.ColumnsCollection.TryGetValue(absColumn, out column) && column.GetStyleId() != worksheetStyleId) styleId = column.GetStyleId(); } + var absoluteAddress = new XLAddress(cellAddressInRange.Worksheet, + cellAddressInRange.RowNumber + RangeAddress.FirstAddress.RowNumber - 1, + cellAddressInRange.ColumnNumber + RangeAddress.FirstAddress.ColumnNumber - 1, + cellAddressInRange.FixedRow, + cellAddressInRange.FixedColumn); var newCell = new XLCell(Worksheet, absoluteAddress, styleId); - Worksheet.Internals.CellsCollection.Add(absoluteAddress.RowNumber, absoluteAddress.ColumnNumber, newCell); + Worksheet.Internals.CellsCollection.Add(absRow, absColumn, newCell); return newCell; } diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index 5600666..78668d7 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -15,42 +15,29 @@ { private static void Main(string[] args) { - var timer = new Stopwatch(); - var timerAll = new Stopwatch(); - timerAll.Start(); - using (XLWorkbook wb = new XLWorkbook(XLEventTracking.Disabled)) + var wb = new XLWorkbook(); + foreach (var sheetNum in Enumerable.Range(1, 1)) { - using (var ws = wb.AddWorksheet("MergeCellsWorksheet")) - { - int totalRows = 5000; - - // Create some ranges - ws.Cell("AO1").Value = "A"; - ws.Cell("AP1").Value = "B"; - ws.Cell("AQ1").Value = "C"; - ws.Cell("AR1").Value = "D"; - ws.Cell("AS1").Value = "E"; - ws.Cell("AT1").Value = "1"; - ws.Cell("AU1").Value = "2"; - - var listRange = ws.Range("AO1:AU1"); - - timer.Start(); - for (int i = 1; i <= totalRows; i++) - { - ws.Cell(i, 1).NewDataValidation.List(listRange); - Console.Clear(); - } - timer.Stop(); - } - - wb.SaveAs(@"C:\temp\test.xlsx"); + CreateSheet(wb, sheetNum); + Console.WriteLine("Sheet " + sheetNum); } - timerAll.Stop(); - Console.WriteLine(); - Console.WriteLine("Add validation Took {0}s", timer.Elapsed.TotalSeconds); - Console.WriteLine("Complete Took {0}s", timerAll.Elapsed.TotalSeconds); - Console.ReadKey(); + wb.SaveAs(@"c:\temp\saved.xlsx"); + Console.WriteLine("Done"); + } + + private static void CreateSheet(XLWorkbook wb, Int32 sheetNum) + { + using (var ws = wb.AddWorksheet("Sheet " + sheetNum)) + { + foreach (var ro in Enumerable.Range(1, 1000)) + { + foreach (var co in Enumerable.Range(1, 100)) + { + ws.Cell(ro, co).Value = ro + co; + } + } + ws.Dispose(); + } } }