diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLFilterColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLFilterColumn.cs index 62cb520..11eb172 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLFilterColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/AutoFilters/XLFilterColumn.cs @@ -185,8 +185,9 @@ _autoFilter.Filters.Add(_column, new List()); Boolean addToList = true; - using (var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount())) - { + var ws = _autoFilter.Range.Worksheet as XLWorksheet; + ws.SuspendEvents(); + var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount()); foreach (IXLRangeRow row in rows) { Boolean foundOne = false; @@ -206,15 +207,15 @@ var cell = row.Cell(_column); if (cell.DataType != XLCellValues.Number || !condition(cell.GetDouble())) continue; - row.WorksheetRow().Unhide().Dispose(); + row.WorksheetRow().Unhide(); foundOne = true; } if (!foundOne) - row.WorksheetRow().Hide().Dispose(); + row.WorksheetRow().Hide(); addToList = false; } - } + ws.ResumeEvents(); } private IEnumerable GetValues(int value, XLTopBottomType type, bool takeTop) @@ -261,8 +262,10 @@ _autoFilter.Filters.Add(_column, new List()); Boolean addToList = true; - using (var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount())) - { + var ws = _autoFilter.Range.Worksheet as XLWorksheet; + ws.SuspendEvents(); + var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount()); + foreach (IXLRangeRow row in rows) { Boolean foundOne = false; @@ -282,16 +285,17 @@ var cell = row.Cell(_column); if (cell.DataType != XLCellValues.Number || !condition(cell.GetDouble())) continue; - row.WorksheetRow().Unhide().Dispose(); + row.WorksheetRow().Unhide(); foundOne = true; } if (!foundOne) - row.WorksheetRow().Hide().Dispose(); + row.WorksheetRow().Hide(); addToList = false; } - } + + ws.ResumeEvents(); } private IEnumerable GetAverageValues(bool aboveAverage) @@ -360,20 +364,21 @@ } _autoFilter.Column(_column).FilterType = filterType; Boolean isText = typeof(T) == typeof(String); - using (var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount())) + var ws = _autoFilter.Range.Worksheet as XLWorksheet; + ws.SuspendEvents(); + var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount()); + foreach (IXLRangeRow row in rows) { - foreach (IXLRangeRow row in rows) - { - Boolean match = isText - ? condition(row.Cell(_column).GetString()) - : row.Cell(_column).DataType == XLCellValues.Number && - condition(row.Cell(_column).GetDouble()); - if (match) - row.WorksheetRow().Unhide().Dispose(); - else - row.WorksheetRow().Hide().Dispose(); - } + Boolean match = isText + ? condition(row.Cell(_column).GetString()) + : row.Cell(_column).DataType == XLCellValues.Number && + condition(row.Cell(_column).GetDouble()); + if (match) + row.WorksheetRow().Unhide(); + else + row.WorksheetRow().Hide(); } + ws.ResumeEvents(); return new XLFilterConnector(_autoFilter, _column); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index f7a65b6..52b3e3e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Security.AccessControl; namespace ClosedXML.Excel { @@ -428,7 +429,7 @@ CreatePackage(stream, true); else if (_loadSource == XLLoadSource.File) { - using (var fileStream = new FileStream(_originalFile, FileMode.Open)) + using (var fileStream = new FileStream(_originalFile, FileMode.Open, FileAccess.Read)) { CopyStream(fileStream, stream); fileStream.Close(); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index fb6c974..4748be5 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -1370,5 +1370,25 @@ public IXLRanges MergedRanges { get { return Internals.MergedRanges; } } public IXLConditionalFormats ConditionalFormats { get; private set; } + + private Boolean _eventTracking; + public void SuspendEvents() + { + _eventTracking = EventTrackingEnabled; + EventTrackingEnabled = false; + } + public void ResumeEvents() + { + EventTrackingEnabled = _eventTracking; + } + //public new Int32 RowCount() + //{ + // return XLHelper.MaxRowNumber; + //} + + //public new Int32 ColumnCount() + //{ + // return XLHelper.MaxColumnNumber; + //} } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs index d3ff18b..cefe55c 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs @@ -76,6 +76,27 @@ Assert.AreEqual("Sheet2", wb.Worksheet(2).Name); Assert.AreEqual(2, wb.Worksheets.Count); } - + + [TestMethod] + public void RowCountTime() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + var start = DateTime.Now; + ws.RowCount(); + var end = DateTime.Now; + Assert.IsTrue((end - start).TotalMilliseconds < 500); + } + + [TestMethod] + public void ColumnCountTime() + { + var wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Sheet1"); + var start = DateTime.Now; + ws.ColumnCount(); + var end = DateTime.Now; + Assert.IsTrue((end - start).TotalMilliseconds < 500); + } } }