source:
branches/GBT/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/epplus-4.0.3 memory improvement.diff
@
12329
Last change on this file since 12329 was 12179, checked in by abeham, 10 years ago | |
---|---|
File size: 10.1 KB |
-
EPPlus-4.0.3/ExcelCellBase.cs
diff --git a/EPPlus-4.0.3/ExcelCellBase.cs b/EPPlus-4.0.3/ExcelCellBase.cs
a b 480 480 bool fixedRow, fixedCol; 481 481 return GetRowCol(address, out row, out col, throwException, out fixedRow, out fixedCol); 482 482 } 483 internal static bool GetRowCol(string address, out int row, out int col, bool throwException, out bool fixedRow, out bool fixedCol) 484 { 483 internal static bool GetRowCol(string address, out int row, out int col, bool throwException, out bool fixedRow, out bool fixedCol) { 485 484 bool colPart = true; 486 string sRow = "", sCol = ""; 485 int colStartIx = 0; 486 int colLength = 0; 487 487 col = 0; 488 row = 0; 488 489 fixedRow = false; 489 490 fixedCol = false; 490 if (address.IndexOf(':') > 0) //If it is a mult-cell address use 491 { 492 address = address.Substring(0, address.IndexOf(':')); 493 } 491 494 492 if (address.EndsWith("#REF!")) 495 493 { 496 494 row = 0; … … 501 499 int sheetMarkerIndex = address.IndexOf('!'); 502 500 if (sheetMarkerIndex >= 0) 503 501 { 504 address = address.Substring(sheetMarkerIndex + 1);502 colStartIx = sheetMarkerIndex + 1; 505 503 } 506 504 507 address = address.ToUpper(CultureInfo.InvariantCulture); 508 for (int i = 0; i < address.Length; i++) 505 for (int i = colStartIx; i < address.Length; i++) 509 506 { 510 if ((address[i] >= 'A' && address[i] <= 'Z') && colPart && sCol.Length <= 3) 507 char c = address[i]; 508 if (colPart && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) && colLength <= 3) 511 509 { 512 sCol += address[i]; 510 col *= 26; 511 col += ((int)c) - 64; 512 colLength++; 513 513 } 514 else if ( address[i] >= '0' && address[i]<= '9')514 else if (c >= '0' && c <= '9') 515 515 { 516 sRow += address[i]; 516 row *= 10; 517 row += ((int)c) - 48; 517 518 colPart = false; 518 519 } 519 else if ( address[i]== '$')520 else if (c == '$') 520 521 { 521 if (i == 0) 522 fixedCol = true; 523 else 522 if (i == colStartIx) 523 { 524 colStartIx++; 525 fixedCol = true; 526 } 527 else 528 { 529 colPart = false; 524 530 fixedRow = true; 531 } 532 } 533 else if (c == ':') 534 { 535 break; 525 536 } 526 537 else 527 538 { 539 row = 0; 540 col = 0; 528 541 if (throwException) 529 542 { 530 543 throw (new Exception(string.Format("Invalid Address format {0}", address))); 531 544 } 532 545 else 533 546 { 534 row = 0;535 col = 0;536 547 return false; 537 548 } 538 549 } 539 550 } 540 541 // Get the column number 542 if (sCol != "") 543 { 544 col = GetColumn(sCol); 545 } 546 else 547 { 548 col = 0; 549 int.TryParse(sRow, out row); 550 return row>0; 551 } 552 // Get the row number 553 if (sRow == "") //Blank, fullRow 554 { 555 //if (throwException) 556 //{ 557 // throw (new Exception(string.Format("Invalid Address format {0}", address))); 558 //} 559 //else 560 //{ 561 row = 0; 562 return col > 0; 563 //} 564 } 565 else 566 { 567 return int.TryParse(sRow, out row); 568 } 551 return row != 0 || col != 0; 569 552 } 570 553 571 554 private static int GetColumn(string sCol) -
EPPlus-4.0.3/ExcelRangeBase.cs
diff --git a/EPPlus-4.0.3/ExcelRangeBase.cs b/EPPlus-4.0.3/ExcelRangeBase.cs
a b 58 58 /// <summary> 59 59 /// A range of cells 60 60 /// </summary> 61 public class ExcelRangeBase : ExcelAddress, IExcelCell, I Disposable, IEnumerable<ExcelRangeBase>, IEnumerator<ExcelRangeBase>61 public class ExcelRangeBase : ExcelAddress, IExcelCell, IEnumerable<ExcelRangeBase> 62 62 { 63 63 /// <summary> 64 64 /// Reference to the worksheet … … 2757 2757 CellsStoreEnumerator<object> cellEnum; 2758 2758 public IEnumerator<ExcelRangeBase> GetEnumerator() 2759 2759 { 2760 Reset(); 2761 return this; 2760 return new ExcelRangeBaseEnumerator(this); 2762 2761 } 2763 2762 2764 2763 IEnumerator IEnumerable.GetEnumerator() 2765 2764 { 2766 Reset(); 2767 return this; 2765 return new ExcelRangeBaseEnumerator(this); 2768 2766 } 2769 2767 2770 2768 /// <summary> 2771 2769 /// The current range when enumerating 2772 2770 /// </summary> 2773 public ExcelRangeBase Current 2774 { 2775 get 2776 { 2777 return new ExcelRangeBase(_worksheet, ExcelAddressBase.GetAddress(cellEnum.Row, cellEnum.Column)); 2778 } 2779 } 2771 public class ExcelRangeBaseEnumerator : IEnumerator<ExcelRangeBase> { 2772 private CellsStoreEnumerator<object> _cellEnum; 2773 private int _enumAddressIx = -1; 2774 private ExcelRangeBase _range; 2775 private ExcelRangeBase _current; 2780 2776 2781 /// <summary> 2782 /// The current range when enumerating 2783 /// </summary> 2784 object IEnumerator.Current 2785 { 2786 get 2787 { 2788 return ((object)(new ExcelRangeBase(_worksheet, ExcelAddressBase.GetAddress(cellEnum.Row, cellEnum.Column)))); 2789 } 2790 } 2791 2792 int _enumAddressIx = -1; 2793 public bool MoveNext() 2794 { 2795 if (cellEnum.Next()) 2796 { 2797 return true; 2798 } 2799 else if (_addresses!=null) 2800 { 2801 _enumAddressIx++; 2802 if (_enumAddressIx < _addresses.Count) 2803 { 2804 cellEnum = new CellsStoreEnumerator<object>(_worksheet._values, 2805 _addresses[_enumAddressIx]._fromRow, 2806 _addresses[_enumAddressIx]._fromCol, 2807 _addresses[_enumAddressIx]._toRow, 2808 _addresses[_enumAddressIx]._toCol); 2809 return MoveNext(); 2810 } 2811 else 2812 { 2813 return false; 2777 /// <summary> 2778 /// The current range when enumerating 2779 /// </summary> 2780 public ExcelRangeBase Current { 2781 get { 2782 return _current; 2814 2783 } 2815 2784 } 2816 return false;2817 }2818 2785 2819 public void Reset() 2820 { 2821 _enumAddressIx = -1; 2822 cellEnum = new CellsStoreEnumerator<object>(_worksheet._values, _fromRow, _fromCol, _toRow, _toCol); 2786 /// <summary> 2787 /// The current range when enumerating 2788 /// </summary> 2789 object IEnumerator.Current { 2790 get { 2791 return _current; 2792 } 2793 } 2794 2795 public ExcelRangeBaseEnumerator(ExcelRangeBase range) { 2796 this._range = range; 2797 Reset(); 2798 } 2799 public bool MoveNext() { 2800 if (_cellEnum.Next()) { 2801 _current._fromCol = _cellEnum.Column; 2802 _current._fromRow = _cellEnum.Row; 2803 _current._toCol = _cellEnum.Column; 2804 _current._toRow = _cellEnum.Row; 2805 _current.Address = GetAddress(_current._fromRow, _current._fromCol); 2806 return true; 2807 } 2808 else if (_range._addresses != null) { 2809 _enumAddressIx++; 2810 if (_enumAddressIx < _range._addresses.Count) { 2811 _cellEnum = new CellsStoreEnumerator<object>(_range._worksheet._values, 2812 _range._addresses[_enumAddressIx]._fromRow, 2813 _range._addresses[_enumAddressIx]._fromCol, 2814 _range._addresses[_enumAddressIx]._toRow, 2815 _range._addresses[_enumAddressIx]._toCol); 2816 return MoveNext(); 2817 } 2818 else { 2819 return false; 2820 } 2821 } 2822 return false; 2823 } 2824 2825 public void Reset() { 2826 _enumAddressIx = -1; 2827 _cellEnum = new CellsStoreEnumerator<object>(_range._worksheet._values, _range._fromRow, _range._fromCol, _range._toRow, _range._toCol); 2828 _current = new ExcelRangeBase(_range._worksheet, ExcelAddressBase.GetAddress(_cellEnum.Row, _cellEnum.Column)); 2829 } 2830 2831 public void Dispose() { 2832 if (_cellEnum != null) { 2833 _cellEnum.Dispose(); 2834 _cellEnum = null; 2835 } 2836 } 2837 2823 2838 } 2824 2839 2825 2840 //private void GetNextIndexEnum(int fromRow, int fromCol, int toRow, int toCol) -
EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs
diff --git a/EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs b/EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs
a b 150 150 151 151 LoadFields(); 152 152 153 using (var r=sheet.Cells[address.Address]) 154 { 155 r.Clear(); 156 } 153 sheet.Cells[address.Address].Clear(); 157 154 } 158 155 private void init() 159 156 {
Note: See TracBrowser
for help on using the repository browser.