diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index 290c1b5..6debf7c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -9,7 +9,7 @@ internal class XLColumn: XLRangeBase, IXLColumn { public XLColumn(Int32 column, XLColumnParameters xlColumnParameters) - : base(new XLRangeAddress(new XLAddress(1, column, false, false), new XLAddress(XLWorksheet.MaxNumberOfRows, column, false, false))) + : base(new XLRangeAddress(new XLAddress(xlColumnParameters.Worksheet, 1, column, false, false), new XLAddress(xlColumnParameters.Worksheet, XLWorksheet.MaxNumberOfRows, column, false, false))) { SetColumnNumber(column); Worksheet = xlColumnParameters.Worksheet; @@ -28,7 +28,7 @@ } public XLColumn(XLColumn column, XLWorksheet worksheet) - : base(new XLRangeAddress(new XLAddress(1, column.ColumnNumber(), false, false), new XLAddress(XLWorksheet.MaxNumberOfRows, column.ColumnNumber(), false, false))) + : base(new XLRangeAddress(new XLAddress(worksheet, 1, column.ColumnNumber(), false, false), new XLAddress(worksheet, XLWorksheet.MaxNumberOfRows, column.ColumnNumber(), false, false))) { width = column.width; IsReference = column.IsReference; @@ -53,8 +53,8 @@ } else { - RangeAddress.FirstAddress = new XLAddress(1, column, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); - RangeAddress.LastAddress = new XLAddress(XLWorksheet.MaxNumberOfRows, column, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); + RangeAddress.FirstAddress = new XLAddress(Worksheet, 1, column, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); + RangeAddress.LastAddress = new XLAddress(Worksheet, XLWorksheet.MaxNumberOfRows, column, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLAddress.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLAddress.cs index f824b23..1ffa72a 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLAddress.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLAddress.cs @@ -7,6 +7,7 @@ { public interface IXLAddress : IEqualityComparer, IEquatable, IComparable, IComparable { + IXLWorksheet Worksheet { get; } Int32 RowNumber { get; } Int32 ColumnNumber { get; } String ColumnLetter { get; } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs index b0b408d..3877ee5 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs @@ -143,8 +143,8 @@ public IXLRangeRow Row(Int32 row) { - IXLAddress firstCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); - IXLAddress lastCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); + IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); + IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); return new XLRangeRow( new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet, @@ -153,8 +153,8 @@ } public IXLRangeRow RowQuick(Int32 row) { - IXLAddress firstCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); - IXLAddress lastCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); + IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); + IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); return new XLRangeRow( new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet, @@ -163,8 +163,8 @@ } public IXLRangeColumn Column(Int32 column) { - IXLAddress firstCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); - IXLAddress lastCellAddress = new XLAddress(RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); + IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); + IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); return new XLRangeColumn( new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet, @@ -172,8 +172,8 @@ } public IXLRangeColumn ColumnQuick(Int32 column) { - IXLAddress firstCellAddress = new XLAddress(RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); - IXLAddress lastCellAddress = new XLAddress(RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); + IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); + IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); return new XLRangeColumn( new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet, @@ -308,7 +308,7 @@ MoveOrClearForTranspose(transposeOption, rowCount, columnCount); TransposeMerged(squareSide); TransposeRange(squareSide); - this.RangeAddress.LastAddress = new XLAddress( + this.RangeAddress.LastAddress = new XLAddress(Worksheet, firstCell.Address.RowNumber + columnCount - 1, firstCell.Address.ColumnNumber + rowCount - 1, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); @@ -364,7 +364,7 @@ for (Int32 co = 1; co <= coCount; co++) { var oldCell = rngToTranspose.Cell(ro, co); - var newKey = rngToTranspose.Cell(co, ro).Address; // new XLAddress(c.Address.ColumnNumber, c.Address.RowNumber); + var newKey = rngToTranspose.Cell(co, ro).Address; // new XLAddress(Worksheet, c.Address.ColumnNumber, c.Address.RowNumber); var newCell = new XLCell(newKey, oldCell.Style, Worksheet); newCell.CopyFrom(oldCell); cellsToInsert.Add(newKey, newCell); @@ -373,7 +373,7 @@ } //foreach (var c in rngToTranspose.Cells()) //{ - // var newKey = new XLAddress(c.Address.ColumnNumber, c.Address.RowNumber); + // var newKey = new XLAddress(Worksheet, c.Address.ColumnNumber, c.Address.RowNumber); // var newCell = new XLCell(newKey, c.Style, Worksheet); // newCell.Value = c.Value; // newCell.DataType = c.DataType; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 11804f6..05b67db 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -67,16 +67,16 @@ public IXLCell Cell(Int32 row, Int32 column) { - return this.Cell(new XLAddress(row, column, false, false)); + return this.Cell(new XLAddress(Worksheet, row, column, false, false)); } public IXLCell Cell(String cellAddressInRange) { - return this.Cell(new XLAddress(cellAddressInRange)); + return this.Cell(new XLAddress(Worksheet, cellAddressInRange)); } public IXLCell Cell(Int32 row, String column) { - return this.Cell(new XLAddress(row, column, false, false)); + return this.Cell(new XLAddress(Worksheet, row, column, false, false)); } public IXLCell Cell(IXLAddress cellAddressInRange) { @@ -145,7 +145,7 @@ } public IXLRange Range(Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn) { - var rangeAddress = new XLRangeAddress(new XLAddress(firstCellRow, firstCellColumn, false, false), new XLAddress(lastCellRow, lastCellColumn, false, false)); + var rangeAddress = new XLRangeAddress(new XLAddress(Worksheet, firstCellRow, firstCellColumn, false, false), new XLAddress(Worksheet, lastCellRow, lastCellColumn, false, false)); return Range(rangeAddress); } public IXLRange Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) @@ -275,8 +275,8 @@ if (expandRange) { this.RangeAddress = new XLRangeAddress( - new XLAddress(RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber + numberOfColumns, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber + numberOfColumns, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); } return retVal; } @@ -306,8 +306,8 @@ if (expandRange) { this.RangeAddress = new XLRangeAddress( - new XLAddress(RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); } return retVal; } @@ -337,9 +337,9 @@ { for (var ro = lastRow; ro >= firstRow; ro--) { - var oldKey = new XLAddress(ro, co, false, false); + var oldKey = new XLAddress(Worksheet, ro, co, false, false); var newColumn = co + numberOfColumns; - var newKey = new XLAddress(ro, newColumn, false, false); + var newKey = new XLAddress(Worksheet, ro, newColumn, false, false); IXLCell oldCell; if (this.Worksheet.Internals.CellsCollection.ContainsKey(oldKey)) { @@ -368,7 +368,7 @@ )) { var newColumn = c.Key.ColumnNumber + numberOfColumns; - var newKey = new XLAddress(c.Key.RowNumber, newColumn, false, false); + var newKey = new XLAddress(Worksheet, c.Key.RowNumber, newColumn, false, false); var newCell = new XLCell(newKey, c.Value.Style, Worksheet); newCell.CopyValues(c.Value); cellsToInsert.Add(newKey, newCell); @@ -409,8 +409,8 @@ if (expandRange) { this.RangeAddress = new XLRangeAddress( - new XLAddress(RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(RangeAddress.LastAddress.RowNumber + numberOfRows, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber + numberOfRows, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); } return retVal; } @@ -440,8 +440,8 @@ if (expandRange) { this.RangeAddress = new XLRangeAddress( - new XLAddress(RangeAddress.FirstAddress.RowNumber - numberOfRows,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber - numberOfRows,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); } return retVal; } @@ -471,9 +471,9 @@ { for (var co = lastColumn; co >= firstColumn; co--) { - var oldKey = new XLAddress(ro, co, false, false); + var oldKey = new XLAddress(Worksheet, ro, co, false, false); var newRow = ro + numberOfRows; - var newKey = new XLAddress(newRow, co, false, false); + var newKey = new XLAddress(Worksheet, newRow, co, false, false); IXLCell oldCell; if (this.Worksheet.Internals.CellsCollection.ContainsKey(oldKey)) { @@ -502,7 +502,7 @@ )) { var newRow = c.Key.RowNumber + numberOfRows; - var newKey = new XLAddress(newRow, c.Key.ColumnNumber, false, false); + var newKey = new XLAddress(Worksheet, newRow, c.Key.ColumnNumber, false, false); var newCell = new XLCell(newKey, c.Value.Style, Worksheet); newCell.CopyFrom(c.Value); cellsToInsert.Add(newKey, newCell); @@ -588,13 +588,13 @@ if (addressToUse.Contains(':')) { String[] arrRange = addressToUse.Split(':'); - firstAddress = new XLAddress(arrRange[0]); - lastAddress = new XLAddress(arrRange[1]); + firstAddress = new XLAddress(Worksheet, arrRange[0]); + lastAddress = new XLAddress(Worksheet, arrRange[1]); } else { - firstAddress = new XLAddress(addressToUse); - lastAddress = new XLAddress(addressToUse); + firstAddress = new XLAddress(Worksheet, addressToUse); + lastAddress = new XLAddress(Worksheet, addressToUse); } return firstAddress >= (XLAddress)this.RangeAddress.FirstAddress @@ -678,7 +678,7 @@ var cellsQuery = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? shiftLeftQuery : shiftUpQuery; foreach (var c in cellsQuery) { - var newKey = new XLAddress(c.Key.RowNumber - rowModifier, c.Key.ColumnNumber - columnModifier, false, false); + var newKey = new XLAddress(Worksheet, c.Key.RowNumber - rowModifier, c.Key.ColumnNumber - columnModifier, false, false); var newCell = new XLCell(newKey, c.Value.Style, Worksheet); newCell.CopyValues(c.Value); //newCell.ShiftFormula(rowModifier * -1, columnModifier * -1); @@ -855,13 +855,13 @@ (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber && columnsShifted > 0) || (shiftedRange.RangeAddress.FirstAddress.ColumnNumber < thisRangeAddress.FirstAddress.ColumnNumber && columnsShifted < 0) ) - thisRangeAddress.FirstAddress = new XLAddress( + thisRangeAddress.FirstAddress = new XLAddress(Worksheet, thisRangeAddress.FirstAddress.RowNumber, thisRangeAddress.FirstAddress.ColumnNumber + columnsShifted, thisRangeAddress.FirstAddress.FixedRow, thisRangeAddress.FirstAddress.FixedColumn); if (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.LastAddress.ColumnNumber) - thisRangeAddress.LastAddress = new XLAddress( + thisRangeAddress.LastAddress = new XLAddress(Worksheet, thisRangeAddress.LastAddress.RowNumber, thisRangeAddress.LastAddress.ColumnNumber + columnsShifted, thisRangeAddress.LastAddress.FixedRow, thisRangeAddress.LastAddress.FixedColumn); @@ -900,13 +900,13 @@ (shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber && rowsShifted > 0) || (shiftedRange.RangeAddress.FirstAddress.RowNumber < thisRangeAddress.FirstAddress.RowNumber && rowsShifted < 0) ) - thisRangeAddress.FirstAddress = new XLAddress( + thisRangeAddress.FirstAddress = new XLAddress(Worksheet, thisRangeAddress.FirstAddress.RowNumber + rowsShifted, thisRangeAddress.FirstAddress.ColumnNumber, thisRangeAddress.FirstAddress.FixedRow, thisRangeAddress.FirstAddress.FixedColumn); if (shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.LastAddress.RowNumber) - thisRangeAddress.LastAddress = new XLAddress( + thisRangeAddress.LastAddress = new XLAddress(Worksheet, thisRangeAddress.LastAddress.RowNumber + rowsShifted, thisRangeAddress.LastAddress.ColumnNumber, thisRangeAddress.LastAddress.FixedRow, thisRangeAddress.LastAddress.FixedColumn); @@ -1048,7 +1048,22 @@ } public IXLCells FindCells(String search, XLSearchContents searchContents, Boolean useRegularExpressions) { - throw new NotImplementedException(); + var cells = new XLCells(Worksheet, false, false, false); + foreach (var cell in CellsUsed()) + { + Boolean isMatch = false; + if (useRegularExpressions) + { + + } + else + { + //if (searchContents == XLSearchContents.Formulas + } + if (isMatch) + cells.Add(new XLRangeAddress(cell.Address.ToString())); + } + return cells; } public IXLCells FindCells(String search, XLSearchContents searchContents, Boolean matchCase, Boolean entireCell) { diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index e7aa62d..5ba348d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -9,7 +9,7 @@ internal class XLRow: XLRangeBase, IXLRow { public XLRow(Int32 row, XLRowParameters xlRowParameters) - : base(new XLRangeAddress(new XLAddress(row, 1, false, false), new XLAddress(row, XLWorksheet.MaxNumberOfColumns, false, false))) + : base(new XLRangeAddress(new XLAddress(xlRowParameters.Worksheet, row, 1, false, false), new XLAddress(xlRowParameters.Worksheet, row, XLWorksheet.MaxNumberOfColumns, false, false))) { SetRowNumber(row); Worksheet = xlRowParameters.Worksheet; @@ -27,7 +27,7 @@ } public XLRow(XLRow row, XLWorksheet worksheet) - : base(new XLRangeAddress(new XLAddress(row.RowNumber(), 1, false, false), new XLAddress(row.RowNumber(), XLWorksheet.MaxNumberOfColumns, false, false))) + : base(new XLRangeAddress(new XLAddress(worksheet, row.RowNumber(), 1, false, false), new XLAddress(worksheet, row.RowNumber(), XLWorksheet.MaxNumberOfColumns, false, false))) { height = row.height; IsReference = row.IsReference; @@ -58,8 +58,8 @@ } else { - RangeAddress.FirstAddress = new XLAddress(row, 1, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); - RangeAddress.LastAddress = new XLAddress(row, XLWorksheet.MaxNumberOfColumns, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); + RangeAddress.FirstAddress = new XLAddress(Worksheet, row, 1, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); + RangeAddress.LastAddress = new XLAddress(Worksheet, row, XLWorksheet.MaxNumberOfColumns, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs index 1672bea..0d5975f 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs @@ -15,8 +15,9 @@ /// /// The row number of the cell address. /// The column number of the cell address. - public XLAddress(Int32 rowNumber, Int32 columnNumber, Boolean fixedRow, Boolean fixedColumn) + public XLAddress(IXLWorksheet worksheet, Int32 rowNumber, Int32 columnNumber, Boolean fixedRow, Boolean fixedColumn) { + this.Worksheet = worksheet; this.rowNumber = rowNumber; this.columnNumber = columnNumber; this.columnLetter = null; @@ -29,8 +30,9 @@ /// /// The row number of the cell address. /// The column letter of the cell address. - public XLAddress(Int32 rowNumber, String columnLetter, Boolean fixedRow, Boolean fixedColumn) + public XLAddress(IXLWorksheet worksheet, Int32 rowNumber, String columnLetter, Boolean fixedRow, Boolean fixedColumn) { + this.Worksheet = worksheet; this.rowNumber = rowNumber; this.columnNumber = 0; this.columnLetter = columnLetter; @@ -43,8 +45,10 @@ /// Initializes a new struct using A1 notation. /// /// The cell address. - public XLAddress(String cellAddressString) + public XLAddress(IXLWorksheet worksheet, String cellAddressString) { + this.Worksheet = worksheet; + fixedColumn = cellAddressString[0] == '$'; Int32 startPos; if (fixedColumn) @@ -79,7 +83,6 @@ columnNumber = 0; } - #endregion #region Static @@ -256,6 +259,8 @@ #region Properties + public IXLWorksheet Worksheet { get; private set; } + private Boolean fixedRow; public Boolean FixedRow { @@ -356,25 +361,25 @@ public static XLAddress operator +(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) { - return new XLAddress(xlCellAddressLeft.RowNumber + xlCellAddressRight.RowNumber, xlCellAddressLeft.ColumnNumber + xlCellAddressRight.ColumnNumber, + return new XLAddress(Worksheet, xlCellAddressLeft.RowNumber + xlCellAddressRight.RowNumber, xlCellAddressLeft.ColumnNumber + xlCellAddressRight.ColumnNumber, xlCellAddressLeft.fixedRow, xlCellAddressLeft.fixedColumn); } public static XLAddress operator -(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) { - return new XLAddress(xlCellAddressLeft.RowNumber - xlCellAddressRight.RowNumber, xlCellAddressLeft.ColumnNumber - xlCellAddressRight.ColumnNumber, + return new XLAddress(Worksheet, xlCellAddressLeft.RowNumber - xlCellAddressRight.RowNumber, xlCellAddressLeft.ColumnNumber - xlCellAddressRight.ColumnNumber, xlCellAddressLeft.fixedRow, xlCellAddressLeft.fixedColumn); } public static XLAddress operator +(XLAddress xlCellAddressLeft, Int32 right) { - return new XLAddress(xlCellAddressLeft.RowNumber + right, xlCellAddressLeft.ColumnNumber + right, + return new XLAddress(Worksheet, xlCellAddressLeft.RowNumber + right, xlCellAddressLeft.ColumnNumber + right, xlCellAddressLeft.fixedRow, xlCellAddressLeft.fixedColumn); } public static XLAddress operator -(XLAddress xlCellAddressLeft, Int32 right) { - return new XLAddress(xlCellAddressLeft.RowNumber - right, xlCellAddressLeft.ColumnNumber - right, + return new XLAddress(Worksheet, xlCellAddressLeft.RowNumber - right, xlCellAddressLeft.ColumnNumber - right, xlCellAddressLeft.fixedRow, xlCellAddressLeft.fixedColumn); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index e214c44..e09e01c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -24,8 +24,9 @@ private XLWorkbook workbook; public XLWorksheet(String sheetName, XLWorkbook workbook) - : base((IXLRangeAddress)new XLRangeAddress(new XLAddress(1, 1, false, false), new XLAddress(MaxNumberOfRows, MaxNumberOfColumns, false, false))) + : base((IXLRangeAddress)new XLRangeAddress(new XLAddress(null, 1, 1, false, false), new XLAddress(null, MaxNumberOfRows, MaxNumberOfColumns, false, false))) { + RangeAddress.FirstAddress.Worksheet Worksheet = this; NamedRanges = new XLNamedRanges(workbook); SheetView = new XLSheetView();