diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj index f4d09a0..37f36e4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj +++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj @@ -52,13 +52,19 @@ - - - + + + + + + + + + @@ -67,16 +73,16 @@ - - - - - + + + + + - - + + @@ -87,9 +93,9 @@ - - - + + + diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs new file mode 100644 index 0000000..e6f918b --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLColumn: IXLRange + { + Double Width { get; set; } + void Delete(); + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs new file mode 100644 index 0000000..70a15b7 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLColumn: IXLColumn + { + public XLColumn(Int32 column, XLColumnParameters xlColumnParameters) + { + Internals = new XLRangeInternals(new XLAddress(1, column), new XLAddress(XLWorksheet.MaxNumberOfRows, column), xlColumnParameters.Worksheet); + RowNumber = 1; + ColumnNumber = column; + ColumnLetter = XLAddress.GetColumnLetterFromNumber(column); + this.style = new XLStyle(this, xlColumnParameters.DefaultStyle); + this.Width = XLWorkbook.DefaultColumnWidth; + } + + public Double Width { get; set; } + public Int32 RowNumber { get; private set; } + public Int32 ColumnNumber { get; private set; } + public String ColumnLetter { get; private set; } + public void Delete() + { + this.Column(ColumnNumber).Delete(XLShiftDeletedCells.ShiftCellsLeft); + } + + #region IXLStylized Members + + private IXLStyle style; + public IXLStyle Style + { + get + { + return style; + } + set + { + style = new XLStyle(this, value); + } + } + + public IEnumerable Styles + { + get + { + UpdatingStyle = true; + yield return style; + foreach (var c in Internals.Worksheet.Internals.CellsCollection.Values.Where(c => c.Address.Column == Internals.FirstCellAddress.Column)) + { + yield return c.Style; + } + UpdatingStyle = false; + } + } + + public Boolean UpdatingStyle { get; set; } + + #endregion + + #region IXLRange Members + + public IXLRange Row(int row) + { + var address = new XLAddress(row, 1); + return this.Range(address, address); + } + + public IXLRange Column(int column) + { + return this; + } + + public IXLRange Column(string column) + { + return this; + } + + #endregion + + public IXLRangeInternals Internals { get; private set; } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnParameters.cs new file mode 100644 index 0000000..967ad1a --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumnParameters.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLColumnParameters + { + public XLColumnParameters(IXLWorksheet worksheet, IXLStyle defaultStyle) + { + Worksheet = worksheet; + DefaultStyle = defaultStyle; + } + public IXLStyle DefaultStyle { get; set; } + public IXLWorksheet Worksheet { get; private set; } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs index e245a95..d3ef270 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs @@ -74,7 +74,6 @@ columns.ForEach(c => c.Delete(XLShiftDeletedCells.ShiftCellsLeft)); } - public void Add(IXLColumn column) { columns.Add(column); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLColumn.cs deleted file mode 100644 index e6f918b..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLColumn.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public interface IXLColumn: IXLRange - { - Double Width { get; set; } - void Delete(); - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRange.cs deleted file mode 100644 index 0e172a5..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRange.cs +++ /dev/null @@ -1,367 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public interface IXLRange: IXLStylized - { - IXLRange Row(Int32 row); - IXLRange Column(Int32 column); - IXLRange Column(String column); - Int32 RowNumber { get; } - Int32 ColumnNumber { get; } - String ColumnLetter { get; } - IXLRangeInternals Internals { get; } - //void Delete(XLShiftDeletedCells shiftDeleteCells); - } - - public enum XLShiftDeletedCells { ShiftCellsUp, ShiftCellsLeft } - - public static class IXLRangeMethods - { - public static IXLCell FirstCell(this IXLRange range) - { - return range.Cell(1, 1); - } - public static IXLCell LastCell(this IXLRange range) - { - return range.Cell(range.RowCount(), range.ColumnCount()); - } - - public static IXLCell Cell(this IXLRange range, IXLAddress cellAddressInRange) - { - IXLAddress absoluteAddress = (XLAddress)cellAddressInRange + (XLAddress)range.Internals.FirstCellAddress - 1; - if (range.Internals.Worksheet.Internals.CellsCollection.ContainsKey(absoluteAddress)) - { - return range.Internals.Worksheet.Internals.CellsCollection[absoluteAddress]; - } - else - { - var newCell = new XLCell(absoluteAddress, range.Style); - range.Internals.Worksheet.Internals.CellsCollection.Add(absoluteAddress, newCell); - return newCell; - } - } - public static IXLCell Cell(this IXLRange range, Int32 row, Int32 column) - { - return range.Cell(new XLAddress(row, column)); - } - public static IXLCell Cell(this IXLRange range, Int32 row, String column) - { - return range.Cell(new XLAddress(row, column)); - } - public static IXLCell Cell(this IXLRange range, String cellAddressInRange) - { - return range.Cell(new XLAddress(cellAddressInRange)); - } - - public static Int32 RowCount(this IXLRange range) - { - return range.Internals.LastCellAddress.Row - range.Internals.FirstCellAddress.Row + 1; - } - public static Int32 ColumnCount(this IXLRange range) - { - return range.Internals.LastCellAddress.Column - range.Internals.FirstCellAddress.Column + 1; - } - - public static IXLRange Range(this IXLRange range, Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn) - { - return range.Range(new XLAddress(firstCellRow, firstCellColumn), new XLAddress(lastCellRow, lastCellColumn)); - } - public static IXLRange Range(this IXLRange range, String rangeAddress) - { - if (rangeAddress.Contains(':')) - { - String[] arrRange = rangeAddress.Split(':'); - return range.Range(arrRange[0], arrRange[1]); - } - else - { - return range.Range(rangeAddress, rangeAddress); - } - } - public static IXLRange Range(this IXLRange range, String firstCellAddress, String lastCellAddress) - { - return range.Range(new XLAddress(firstCellAddress), new XLAddress(lastCellAddress)); - } - public static IXLRange Range(this IXLRange range, IXLAddress firstCellAddress, IXLAddress lastCellAddress) - { - var newFirstCellAddress = (XLAddress)firstCellAddress + (XLAddress)range.Internals.FirstCellAddress - 1; - var newLastCellAddress = (XLAddress)lastCellAddress + (XLAddress)range.Internals.FirstCellAddress - 1; - var xlRangeParameters = new XLRangeParameters(newFirstCellAddress, newLastCellAddress, range.Internals.Worksheet, range.Style); - if ( - newFirstCellAddress.Row < range.Internals.FirstCellAddress.Row - || newFirstCellAddress.Row > range.Internals.LastCellAddress.Row - || newLastCellAddress.Row > range.Internals.LastCellAddress.Row - || newFirstCellAddress.Column < range.Internals.FirstCellAddress.Column - || newFirstCellAddress.Column > range.Internals.LastCellAddress.Column - || newLastCellAddress.Column > range.Internals.LastCellAddress.Column - ) - throw new ArgumentOutOfRangeException(); - - return new XLRange(xlRangeParameters); - } - public static IXLRange Range(this IXLRange range, IXLCell firstCell, IXLCell lastCell) - { - return range.Range(firstCell.Address, lastCell.Address); - } - - public static IEnumerable Cells(this IXLRange range) - { - foreach(var row in Enumerable.Range(1, range.RowCount())) - { - foreach(var column in Enumerable.Range(1, range.ColumnCount())) - { - yield return range.Cell(row, column); - } - } - } - - public static void Merge(this IXLRange range) - { - var mergeRange = range.Internals.FirstCellAddress.ToString() + ":" + range.Internals.LastCellAddress.ToString(); - if (!range.Internals.Worksheet.Internals.MergedCells.Contains(mergeRange)) - range.Internals.Worksheet.Internals.MergedCells.Add(mergeRange); - } - public static void Unmerge(this IXLRange range) - { - range.Internals.Worksheet.Internals.MergedCells.Remove(range.Internals.FirstCellAddress.ToString() + ":" + range.Internals.LastCellAddress.ToString()); - } - - public static IXLRange FirstColumn(this IXLRange range) - { - return range.Column(1); - } - public static IXLRange LastColumn(this IXLRange range) - { - return range.Column(range.ColumnCount()); - } - public static IXLRange FirstRow(this IXLRange range) - { - return range.Row(1); - } - public static IXLRange LastRow(this IXLRange range) - { - return range.Row(range.RowCount()); - } - - public static void InsertRowsBelow(this IXLRange range, Int32 numberOfRows) - { - var cellsToInsert = new Dictionary(); - var cellsToDelete = new List(); - var lastRow = range.LastRow().RowNumber; - var firstColumn = range.FirstColumn().ColumnNumber; - var lastColumn = range.LastColumn().ColumnNumber; - foreach (var c in range.Internals.Worksheet.Internals.CellsCollection - .Where(c => - c.Key.Row > lastRow - && c.Key.Column >= firstColumn - && c.Key.Column <= lastColumn - )) - { - var newRow = c.Key.Row + numberOfRows; - var newKey = new XLAddress(newRow, c.Key.Column); - var newCell = new XLCell(newKey, c.Value.Style); - newCell.Value = c.Value.Value; - cellsToInsert.Add(newKey, newCell); - cellsToDelete.Add(c.Key); - } - cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); - } - public static void InsertRowsAbove(this IXLRange range, Int32 numberOfRows) - { - var cellsToInsert = new Dictionary(); - var cellsToDelete = new List(); - var firstRow = range.FirstRow().RowNumber; - var firstColumn = range.FirstColumn().ColumnNumber; - var lastColumn = range.LastColumn().ColumnNumber; - foreach (var c in range.Internals.Worksheet.Internals.CellsCollection - .Where(c => - c.Key.Row >= firstRow - && c.Key.Column >= firstColumn - && c.Key.Column <= lastColumn - )) - { - var newRow = c.Key.Row + numberOfRows; - var newKey = new XLAddress(newRow, c.Key.Column); - var newCell = new XLCell(newKey, c.Value.Style); - newCell.Value = c.Value.Value; - cellsToInsert.Add(newKey, newCell); - cellsToDelete.Add(c.Key); - } - cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); - } - - public static void InsertColumnsAfter(this IXLRange range, Int32 numberOfColumns) - { - var cellsToInsert = new Dictionary(); - var cellsToDelete = new List(); - var firstRow = range.FirstRow().RowNumber; - var lastRow = range.LastRow().RowNumber; - var lastColumn = range.LastColumn().ColumnNumber; - foreach (var c in range.Internals.Worksheet.Internals.CellsCollection - .Where(c => - c.Key.Column > lastColumn - && c.Key.Row >= firstRow - && c.Key.Row <= lastRow - )) - { - var newColumn = c.Key.Column + numberOfColumns; - var newKey = new XLAddress(c.Key.Row, newColumn); - var newCell = new XLCell(newKey, c.Value.Style); - newCell.Value = c.Value.Value; - cellsToInsert.Add(newKey, newCell); - cellsToDelete.Add(c.Key); - } - cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); - } - public static void InsertColumnsBefore(this IXLRange range, Int32 numberOfColumns) - { - var cellsToInsert = new Dictionary(); - var cellsToDelete = new List(); - var firstRow = range.FirstRow().RowNumber; - var lastRow = range.LastRow().RowNumber; - var firstColumn = range.FirstColumn().ColumnNumber; - foreach (var c in range.Internals.Worksheet.Internals.CellsCollection - .Where(c => - c.Key.Column >= firstColumn - && c.Key.Row >= firstRow - && c.Key.Row <= lastRow - )) - { - var newColumn = c.Key.Column + numberOfColumns; - var newKey = new XLAddress(c.Key.Row, newColumn); - var newCell = new XLCell(newKey, c.Value.Style); - newCell.Value = c.Value.Value; - cellsToInsert.Add(newKey, newCell); - cellsToDelete.Add(c.Key); - } - cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); - } - - public static List Columns(this IXLRange range) - { - var retVal = new List(); - foreach (var c in Enumerable.Range(1, range.ColumnCount())) - { - retVal.Add(range.Column(c)); - } - return retVal; - } - public static List Columns(this IXLRange range, String columns) - { - var retVal = new List(); - var columnPairs = columns.Split(','); - foreach (var pair in columnPairs) - { - var columnRange = pair.Split(':'); - var firstColumn = columnRange[0]; - var lastColumn = columnRange[1]; - Int32 tmp; - if (Int32.TryParse(firstColumn, out tmp)) - retVal.AddRange(range.Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))); - else - retVal.AddRange(range.Columns(firstColumn, lastColumn)); - } - return retVal; - } - public static List Columns(this IXLRange range, String firstColumn, String lastColumn) - { - return range.Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); - } - public static List Columns(this IXLRange range, Int32 firstColumn, Int32 lastColumn) - { - var retVal = new List(); - - for (var co = firstColumn; co <= lastColumn; co++) - { - retVal.Add(range.Column(co)); - } - return retVal; - } - public static List Rows(this IXLRange range) - { - var retVal = new List(); - foreach (var r in Enumerable.Range(1, range.RowCount())) - { - retVal.Add(range.Row(r)); - } - return retVal; - } - public static List Rows(this IXLRange range, String rows) - { - var retVal = new List(); - var rowPairs = rows.Split(','); - foreach (var pair in rowPairs) - { - var rowRange = pair.Split(':'); - var firstRow = rowRange[0]; - var lastRow = rowRange[1]; - retVal.AddRange(range.Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))); - } - return retVal; - } - public static List Rows(this IXLRange range, Int32 firstRow, Int32 lastRow) - { - var retVal = new List(); - - for(var ro = firstRow; ro <= lastRow; ro++) - { - retVal.Add(range.Row(ro)); - } - return retVal; - } - - public static void Clear(this IXLRange range) - { - // Remove cells inside range - range.Internals.Worksheet.Internals.CellsCollection.RemoveAll(c => - c.Address.Column >= range.ColumnNumber - && c.Address.Column <= range.LastColumn().ColumnNumber - && c.Address.Row >= range.RowNumber - && c.Address.Row <= range.LastRow().RowNumber - ); - } - public static void Delete(this IXLRange range, XLShiftDeletedCells shiftDeleteCells) - { - range.Clear(); - - // Range to shift... - var cellsToInsert = new Dictionary(); - var cellsToDelete = new List(); - var shiftLeft = range.Internals.Worksheet.Internals.CellsCollection - .Where(c => c.Key.Column > range.LastColumn().ColumnNumber - && c.Key.Row >= range.RowNumber - && c.Key.Row <= range.LastRow().RowNumber); - - var shiftUp = range.Internals.Worksheet.Internals.CellsCollection - .Where(c => - c.Key.Column >= range.ColumnNumber - && c.Key.Column <= range.LastColumn().ColumnNumber - && c.Key.Row > range.RowNumber); - - foreach (var c in shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? shiftLeft : shiftUp) - { - var columnModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? range.ColumnCount() : 0; - var rowModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp ? range.RowCount() : 0; - var newKey = new XLAddress(c.Key.Row - rowModifier, c.Key.Column - columnModifier); - var newCell = new XLCell(newKey, c.Value.Style); - newCell.Value = c.Value.Value; - cellsToInsert.Add(newKey, newCell); - cellsToDelete.Add(c.Key); - } - cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); - - - } - } -} - diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRangeInternals.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRangeInternals.cs deleted file mode 100644 index e73d246..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRangeInternals.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public interface IXLRangeInternals - { - IXLAddress FirstCellAddress { get; } - IXLAddress LastCellAddress { get; } - IXLWorksheet Worksheet { get; } - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRow.cs deleted file mode 100644 index a62a0fd..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLRow.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public interface IXLRow: IXLRange - { - Double Height { get; set; } - void Delete(); - - } - - public static class IXLRowMethods - { - - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs index b9602d6..5aaa486 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs @@ -15,9 +15,9 @@ IXLColumns Columns(String columns); IXLColumns Columns(String firstColumn, String lastColumn); IXLColumns Columns(Int32 firstColumn, Int32 lastColumn); - List Rows(); - List Rows(String rows); - List Rows(Int32 firstRow, Int32 lastRow); + IXLRows Rows(); + IXLRows Rows(String rows); + IXLRows Rows(Int32 firstRow, Int32 lastRow); IXLPageSetup PageSetup { get; } new IXLWorksheetInternals Internals { get; } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageOptions.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageOptions.cs deleted file mode 100644 index a1776d2..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageOptions.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public enum XLPageOrientation { Default, Portrait, Landscape } - public enum XLPaperSize - { - LetterPaper = 1, - LetterSmallPaper = 2, - TabloidPaper = 3, - LedgerPaper = 4, - LegalPaper = 5, - StatementPaper = 6, - ExecutivePaper = 7, - A3Paper = 8, - A4Paper = 9, - A4SmallPaper = 10, - A5Paper = 11, - B4Paper = 12, - B5Paper = 13, - FolioPaper = 14, - QuartoPaper = 15, - StandardPaper = 16, - StandardPaper1 = 17, - NotePaper = 18, - No9Envelope = 19, - No10Envelope = 20, - No11Envelope = 21, - No12Envelope = 22, - No14Envelope = 23, - CPaper = 24, - DPaper = 25, - EPaper = 26, - DlEnvelope = 27, - C5Envelope = 28, - C3Envelope = 29, - C4Envelope = 30, - C6Envelope = 31, - C65Envelope = 32, - B4Envelope = 33, - B5Envelope = 34, - B6Envelope = 35, - ItalyEnvelope = 36, - MonarchEnvelope = 37, - No634Envelope = 38, - UsStandardFanfold = 39, - GermanStandardFanfold = 40, - GermanLegalFanfold = 41, - IsoB4 = 42, - JapaneseDoublePostcard = 43, - StandardPaper2 = 44, - StandardPaper3 = 45, - StandardPaper4 = 46, - InviteEnvelope = 47, - LetterExtraPaper = 50, - LegalExtraPaper = 51, - TabloidExtraPaper = 52, - A4ExtraPaper = 53, - LetterTransversePaper = 54, - A4TransversePaper = 55, - LetterExtraTransversePaper = 56, - SuperaSuperaA4Paper = 57, - SuperbSuperbA3Paper = 58, - LetterPlusPaper = 59, - A4PlusPaper = 60, - A5TransversePaper = 61, - JisB5TransversePaper = 62, - A3ExtraPaper = 63, - A5ExtraPaper = 64, - IsoB5ExtraPaper = 65, - A2Paper = 66, - A3TransversePaper = 67, - A3ExtraTransversePaper = 68 - } - public enum XLPageOrderValues { DownThenOver, OverThenDown } - public enum XLShowCommentsValues { None, AtEnd, AsDisplayed } - public enum XLPrintErrorValues { Blank, Dash, Displayed, NA } - public interface IXLPageSetup - { - List PrintAreas { get; set; } - List RowTitles { get; set; } - void SetRowTitles(List rowTitles); - List ColumnTitles { get; set; } - void SetColumnTitles(List columnTitles); - XLPageOrientation PageOrientation { get; set; } - Int32 PagesWide { get; set; } - Int32 PagesTall { get; set; } - Int32 Scale { get; set; } - Int32 HorizontalDpi { get; set; } - Int32 VerticalDpi { get; set; } - Int32 FirstPageNumber { get; set; } - Boolean CenterHorizontally { get; set; } - Boolean CenterVertically { get; set; } - void AdjustTo(Int32 pctOfNormalSize); - void FitToPages(Int32 pagesWide, Int32 pagesTall); - XLPaperSize PaperSize { get; set; } - XLMargins Margins { get; } - - IXLHeaderFooter Header { get; } - IXLHeaderFooter Footer { get; } - Boolean ScaleHFWithDocument { get; set; } - Boolean AlignHFWithMargins { get; set; } - - Boolean ShowGridlines { get; set; } - Boolean ShowRowAndColumnHeadings { get; set; } - Boolean BlackAndWhite { get; set; } - Boolean DraftQuality { get; set; } - XLPageOrderValues PageOrder { get; set; } - XLShowCommentsValues ShowComments { get; set; } - - List RowBreaks { get; } - List ColumnBreaks { get; } - void AddPageBreak(IXLRow row); - void AddPageBreak(IXLColumn column); - - XLPrintErrorValues PrintErrorValue { get; set; } - - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageSetup.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageSetup.cs new file mode 100644 index 0000000..0a518c5 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPageSetup.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public enum XLPageOrientation { Default, Portrait, Landscape } + public enum XLPaperSize + { + LetterPaper = 1, + LetterSmallPaper = 2, + TabloidPaper = 3, + LedgerPaper = 4, + LegalPaper = 5, + StatementPaper = 6, + ExecutivePaper = 7, + A3Paper = 8, + A4Paper = 9, + A4SmallPaper = 10, + A5Paper = 11, + B4Paper = 12, + B5Paper = 13, + FolioPaper = 14, + QuartoPaper = 15, + StandardPaper = 16, + StandardPaper1 = 17, + NotePaper = 18, + No9Envelope = 19, + No10Envelope = 20, + No11Envelope = 21, + No12Envelope = 22, + No14Envelope = 23, + CPaper = 24, + DPaper = 25, + EPaper = 26, + DlEnvelope = 27, + C5Envelope = 28, + C3Envelope = 29, + C4Envelope = 30, + C6Envelope = 31, + C65Envelope = 32, + B4Envelope = 33, + B5Envelope = 34, + B6Envelope = 35, + ItalyEnvelope = 36, + MonarchEnvelope = 37, + No634Envelope = 38, + UsStandardFanfold = 39, + GermanStandardFanfold = 40, + GermanLegalFanfold = 41, + IsoB4 = 42, + JapaneseDoublePostcard = 43, + StandardPaper2 = 44, + StandardPaper3 = 45, + StandardPaper4 = 46, + InviteEnvelope = 47, + LetterExtraPaper = 50, + LegalExtraPaper = 51, + TabloidExtraPaper = 52, + A4ExtraPaper = 53, + LetterTransversePaper = 54, + A4TransversePaper = 55, + LetterExtraTransversePaper = 56, + SuperaSuperaA4Paper = 57, + SuperbSuperbA3Paper = 58, + LetterPlusPaper = 59, + A4PlusPaper = 60, + A5TransversePaper = 61, + JisB5TransversePaper = 62, + A3ExtraPaper = 63, + A5ExtraPaper = 64, + IsoB5ExtraPaper = 65, + A2Paper = 66, + A3TransversePaper = 67, + A3ExtraTransversePaper = 68 + } + public enum XLPageOrderValues { DownThenOver, OverThenDown } + public enum XLShowCommentsValues { None, AtEnd, AsDisplayed } + public enum XLPrintErrorValues { Blank, Dash, Displayed, NA } + + public interface IXLPageSetup + { + IXLPrintAreas PrintAreas { get; } + Int32 FirstRowToRepeatAtTop { get; } + Int32 LastRowToRepeatAtTop { get; } + void SetRowsToRepeatAtTop(Int32 firstRowToRepeatAtTop, Int32 lastRowToRepeatAtTop); + Int32 FirstColumnToRepeatAtLeft { get; } + Int32 LastColumnToRepeatAtLeft { get; } + void SetColumnsToRepeatAtLeft(Int32 firstColumnToRepeatAtLeft, Int32 lastColumnToRepeatAtLeft); + XLPageOrientation PageOrientation { get; set; } + Int32 PagesWide { get; set; } + Int32 PagesTall { get; set; } + Int32 Scale { get; set; } + Int32 HorizontalDpi { get; set; } + Int32 VerticalDpi { get; set; } + Int32 FirstPageNumber { get; set; } + Boolean CenterHorizontally { get; set; } + Boolean CenterVertically { get; set; } + void AdjustTo(Int32 pctOfNormalSize); + void FitToPages(Int32 pagesWide, Int32 pagesTall); + XLPaperSize PaperSize { get; set; } + XLMargins Margins { get; } + + IXLHeaderFooter Header { get; } + IXLHeaderFooter Footer { get; } + Boolean ScaleHFWithDocument { get; set; } + Boolean AlignHFWithMargins { get; set; } + + Boolean ShowGridlines { get; set; } + Boolean ShowRowAndColumnHeadings { get; set; } + Boolean BlackAndWhite { get; set; } + Boolean DraftQuality { get; set; } + XLPageOrderValues PageOrder { get; set; } + XLShowCommentsValues ShowComments { get; set; } + + + List RowBreaks { get; } + List ColumnBreaks { get; } + void AddHorizontalPageBreak(Int32 row); + void AddVerticalPageBreak(Int32 column); + + XLPrintErrorValues PrintErrorValue { get; set; } + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPrintAreas.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPrintAreas.cs new file mode 100644 index 0000000..1745068 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/IXLPrintAreas.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLPrintAreas: IEnumerable + { + void Clear(); + void Add(Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn); + void Add(String rangeAddress); + void Add(String firstCellAddress, String lastCellAddress); + void Add(IXLAddress firstCellAddress, IXLAddress lastCellAddress); + void Add(IXLCell firstCell, IXLCell lastCell); + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageOptions.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageOptions.cs deleted file mode 100644 index 4b99290..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageOptions.cs +++ /dev/null @@ -1,203 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public class XLPageOptions : IXLPageSetup - { - public XLPageOptions(XLPageOptions defaultPrintOptions) - { - this.PrintAreas = new List(); - this.RowTitles = new List(); - this.ColumnTitles = new List(); - if (defaultPrintOptions != null) - { - this.CenterHorizontally = defaultPrintOptions.CenterHorizontally; - this.CenterVertically = defaultPrintOptions.CenterVertically; - this.FirstPageNumber = defaultPrintOptions.FirstPageNumber; - this.HorizontalDpi = defaultPrintOptions.HorizontalDpi; - this.PageOrientation = defaultPrintOptions.PageOrientation; - this.VerticalDpi = defaultPrintOptions.VerticalDpi; - foreach (var printArea in defaultPrintOptions.PrintAreas) - { - this.PrintAreas.Add( - new XLRange( - new XLRangeParameters( - printArea.Internals.FirstCellAddress, - printArea.Internals.LastCellAddress, - printArea.Internals.Worksheet, - printArea.Style) - ) - ); - } - - foreach (var rowTitle in defaultPrintOptions.RowTitles) - { - this.RowTitles.Add( - new XLRow(rowTitle.RowNumber, new XLRowParameters(rowTitle.Internals.Worksheet, rowTitle.Style)) - ); - } - foreach (var columnTitle in defaultPrintOptions.ColumnTitles) - { - this.ColumnTitles.Add( - new XLColumn(columnTitle.ColumnNumber, new XLColumnParameters(columnTitle.Internals.Worksheet, columnTitle.Style)) - ); - } - this.PaperSize = defaultPrintOptions.PaperSize; - this.pagesTall = defaultPrintOptions.pagesTall; - this.pagesWide = defaultPrintOptions.pagesWide; - this.scale = defaultPrintOptions.scale; - - if (defaultPrintOptions.Margins != null) - { - this.Margins = new XLMargins() - { - Top = defaultPrintOptions.Margins.Top, - Bottom = defaultPrintOptions.Margins.Bottom, - Left = defaultPrintOptions.Margins.Left, - Right = defaultPrintOptions.Margins.Right, - Header = defaultPrintOptions.Margins.Header, - Footer = defaultPrintOptions.Margins.Footer - }; - } - this.AlignHFWithMargins = defaultPrintOptions.AlignHFWithMargins; - this.ScaleHFWithDocument = defaultPrintOptions.ScaleHFWithDocument; - this.ShowGridlines = defaultPrintOptions.ShowGridlines; - this.ShowRowAndColumnHeadings = defaultPrintOptions.ShowRowAndColumnHeadings; - this.BlackAndWhite = defaultPrintOptions.BlackAndWhite; - this.DraftQuality = defaultPrintOptions.DraftQuality; - this.PageOrder = defaultPrintOptions.PageOrder; - - this.ColumnBreaks = new List(); - this.RowBreaks = new List(); - this.PrintErrorValue = defaultPrintOptions.PrintErrorValue; - } - Header = new XLHeaderFooter(); - Footer = new XLHeaderFooter(); - } - public List PrintAreas { get; set; } - public List RowTitles { get; set; } - public List ColumnTitles { get; set; } - public void SetRowTitles(List rowTitles) - { - RowTitles.Clear(); - RowTitles.AddRange(rowTitles); - } - public void SetColumnTitles(List columnTitles) - { - ColumnTitles.Clear(); - ColumnTitles.AddRange(columnTitles); - } - public XLPageOrientation PageOrientation { get; set; } - public XLPaperSize PaperSize { get; set; } - public Int32 HorizontalDpi { get; set; } - public Int32 VerticalDpi { get; set; } - public Int32 FirstPageNumber { get; set; } - public Boolean CenterHorizontally { get; set; } - public Boolean CenterVertically { get; set; } - public XLPrintErrorValues PrintErrorValue { get; set; } - public XLMargins Margins { get; set; } - - private Int32 pagesWide; - public Int32 PagesWide - { - get - { - return pagesWide; - } - set - { - pagesWide = value; - if (pagesWide >0) - scale = 0; - } - } - - private Int32 pagesTall; - public Int32 PagesTall - { - get - { - return pagesTall; - } - set - { - pagesTall = value; - if (pagesTall >0) - scale = 0; - } - } - - private Int32 scale; - public Int32 Scale - { - get - { - return scale; - } - set - { - scale = value; - if (scale > 0) - { - pagesTall = 0; - pagesWide = 0; - } - } - } - - public void AdjustTo(Int32 pctOfNormalSize) - { - Scale = pctOfNormalSize; - pagesWide = 0; - pagesTall = 0; - } - public void FitToPages(Int32 pagesWide, Int32 pagesTall) - { - this.pagesWide = pagesWide; - this.pagesTall = pagesTall; - scale = 0; - } - - - public IXLHeaderFooter Header { get; private set; } - public IXLHeaderFooter Footer { get; private set; } - - public Boolean ScaleHFWithDocument { get; set; } - public Boolean AlignHFWithMargins { get; set; } - - public Boolean ShowGridlines { get; set; } - public Boolean ShowRowAndColumnHeadings { get; set; } - public Boolean BlackAndWhite { get; set; } - public Boolean DraftQuality { get; set; } - - public XLPageOrderValues PageOrder { get; set; } - public XLShowCommentsValues ShowComments { get; set; } - - public List RowBreaks { get; private set; } - public List ColumnBreaks { get; private set; } - - public void AddPageBreak(IXLRow row) - { - RowBreaks.Add(row); - } - public void AddPageBreak(IXLColumn column) - { - ColumnBreaks.Add(column); - } - - //public void SetPageBreak(IXLRange range, XLPageBreakLocations breakLocation) - //{ - // switch (breakLocation) - // { - // case XLPageBreakLocations.AboveRange: RowBreaks.Add(range.Internals.Worksheet.Row(range.RowNumber)); break; - // case XLPageBreakLocations.BelowRange: RowBreaks.Add(range.Internals.Worksheet.Row(range.RowCount())); break; - // case XLPageBreakLocations.LeftOfRange: ColumnBreaks.Add(range.Internals.Worksheet.Column(range.ColumnNumber)); break; - // case XLPageBreakLocations.RightOfRange: ColumnBreaks.Add(range.Internals.Worksheet.Column(range.ColumnCount())); break; - // default: throw new NotImplementedException(); - // } - //} - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageSetup.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageSetup.cs new file mode 100644 index 0000000..826bddb --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPageSetup.cs @@ -0,0 +1,189 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public class XLPageOptions : IXLPageSetup + { + public XLPageOptions(XLPageOptions defaultPageOptions, IXLWorksheet worksheet) + { + this.PrintAreas = new XLPrintAreas(worksheet); + if (defaultPageOptions != null) + { + this.CenterHorizontally = defaultPageOptions.CenterHorizontally; + this.CenterVertically = defaultPageOptions.CenterVertically; + this.FirstPageNumber = defaultPageOptions.FirstPageNumber; + this.HorizontalDpi = defaultPageOptions.HorizontalDpi; + this.PageOrientation = defaultPageOptions.PageOrientation; + this.VerticalDpi = defaultPageOptions.VerticalDpi; + + this.PaperSize = defaultPageOptions.PaperSize; + this.pagesTall = defaultPageOptions.pagesTall; + this.pagesWide = defaultPageOptions.pagesWide; + this.scale = defaultPageOptions.scale; + + if (defaultPageOptions.Margins != null) + { + this.Margins = new XLMargins() + { + Top = defaultPageOptions.Margins.Top, + Bottom = defaultPageOptions.Margins.Bottom, + Left = defaultPageOptions.Margins.Left, + Right = defaultPageOptions.Margins.Right, + Header = defaultPageOptions.Margins.Header, + Footer = defaultPageOptions.Margins.Footer + }; + } + this.AlignHFWithMargins = defaultPageOptions.AlignHFWithMargins; + this.ScaleHFWithDocument = defaultPageOptions.ScaleHFWithDocument; + this.ShowGridlines = defaultPageOptions.ShowGridlines; + this.ShowRowAndColumnHeadings = defaultPageOptions.ShowRowAndColumnHeadings; + this.BlackAndWhite = defaultPageOptions.BlackAndWhite; + this.DraftQuality = defaultPageOptions.DraftQuality; + this.PageOrder = defaultPageOptions.PageOrder; + + this.ColumnBreaks = new List(); + this.RowBreaks = new List(); + this.PrintErrorValue = defaultPageOptions.PrintErrorValue; + } + Header = new XLHeaderFooter(); + Footer = new XLHeaderFooter(); + } + public IXLPrintAreas PrintAreas { get; private set; } + + + public Int32 FirstRowToRepeatAtTop { get; private set; } + public Int32 LastRowToRepeatAtTop { get; private set; } + public void SetRowsToRepeatAtTop(Int32 firstRowToRepeatAtTop, Int32 lastRowToRepeatAtTop) + { + if (firstRowToRepeatAtTop <= 0) throw new ArgumentOutOfRangeException("The first row has to be greater than zero."); + if (firstRowToRepeatAtTop > lastRowToRepeatAtTop) throw new ArgumentOutOfRangeException("The first row has to be less than the second row."); + + FirstRowToRepeatAtTop = firstRowToRepeatAtTop; + LastRowToRepeatAtTop = lastRowToRepeatAtTop; + } + public Int32 FirstColumnToRepeatAtLeft { get; private set; } + public Int32 LastColumnToRepeatAtLeft { get; private set; } + public void SetColumnsToRepeatAtLeft(Int32 firstColumnToRepeatAtLeft, Int32 lastColumnToRepeatAtLeft) + { + if (firstColumnToRepeatAtLeft <= 0) throw new ArgumentOutOfRangeException("The first column has to be greater than zero."); + if (firstColumnToRepeatAtLeft > lastColumnToRepeatAtLeft) throw new ArgumentOutOfRangeException("The first column has to be less than the second column."); + + FirstColumnToRepeatAtLeft = firstColumnToRepeatAtLeft; + LastColumnToRepeatAtLeft = lastColumnToRepeatAtLeft; + } + + public XLPageOrientation PageOrientation { get; set; } + public XLPaperSize PaperSize { get; set; } + public Int32 HorizontalDpi { get; set; } + public Int32 VerticalDpi { get; set; } + public Int32 FirstPageNumber { get; set; } + public Boolean CenterHorizontally { get; set; } + public Boolean CenterVertically { get; set; } + public XLPrintErrorValues PrintErrorValue { get; set; } + public XLMargins Margins { get; set; } + + private Int32 pagesWide; + public Int32 PagesWide + { + get + { + return pagesWide; + } + set + { + pagesWide = value; + if (pagesWide >0) + scale = 0; + } + } + + private Int32 pagesTall; + public Int32 PagesTall + { + get + { + return pagesTall; + } + set + { + pagesTall = value; + if (pagesTall >0) + scale = 0; + } + } + + private Int32 scale; + public Int32 Scale + { + get + { + return scale; + } + set + { + scale = value; + if (scale > 0) + { + pagesTall = 0; + pagesWide = 0; + } + } + } + + public void AdjustTo(Int32 pctOfNormalSize) + { + Scale = pctOfNormalSize; + pagesWide = 0; + pagesTall = 0; + } + public void FitToPages(Int32 pagesWide, Int32 pagesTall) + { + this.pagesWide = pagesWide; + this.pagesTall = pagesTall; + scale = 0; + } + + + public IXLHeaderFooter Header { get; private set; } + public IXLHeaderFooter Footer { get; private set; } + + public Boolean ScaleHFWithDocument { get; set; } + public Boolean AlignHFWithMargins { get; set; } + + public Boolean ShowGridlines { get; set; } + public Boolean ShowRowAndColumnHeadings { get; set; } + public Boolean BlackAndWhite { get; set; } + public Boolean DraftQuality { get; set; } + + public XLPageOrderValues PageOrder { get; set; } + public XLShowCommentsValues ShowComments { get; set; } + + public List RowBreaks { get; private set; } + public List ColumnBreaks { get; private set; } + public void AddHorizontalPageBreak(Int32 row) + { + if (!RowBreaks.Contains(row)) + RowBreaks.Add(row); + } + public void AddVerticalPageBreak(Int32 column) + { + if (!ColumnBreaks.Contains(column)) + ColumnBreaks.Add(column); + } + + //public void SetPageBreak(IXLRange range, XLPageBreakLocations breakLocation) + //{ + // switch (breakLocation) + // { + // case XLPageBreakLocations.AboveRange: RowBreaks.Add(range.Internals.Worksheet.Row(range.RowNumber)); break; + // case XLPageBreakLocations.BelowRange: RowBreaks.Add(range.Internals.Worksheet.Row(range.RowCount())); break; + // case XLPageBreakLocations.LeftOfRange: ColumnBreaks.Add(range.Internals.Worksheet.Column(range.ColumnNumber)); break; + // case XLPageBreakLocations.RightOfRange: ColumnBreaks.Add(range.Internals.Worksheet.Column(range.ColumnCount())); break; + // default: throw new NotImplementedException(); + // } + //} + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPrintAreas.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPrintAreas.cs new file mode 100644 index 0000000..a1bb144 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/PrintOptions/XLPrintAreas.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public class XLPrintAreas: IXLPrintAreas + { + List ranges = new List(); + private IXLWorksheet worksheet; + public XLPrintAreas(IXLWorksheet worksheet) + { + this.worksheet = worksheet; + } + + public void Clear() + { + ranges.Clear(); + } + + public void Add(int firstCellRow, int firstCellColumn, int lastCellRow, int lastCellColumn) + { + ranges.Add(worksheet.Range(firstCellRow, firstCellColumn, lastCellRow, lastCellColumn)); + } + + public void Add(string rangeAddress) + { + ranges.Add(worksheet.Range(rangeAddress)); + } + + public void Add(string firstCellAddress, string lastCellAddress) + { + ranges.Add(worksheet.Range(firstCellAddress, lastCellAddress)); + } + + public void Add(IXLAddress firstCellAddress, IXLAddress lastCellAddress) + { + ranges.Add(worksheet.Range(firstCellAddress, lastCellAddress)); + } + + public void Add(IXLCell firstCell, IXLCell lastCell) + { + ranges.Add(worksheet.Range(firstCell, lastCell)); + } + + public IEnumerator GetEnumerator() + { + return ranges.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRange.cs new file mode 100644 index 0000000..7f15257 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRange.cs @@ -0,0 +1,396 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public interface IXLRange: IXLStylized + { + IXLRange Row(Int32 row); + IXLRange Column(Int32 column); + IXLRange Column(String column); + Int32 RowNumber { get; } + Int32 ColumnNumber { get; } + String ColumnLetter { get; } + IXLRangeInternals Internals { get; } + } + + public enum XLShiftDeletedCells { ShiftCellsUp, ShiftCellsLeft } + + public static class IXLRangeMethods + { + public static IXLCell FirstCell(this IXLRange range) + { + return range.Cell(1, 1); + } + public static IXLCell LastCell(this IXLRange range) + { + return range.Cell(range.RowCount(), range.ColumnCount()); + } + + public static IXLCell Cell(this IXLRange range, IXLAddress cellAddressInRange) + { + IXLAddress absoluteAddress = (XLAddress)cellAddressInRange + (XLAddress)range.Internals.FirstCellAddress - 1; + if (range.Internals.Worksheet.Internals.CellsCollection.ContainsKey(absoluteAddress)) + { + return range.Internals.Worksheet.Internals.CellsCollection[absoluteAddress]; + } + else + { + var newCell = new XLCell(absoluteAddress, range.Style); + range.Internals.Worksheet.Internals.CellsCollection.Add(absoluteAddress, newCell); + return newCell; + } + } + public static IXLCell Cell(this IXLRange range, Int32 row, Int32 column) + { + return range.Cell(new XLAddress(row, column)); + } + public static IXLCell Cell(this IXLRange range, Int32 row, String column) + { + return range.Cell(new XLAddress(row, column)); + } + public static IXLCell Cell(this IXLRange range, String cellAddressInRange) + { + return range.Cell(new XLAddress(cellAddressInRange)); + } + + public static Int32 RowCount(this IXLRange range) + { + return range.Internals.LastCellAddress.Row - range.Internals.FirstCellAddress.Row + 1; + } + public static Int32 ColumnCount(this IXLRange range) + { + return range.Internals.LastCellAddress.Column - range.Internals.FirstCellAddress.Column + 1; + } + + public static IXLRange Range(this IXLRange range, Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn) + { + return range.Range(new XLAddress(firstCellRow, firstCellColumn), new XLAddress(lastCellRow, lastCellColumn)); + } + public static IXLRange Range(this IXLRange range, String rangeAddress) + { + if (rangeAddress.Contains(':')) + { + String[] arrRange = rangeAddress.Split(':'); + return range.Range(arrRange[0], arrRange[1]); + } + else + { + return range.Range(rangeAddress, rangeAddress); + } + } + public static IXLRange Range(this IXLRange range, String firstCellAddress, String lastCellAddress) + { + return range.Range(new XLAddress(firstCellAddress), new XLAddress(lastCellAddress)); + } + public static IXLRange Range(this IXLRange range, IXLAddress firstCellAddress, IXLAddress lastCellAddress) + { + var newFirstCellAddress = (XLAddress)firstCellAddress + (XLAddress)range.Internals.FirstCellAddress - 1; + var newLastCellAddress = (XLAddress)lastCellAddress + (XLAddress)range.Internals.FirstCellAddress - 1; + var xlRangeParameters = new XLRangeParameters(newFirstCellAddress, newLastCellAddress, range.Internals.Worksheet, range.Style); + if ( + newFirstCellAddress.Row < range.Internals.FirstCellAddress.Row + || newFirstCellAddress.Row > range.Internals.LastCellAddress.Row + || newLastCellAddress.Row > range.Internals.LastCellAddress.Row + || newFirstCellAddress.Column < range.Internals.FirstCellAddress.Column + || newFirstCellAddress.Column > range.Internals.LastCellAddress.Column + || newLastCellAddress.Column > range.Internals.LastCellAddress.Column + ) + throw new ArgumentOutOfRangeException(); + + return new XLRange(xlRangeParameters); + } + public static IXLRange Range(this IXLRange range, IXLCell firstCell, IXLCell lastCell) + { + return range.Range(firstCell.Address, lastCell.Address); + } + + public static IEnumerable Cells(this IXLRange range) + { + foreach(var row in Enumerable.Range(1, range.RowCount())) + { + foreach(var column in Enumerable.Range(1, range.ColumnCount())) + { + yield return range.Cell(row, column); + } + } + } + + public static void Merge(this IXLRange range) + { + var mergeRange = range.Internals.FirstCellAddress.ToString() + ":" + range.Internals.LastCellAddress.ToString(); + if (!range.Internals.Worksheet.Internals.MergedCells.Contains(mergeRange)) + range.Internals.Worksheet.Internals.MergedCells.Add(mergeRange); + } + public static void Unmerge(this IXLRange range) + { + range.Internals.Worksheet.Internals.MergedCells.Remove(range.Internals.FirstCellAddress.ToString() + ":" + range.Internals.LastCellAddress.ToString()); + } + + public static IXLRange FirstColumn(this IXLRange range) + { + return range.Column(1); + } + public static IXLRange LastColumn(this IXLRange range) + { + return range.Column(range.ColumnCount()); + } + public static IXLRange FirstRow(this IXLRange range) + { + return range.Row(1); + } + public static IXLRange LastRow(this IXLRange range) + { + return range.Row(range.RowCount()); + } + + public static void InsertRowsBelow(this IXLRange range, Int32 numberOfRows) + { + var cellsToInsert = new Dictionary(); + var cellsToDelete = new List(); + var lastRow = range.LastRow().RowNumber; + var firstColumn = range.FirstColumn().ColumnNumber; + var lastColumn = range.LastColumn().ColumnNumber; + foreach (var c in range.Internals.Worksheet.Internals.CellsCollection + .Where(c => + c.Key.Row > lastRow + && c.Key.Column >= firstColumn + && c.Key.Column <= lastColumn + )) + { + var newRow = c.Key.Row + numberOfRows; + var newKey = new XLAddress(newRow, c.Key.Column); + var newCell = new XLCell(newKey, c.Value.Style); + newCell.Value = c.Value.Value; + cellsToInsert.Add(newKey, newCell); + cellsToDelete.Add(c.Key); + } + cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); + } + public static void InsertRowsAbove(this IXLRange range, Int32 numberOfRows) + { + var cellsToInsert = new Dictionary(); + var cellsToDelete = new List(); + var firstRow = range.FirstRow().RowNumber; + var firstColumn = range.FirstColumn().ColumnNumber; + var lastColumn = range.LastColumn().ColumnNumber; + foreach (var c in range.Internals.Worksheet.Internals.CellsCollection + .Where(c => + c.Key.Row >= firstRow + && c.Key.Column >= firstColumn + && c.Key.Column <= lastColumn + )) + { + var newRow = c.Key.Row + numberOfRows; + var newKey = new XLAddress(newRow, c.Key.Column); + var newCell = new XLCell(newKey, c.Value.Style); + newCell.Value = c.Value.Value; + cellsToInsert.Add(newKey, newCell); + cellsToDelete.Add(c.Key); + } + cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); + } + + public static void InsertColumnsAfter(this IXLRange range, Int32 numberOfColumns) + { + var cellsToInsert = new Dictionary(); + var cellsToDelete = new List(); + var firstRow = range.FirstRow().RowNumber; + var lastRow = range.LastRow().RowNumber; + var lastColumn = range.LastColumn().ColumnNumber; + foreach (var c in range.Internals.Worksheet.Internals.CellsCollection + .Where(c => + c.Key.Column > lastColumn + && c.Key.Row >= firstRow + && c.Key.Row <= lastRow + )) + { + var newColumn = c.Key.Column + numberOfColumns; + var newKey = new XLAddress(c.Key.Row, newColumn); + var newCell = new XLCell(newKey, c.Value.Style); + newCell.Value = c.Value.Value; + cellsToInsert.Add(newKey, newCell); + cellsToDelete.Add(c.Key); + } + cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); + } + public static void InsertColumnsBefore(this IXLRange range, Int32 numberOfColumns) + { + var cellsToInsert = new Dictionary(); + var cellsToDelete = new List(); + var firstRow = range.FirstRow().RowNumber; + var lastRow = range.LastRow().RowNumber; + var firstColumn = range.FirstColumn().ColumnNumber; + foreach (var c in range.Internals.Worksheet.Internals.CellsCollection + .Where(c => + c.Key.Column >= firstColumn + && c.Key.Row >= firstRow + && c.Key.Row <= lastRow + )) + { + var newColumn = c.Key.Column + numberOfColumns; + var newKey = new XLAddress(c.Key.Row, newColumn); + var newCell = new XLCell(newKey, c.Value.Style); + newCell.Value = c.Value.Value; + cellsToInsert.Add(newKey, newCell); + cellsToDelete.Add(c.Key); + } + cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); + } + + public static IXLRanges Columns(this IXLRange range) + { + var retVal = new XLRanges(); + foreach (var c in Enumerable.Range(1, range.ColumnCount())) + { + retVal.Add(range.Column(c)); + } + return retVal; + } + public static IXLRanges Columns(this IXLRange range, String columns) + { + var retVal = new XLRanges(); + var columnPairs = columns.Split(','); + foreach (var pair in columnPairs) + { + String firstColumn; + String lastColumn; + if (pair.Contains(':')) + { + var columnRange = pair.Split(':'); + firstColumn = columnRange[0]; + lastColumn = columnRange[1]; + } + else + { + firstColumn = pair; + lastColumn = pair; + } + + Int32 tmp; + if (Int32.TryParse(firstColumn, out tmp)) + foreach (var col in range.Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))) + { + retVal.Add(col); + } + else + foreach (var col in range.Columns(firstColumn, lastColumn)) + { + retVal.Add(col); + } + } + return retVal; + } + public static IXLRanges Columns(this IXLRange range, String firstColumn, String lastColumn) + { + return range.Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); + } + public static IXLRanges Columns(this IXLRange range, Int32 firstColumn, Int32 lastColumn) + { + var retVal = new XLRanges(); + + for (var co = firstColumn; co <= lastColumn; co++) + { + retVal.Add(range.Column(co)); + } + return retVal; + } + public static IXLRanges Rows(this IXLRange range) + { + var retVal = new XLRanges(); + foreach (var r in Enumerable.Range(1, range.RowCount())) + { + retVal.Add(range.Row(r)); + } + return retVal; + } + public static IXLRanges Rows(this IXLRange range, String rows) + { + var retVal = new XLRanges(); + var rowPairs = rows.Split(','); + foreach (var pair in rowPairs) + { + String firstRow; + String lastRow; + if (pair.Contains(':')) + { + var rowRange = pair.Split(':'); + firstRow = rowRange[0]; + lastRow = rowRange[1]; + } + else + { + firstRow = pair; + lastRow = pair; + } + foreach (var row in range.Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) + { + retVal.Add(row); + } + } + return retVal; + } + public static IXLRanges Rows(this IXLRange range, Int32 firstRow, Int32 lastRow) + { + var retVal = new XLRanges(); + + for(var ro = firstRow; ro <= lastRow; ro++) + { + retVal.Add(range.Row(ro)); + } + return retVal; + } + + public static void Clear(this IXLRange range) + { + // Remove cells inside range + range.Internals.Worksheet.Internals.CellsCollection.RemoveAll(c => + c.Address.Column >= range.ColumnNumber + && c.Address.Column <= range.LastColumn().ColumnNumber + && c.Address.Row >= range.RowNumber + && c.Address.Row <= range.LastRow().RowNumber + ); + } + public static void Delete(this IXLRange range, XLShiftDeletedCells shiftDeleteCells) + { + range.Clear(); + + // Range to shift... + var cellsToInsert = new Dictionary(); + var cellsToDelete = new List(); + var shiftLeft = range.Internals.Worksheet.Internals.CellsCollection + .Where(c => c.Key.Column > range.LastColumn().ColumnNumber + && c.Key.Row >= range.RowNumber + && c.Key.Row <= range.LastRow().RowNumber); + + var shiftUp = range.Internals.Worksheet.Internals.CellsCollection + .Where(c => + c.Key.Column >= range.ColumnNumber + && c.Key.Column <= range.LastColumn().ColumnNumber + && c.Key.Row > range.RowNumber); + + foreach (var c in shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? shiftLeft : shiftUp) + { + var columnModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? range.ColumnCount() : 0; + var rowModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp ? range.RowCount() : 0; + var newKey = new XLAddress(c.Key.Row - rowModifier, c.Key.Column - columnModifier); + var newCell = new XLCell(newKey, c.Value.Style); + newCell.Value = c.Value.Value; + cellsToInsert.Add(newKey, newCell); + cellsToDelete.Add(c.Key); + } + cellsToDelete.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => range.Internals.Worksheet.Internals.CellsCollection.Add(c.Key, c.Value)); + + + } + } +} + diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeInternals.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeInternals.cs new file mode 100644 index 0000000..e73d246 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRangeInternals.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLRangeInternals + { + IXLAddress FirstCellAddress { get; } + IXLAddress LastCellAddress { get; } + IXLWorksheet Worksheet { get; } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs new file mode 100644 index 0000000..397a7d4 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/IXLRanges.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLRanges: IEnumerable, IXLStylized + { + void Clear(); + void Add(IXLRange range); + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs new file mode 100644 index 0000000..9ad861a --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLRange: IXLRange + { + private IXLStyle defaultStyle; + + public XLRange(XLRangeParameters xlRangeParameters) + { + Internals = new XLRangeInternals(xlRangeParameters.FirstCellAddress, xlRangeParameters.LastCellAddress, xlRangeParameters.Worksheet); + RowNumber = xlRangeParameters.FirstCellAddress.Row; + ColumnNumber = xlRangeParameters.FirstCellAddress.Column; + ColumnLetter = xlRangeParameters.FirstCellAddress.ColumnLetter; + this.defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); + } + + #region IXLRange Members + + public IXLRange Row(Int32 row) + { + IXLAddress firstCellAddress = new XLAddress(row, 1); + IXLAddress lastCellAddress = new XLAddress(row, this.ColumnCount()); + return this.Range(firstCellAddress, lastCellAddress); + } + public IXLRange Column(Int32 column) + { + return this.Range(1, column, this.RowCount(), column); + } + public IXLRange Column(String column) + { + return Column(XLAddress.GetColumnNumberFromLetter(column)); + } + + public Int32 RowNumber { get; private set; } + public Int32 ColumnNumber { get; private set; } + public String ColumnLetter { get; private set; } + + public IXLRangeInternals Internals { get; private set; } + + #endregion + + #region IXLStylized Members + + public IXLStyle Style + { + get + { + return this.defaultStyle; + } + set + { + this.Cells().ForEach(c => c.Style = value); + } + } + + public IEnumerable Styles + { + get + { + UpdatingStyle = true; + foreach (var cell in this.Cells()) + { + yield return cell.Style; + } + UpdatingStyle = false; + } + } + + public Boolean UpdatingStyle { get; set; } + + #endregion + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeInternals.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeInternals.cs new file mode 100644 index 0000000..1bd9cc7 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeInternals.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public class XLRangeInternals: IXLRangeInternals + { + public XLRangeInternals(IXLAddress firstCellAddress, IXLAddress lastCellAddress, IXLWorksheet worksheet) + { + FirstCellAddress = firstCellAddress; + LastCellAddress = lastCellAddress; + Worksheet = worksheet; + } + public IXLAddress FirstCellAddress { get; private set; } + public IXLAddress LastCellAddress { get; private set; } + public IXLWorksheet Worksheet { get; private set; } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs new file mode 100644 index 0000000..d399710 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLRangeParameters + { + public XLRangeParameters(IXLAddress firstCellAddress, IXLAddress lastCellAddress, IXLWorksheet worksheet, IXLStyle defaultStyle) + { + FirstCellAddress = firstCellAddress; + LastCellAddress = lastCellAddress; + Worksheet = worksheet; + DefaultStyle = defaultStyle; + } + #region Properties + + // Public + public IXLAddress FirstCellAddress { get; private set; } + public IXLAddress LastCellAddress { get; private set; } + public IXLWorksheet Worksheet { get; private set; } + public IXLStyle DefaultStyle { get; private set; } + + // Private + + // Override + + + #endregion + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs new file mode 100644 index 0000000..504951d --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRanges.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public class XLRanges: IXLRanges + { + public XLRanges() + { + Style = XLWorkbook.DefaultStyle; + } + + List ranges = new List(); + + public void Clear() + { + ranges.ForEach(r => r.Clear()); + } + + public void Add(IXLRange range) + { + ranges.Add(range); + } + + public IEnumerator GetEnumerator() + { + return ranges.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #region IXLStylized Members + + private IXLStyle style; + public IXLStyle Style + { + get + { + return style; + } + set + { + style = new XLStyle(this, value); + + } + } + + public IEnumerable Styles + { + get + { + UpdatingStyle = true; + yield return style; + foreach (var rng in ranges) + { + yield return rng.Style; + foreach (var r in rng.Internals.Worksheet.Internals.CellsCollection.Values.Where(c => + c.Address.Row >= rng.Internals.FirstCellAddress.Row + && c.Address.Row <= rng.Internals.LastCellAddress.Row + && c.Address.Column >= rng.Internals.FirstCellAddress.Column + && c.Address.Column <= rng.Internals.LastCellAddress.Column + )) + { + yield return r.Style; + } + } + UpdatingStyle = false; + } + } + + public Boolean UpdatingStyle { get; set; } + + #endregion + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs new file mode 100644 index 0000000..a62a0fd --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLRow: IXLRange + { + Double Height { get; set; } + void Delete(); + + } + + public static class IXLRowMethods + { + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs new file mode 100644 index 0000000..5ba82e6 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public interface IXLRows: IEnumerable, IXLStylized + { + Double Height { set; } + void Delete(); + void Add(IXLRow row); + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs new file mode 100644 index 0000000..28506a4 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLRow: IXLRow + { + public XLRow(Int32 row, XLRowParameters xlRowParameters) + { + Internals = new XLRangeInternals(new XLAddress(row, 1), new XLAddress(row, XLWorksheet.MaxNumberOfColumns), xlRowParameters.Worksheet); + RowNumber = row; + ColumnNumber = 1; + ColumnLetter = "A"; + this.style = new XLStyle(this, xlRowParameters.DefaultStyle); + this.Height = XLWorkbook.DefaultRowHeight; + } + + public Double Height { get; set; } + public Int32 RowNumber { get; private set; } + public Int32 ColumnNumber { get; private set; } + public String ColumnLetter { get; private set; } + public void Delete() + { + this.Row(RowNumber).Delete(XLShiftDeletedCells.ShiftCellsUp); + } + + + #region IXLRange Members + + public IXLRangeInternals Internals { get; private set; } + + #endregion + + #region IXLStylized Members + + private IXLStyle style; + public IXLStyle Style + { + get + { + return style; + } + set + { + style = new XLStyle(this, value); + } + } + + public IEnumerable Styles + { + get + { + UpdatingStyle = true; + yield return style; + foreach (var c in Internals.Worksheet.Internals.CellsCollection.Values.Where(c => c.Address.Row == Internals.FirstCellAddress.Row)) + { + yield return c.Style; + } + UpdatingStyle = false; + } + } + + public Boolean UpdatingStyle { get; set; } + + #endregion + + #region IXLRange Members + + public IXLRange Row(int row) + { + return this; + } + + public IXLRange Column(int column) + { + var address = new XLAddress(1, column); + return this.Range(address, address); + } + + public IXLRange Column(string column) + { + return Column(Int32.Parse(column)); + } + + #endregion + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowParameters.cs new file mode 100644 index 0000000..787ffb6 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRowParameters.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace ClosedXML.Excel +{ + public class XLRowParameters + { + public XLRowParameters(IXLWorksheet worksheet, IXLStyle defaultStyle) + { + Worksheet = worksheet; + DefaultStyle = defaultStyle; + } + public IXLStyle DefaultStyle { get; set; } + public IXLWorksheet Worksheet { get; private set; } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs new file mode 100644 index 0000000..e2481e8 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClosedXML.Excel +{ + public class XLRows: IXLRows + { + public XLRows() + { + Style = XLWorkbook.DefaultStyle; + } + + List rows = new List(); + public IEnumerator GetEnumerator() + { + return rows.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #region IXLStylized Members + + private IXLStyle style; + public IXLStyle Style + { + get + { + return style; + } + set + { + style = new XLStyle(this, value); + + } + } + + public IEnumerable Styles + { + get + { + UpdatingStyle = true; + yield return style; + foreach (var col in rows) + { + yield return col.Style; + foreach (var c in col.Internals.Worksheet.Internals.CellsCollection.Values.Where(c => c.Address.Row == col.Internals.FirstCellAddress.Row)) + { + yield return c.Style; + } + } + UpdatingStyle = false; + } + } + + public Boolean UpdatingStyle { get; set; } + + #endregion + + public double Height + { + set + { + rows.ForEach(c => c.Height = value); + } + } + + public void Delete() + { + rows.ForEach(c => c.Delete(XLShiftDeletedCells.ShiftCellsUp)); + } + + + public void Add(IXLRow row) + { + rows.Add(row); + } + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumn.cs deleted file mode 100644 index 70a15b7..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumn.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLColumn: IXLColumn - { - public XLColumn(Int32 column, XLColumnParameters xlColumnParameters) - { - Internals = new XLRangeInternals(new XLAddress(1, column), new XLAddress(XLWorksheet.MaxNumberOfRows, column), xlColumnParameters.Worksheet); - RowNumber = 1; - ColumnNumber = column; - ColumnLetter = XLAddress.GetColumnLetterFromNumber(column); - this.style = new XLStyle(this, xlColumnParameters.DefaultStyle); - this.Width = XLWorkbook.DefaultColumnWidth; - } - - public Double Width { get; set; } - public Int32 RowNumber { get; private set; } - public Int32 ColumnNumber { get; private set; } - public String ColumnLetter { get; private set; } - public void Delete() - { - this.Column(ColumnNumber).Delete(XLShiftDeletedCells.ShiftCellsLeft); - } - - #region IXLStylized Members - - private IXLStyle style; - public IXLStyle Style - { - get - { - return style; - } - set - { - style = new XLStyle(this, value); - } - } - - public IEnumerable Styles - { - get - { - UpdatingStyle = true; - yield return style; - foreach (var c in Internals.Worksheet.Internals.CellsCollection.Values.Where(c => c.Address.Column == Internals.FirstCellAddress.Column)) - { - yield return c.Style; - } - UpdatingStyle = false; - } - } - - public Boolean UpdatingStyle { get; set; } - - #endregion - - #region IXLRange Members - - public IXLRange Row(int row) - { - var address = new XLAddress(row, 1); - return this.Range(address, address); - } - - public IXLRange Column(int column) - { - return this; - } - - public IXLRange Column(string column) - { - return this; - } - - #endregion - - public IXLRangeInternals Internals { get; private set; } - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumnParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumnParameters.cs deleted file mode 100644 index 967ad1a..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLColumnParameters.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLColumnParameters - { - public XLColumnParameters(IXLWorksheet worksheet, IXLStyle defaultStyle) - { - Worksheet = worksheet; - DefaultStyle = defaultStyle; - } - public IXLStyle DefaultStyle { get; set; } - public IXLWorksheet Worksheet { get; private set; } - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLRange.cs deleted file mode 100644 index 77a2407..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRange.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLRange: IXLRange - { - private IXLStyle defaultStyle; - - public XLRange(XLRangeParameters xlRangeParameters) - { - Internals = new XLRangeInternals(xlRangeParameters.FirstCellAddress, xlRangeParameters.LastCellAddress, xlRangeParameters.Worksheet); - RowNumber = xlRangeParameters.FirstCellAddress.Row; - ColumnNumber = xlRangeParameters.FirstCellAddress.Column; - ColumnLetter = xlRangeParameters.FirstCellAddress.ColumnLetter; - this.defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); - } - - #region IXLRange Members - - public IXLRange Row(Int32 row) - { - IXLAddress firstCellAddress = new XLAddress(row, 1); - IXLAddress lastCellAddress = new XLAddress(row, this.ColumnCount()); - return this.Range(firstCellAddress, lastCellAddress); - } - public IXLRange Column(Int32 column) - { - IXLAddress firstCellAddress = new XLAddress(1, column); - IXLAddress lastCellAddress = new XLAddress(this.RowCount(), column); - return this.Range(firstCellAddress, lastCellAddress); - } - public IXLRange Column(String column) - { - IXLAddress firstCellAddress = new XLAddress(1, column); - IXLAddress lastCellAddress = new XLAddress(this.RowCount(), column); - return this.Range(firstCellAddress, lastCellAddress); - } - - public Int32 RowNumber { get; private set; } - public Int32 ColumnNumber { get; private set; } - public String ColumnLetter { get; private set; } - - public IXLRangeInternals Internals { get; private set; } - - #endregion - - #region IXLStylized Members - - public IXLStyle Style - { - get - { - return this.defaultStyle; - } - set - { - this.Cells().ForEach(c => c.Style = value); - } - } - - public IEnumerable Styles - { - get - { - UpdatingStyle = true; - foreach (var cell in this.Cells()) - { - yield return cell.Style; - } - UpdatingStyle = false; - } - } - - public Boolean UpdatingStyle { get; set; } - - #endregion - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeInternals.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeInternals.cs deleted file mode 100644 index 1bd9cc7..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeInternals.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace ClosedXML.Excel -{ - public class XLRangeInternals: IXLRangeInternals - { - public XLRangeInternals(IXLAddress firstCellAddress, IXLAddress lastCellAddress, IXLWorksheet worksheet) - { - FirstCellAddress = firstCellAddress; - LastCellAddress = lastCellAddress; - Worksheet = worksheet; - } - public IXLAddress FirstCellAddress { get; private set; } - public IXLAddress LastCellAddress { get; private set; } - public IXLWorksheet Worksheet { get; private set; } - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeParameters.cs deleted file mode 100644 index d399710..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRangeParameters.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLRangeParameters - { - public XLRangeParameters(IXLAddress firstCellAddress, IXLAddress lastCellAddress, IXLWorksheet worksheet, IXLStyle defaultStyle) - { - FirstCellAddress = firstCellAddress; - LastCellAddress = lastCellAddress; - Worksheet = worksheet; - DefaultStyle = defaultStyle; - } - #region Properties - - // Public - public IXLAddress FirstCellAddress { get; private set; } - public IXLAddress LastCellAddress { get; private set; } - public IXLWorksheet Worksheet { get; private set; } - public IXLStyle DefaultStyle { get; private set; } - - // Private - - // Override - - - #endregion - - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLRow.cs deleted file mode 100644 index 28506a4..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRow.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLRow: IXLRow - { - public XLRow(Int32 row, XLRowParameters xlRowParameters) - { - Internals = new XLRangeInternals(new XLAddress(row, 1), new XLAddress(row, XLWorksheet.MaxNumberOfColumns), xlRowParameters.Worksheet); - RowNumber = row; - ColumnNumber = 1; - ColumnLetter = "A"; - this.style = new XLStyle(this, xlRowParameters.DefaultStyle); - this.Height = XLWorkbook.DefaultRowHeight; - } - - public Double Height { get; set; } - public Int32 RowNumber { get; private set; } - public Int32 ColumnNumber { get; private set; } - public String ColumnLetter { get; private set; } - public void Delete() - { - this.Row(RowNumber).Delete(XLShiftDeletedCells.ShiftCellsUp); - } - - - #region IXLRange Members - - public IXLRangeInternals Internals { get; private set; } - - #endregion - - #region IXLStylized Members - - private IXLStyle style; - public IXLStyle Style - { - get - { - return style; - } - set - { - style = new XLStyle(this, value); - } - } - - public IEnumerable Styles - { - get - { - UpdatingStyle = true; - yield return style; - foreach (var c in Internals.Worksheet.Internals.CellsCollection.Values.Where(c => c.Address.Row == Internals.FirstCellAddress.Row)) - { - yield return c.Style; - } - UpdatingStyle = false; - } - } - - public Boolean UpdatingStyle { get; set; } - - #endregion - - #region IXLRange Members - - public IXLRange Row(int row) - { - return this; - } - - public IXLRange Column(int column) - { - var address = new XLAddress(1, column); - return this.Range(address, address); - } - - public IXLRange Column(string column) - { - return Column(Int32.Parse(column)); - } - - #endregion - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRowParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLRowParameters.cs deleted file mode 100644 index 787ffb6..0000000 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLRowParameters.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace ClosedXML.Excel -{ - public class XLRowParameters - { - public XLRowParameters(IXLWorksheet worksheet, IXLStyle defaultStyle) - { - Worksheet = worksheet; - DefaultStyle = defaultStyle; - } - public IXLStyle DefaultStyle { get; set; } - public IXLWorksheet Worksheet { get; private set; } - } -} diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index df92afe..cdbeeb3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -112,14 +112,14 @@ public static Double DefaultRowHeight { get; set; } public static Double DefaultColumnWidth { get; set; } - public static XLPageOptions defaultPrintOptions; - public static XLPageOptions DefaultPrintOptions + public static XLPageOptions defaultPageOptions; + public static XLPageOptions DefaultPageOptions { get { - if (defaultPrintOptions == null) + if (defaultPageOptions == null) { - defaultPrintOptions = new XLPageOptions(null) + defaultPageOptions = new XLPageOptions(null, null) { PageOrientation = XLPageOrientation.Default, Scale = 100, @@ -139,7 +139,7 @@ ShowComments = XLShowCommentsValues.None }; } - return defaultPrintOptions; + return defaultPageOptions; } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 25a1588..866b795 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -363,14 +363,14 @@ Sheet sheet = new Sheet() { Name = worksheet.Name, SheetId = (UInt32Value)sheetId, Id = "rId" + sheetId.ToString() }; sheets.Append(sheet); - if (worksheet.PageSetup.PrintAreas.Count == 0) + if (worksheet.PageSetup.PrintAreas.Count() == 0) { var minCell = worksheet.Internals.CellsCollection.Min(c => c.Key); var maxCell = worksheet.Internals.CellsCollection.Max(c => c.Key); if (minCell != null && maxCell != null) - worksheet.PageSetup.PrintAreas.Add(worksheet.Range(minCell, maxCell)); + worksheet.PageSetup.PrintAreas.Add(minCell, maxCell); } - if (worksheet.PageSetup.PrintAreas.Count > 0) + if (worksheet.PageSetup.PrintAreas.Count() > 0) { DefinedName definedName = new DefinedName() { Name = "_xlnm.Print_Area", LocalSheetId = (UInt32Value)sheetId - 1 }; var definedNameText = String.Empty; @@ -388,15 +388,15 @@ var titles = String.Empty; var definedNameTextRow = String.Empty; var definedNameTextColumn = String.Empty; - if (worksheet.PageSetup.RowTitles.Count > 0) + if (worksheet.PageSetup.FirstRowToRepeatAtTop > 0) { - definedNameTextRow = "'" + worksheet.Name + "'!$" + worksheet.PageSetup.RowTitles.Min(r => r.RowNumber).ToString() - + ":$" + worksheet.PageSetup.RowTitles.Max(r => r.RowNumber).ToString(); + definedNameTextRow = "'" + worksheet.Name + "'!$" + worksheet.PageSetup.FirstRowToRepeatAtTop.ToString() + + ":$" + worksheet.PageSetup.LastRowToRepeatAtTop.ToString(); } - if (worksheet.PageSetup.ColumnTitles.Count > 0) + if (worksheet.PageSetup.FirstColumnToRepeatAtLeft > 0) { - var minColumn = worksheet.PageSetup.ColumnTitles.Min(r => r.ColumnNumber); - var maxColumn = worksheet.PageSetup.ColumnTitles.Max(r => r.ColumnNumber); + var minColumn = worksheet.PageSetup.FirstColumnToRepeatAtLeft; + var maxColumn = worksheet.PageSetup.LastColumnToRepeatAtLeft; definedNameTextColumn = "'" + worksheet.Name + "'!$" + XLAddress.GetColumnLetterFromNumber(minColumn) + ":$" + XLAddress.GetColumnLetterFromNumber(maxColumn); } @@ -946,7 +946,7 @@ rowBreaks = new RowBreaks() { Count = (UInt32Value)(UInt32)rowBreakCount, ManualBreakCount = (UInt32)rowBreakCount }; foreach (var rb in xlWorksheet.PageSetup.RowBreaks) { - Break break1 = new Break() { Id = (UInt32Value)(UInt32)rb.RowNumber, Max = (UInt32Value)(UInt32)rb.ColumnCount(), ManualPageBreak = true }; + Break break1 = new Break() { Id = (UInt32Value)(UInt32)rb, Max = (UInt32Value)(UInt32)xlWorksheet.LastRow().RowNumber, ManualPageBreak = true }; rowBreaks.Append(break1); } @@ -959,7 +959,7 @@ columnBreaks = new ColumnBreaks() { Count = (UInt32Value)(UInt32)columnBreakCount, ManualBreakCount = (UInt32Value)(UInt32)columnBreakCount }; foreach (var cb in xlWorksheet.PageSetup.ColumnBreaks) { - Break break1 = new Break() { Id = (UInt32Value)(UInt32)cb.ColumnNumber, Max = (UInt32Value)(UInt32)cb.RowCount(), ManualPageBreak = true }; + Break break1 = new Break() { Id = (UInt32Value)(UInt32)cb, Max = (UInt32Value)(UInt32)xlWorksheet.LastColumn().ColumnNumber, ManualPageBreak = true }; columnBreaks.Append(break1); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index a3b26c1..e5a0e90 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -22,11 +22,10 @@ RowNumber = 1; ColumnNumber = 1; ColumnLetter = "A"; - PageSetup = new XLPageOptions(XLWorkbook.DefaultPrintOptions); + PageSetup = new XLPageOptions(XLWorkbook.DefaultPageOptions, this); this.Name = sheetName; } - //private IXLColumns xlColumns = new XLColumns(); public IXLWorksheetInternals Internals { get; private set; } @@ -103,9 +102,9 @@ return retVal; } - public List Rows() + public IXLRows Rows() { - var retVal = new List(); + var retVal = new XLRows(); var rowList = new List(); if (Internals.CellsCollection.Count > 0) @@ -121,22 +120,35 @@ return retVal; } - public List Rows(String rows) + public IXLRows Rows(String rows) { - var retVal = new List(); + var retVal = new XLRows(); var rowPairs = rows.Split(','); foreach (var pair in rowPairs) { - var rowRange = pair.Split(':'); - var firstRow = rowRange[0]; - var lastRow = rowRange[1]; - retVal.AddRange(Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))); + String firstRow; + String lastRow; + if (pair.Contains(':')) + { + var rowRange = pair.Split(':'); + firstRow = rowRange[0]; + lastRow = rowRange[1]; + } + else + { + firstRow = pair; + lastRow = pair; + } + foreach (var row in Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) + { + retVal.Add(row); + } } return retVal; } - public List Rows(Int32 firstRow, Int32 lastRow) + public IXLRows Rows(Int32 firstRow, Int32 lastRow) { - var retVal = new List(); + var retVal = new XLRows(); for (var ro = firstRow; ro <= lastRow; ro++) { diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Columns/ColumnCollections.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Columns/ColumnCollections.cs index d12c083..0caa4e3 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Columns/ColumnCollections.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Columns/ColumnCollections.cs @@ -48,18 +48,36 @@ public void Create(String filePath) { var workbook = new XLWorkbook(); - var ws = workbook.Worksheets.Add("Column Collection"); + var ws = workbook.Worksheets.Add("Columns of a Range"); // All columns in a range - ws.Range("B2:C3").Columns().ForEach(c => c.Style.Fill.BackgroundColor = Color.Red); + ws.Range("A1:B2").Columns().Style.Fill.BackgroundColor = Color.DimGray; - // Let's add a separate cell to the worksheet - ws.Cell("E1").Value = "Wide 2"; + var bigRange = ws.Range("A4:V6"); + + // Contiguous columns by number + bigRange.Columns(1, 2).Style.Fill.BackgroundColor = Color.Red; + + // Contiguous columns by letter + bigRange.Columns("D", "E").Style.Fill.BackgroundColor = Color.Blue; + + // Contiguous columns by letter + bigRange.Columns("G:H").Style.Fill.BackgroundColor = Color.DeepPink; + + // Spread columns by number + bigRange.Columns("10:11,13:14").Style.Fill.BackgroundColor = Color.Orange; + + // Spread columns by letter + bigRange.Columns("P:Q,S:T").Style.Fill.BackgroundColor = Color.Turquoise; + + // Use a single number/letter + bigRange.Columns("V").Style.Fill.BackgroundColor = Color.Cyan; // Only the used columns in a worksheet - ws.Columns().Width = 20; + ws.Columns("A:V").Width = 3; - var ws2 = workbook.Worksheets.Add("Multiple Columns"); + + var ws2 = workbook.Worksheets.Add("Columns of a worksheet"); // Contiguous columns by number ws2.Columns(1, 2).Style.Fill.BackgroundColor = Color.Red; diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/SheetTab.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/SheetTab.cs index 873b228..6ebdaec 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/SheetTab.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/SheetTab.cs @@ -19,14 +19,14 @@ var ws = workbook.Worksheets.Add("Sheet Tab"); // Adding print areas - ws.PageSetup.PrintAreas.Add(ws.Range("A1:B2")); - ws.PageSetup.PrintAreas.Add(ws.Range("D3:D5")); + ws.PageSetup.PrintAreas.Add("A1:B2"); + ws.PageSetup.PrintAreas.Add("D3:D5"); // Adding rows to repeat at top - ws.PageSetup.SetRowTitles(ws.Rows(1, 2)); + ws.PageSetup.SetRowsToRepeatAtTop(1,2); // Adding columns to repeat at left - //ws.PageSetup.SetColumnTitles(ws.Columns(1, 2)); + ws.PageSetup.SetColumnsToRepeatAtLeft(1, 2); // Show gridlines ws.PageSetup.ShowGridlines = true; diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/Sheets.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/Sheets.cs index fa17e40..9a5a985 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/Sheets.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/PageSetup/Sheets.cs @@ -17,13 +17,13 @@ { var workbook = new XLWorkbook(); var ws1 = workbook.Worksheets.Add("Separate PrintAreas"); - ws1.PageSetup.PrintAreas.Add(ws1.Range("A1:B2")); - ws1.PageSetup.PrintAreas.Add(ws1.Range("D3:D5")); + ws1.PageSetup.PrintAreas.Add("A1:B2"); + ws1.PageSetup.PrintAreas.Add("D3:D5"); var ws2 = workbook.Worksheets.Add("Page Breaks"); - ws2.PageSetup.PrintAreas.Add(ws2.Range("A1:D5")); - ws2.PageSetup.AddPageBreak(ws2.Row(2)); - ws2.PageSetup.AddPageBreak(ws2.Column(2)); + ws2.PageSetup.PrintAreas.Add("A1:D5"); + ws2.PageSetup.AddHorizontalPageBreak(2); + ws2.PageSetup.AddVerticalPageBreak(2); workbook.SaveAs(filePath); } diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/RowCollections.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/RowCollections.cs index 85958b8..0f88b95 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/RowCollections.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Rows/RowCollections.cs @@ -48,27 +48,43 @@ public void Create(String filePath) { var workbook = new XLWorkbook(); - var ws = workbook.Worksheets.Add("Row Collection"); + var ws = workbook.Worksheets.Add("Rows of a Range"); // All rows in a range - ws.Range("B2:C3").Rows().ForEach(r => r.Style.Fill.BackgroundColor = Color.Red); + ws.Range("A1:B2").Rows().Style.Fill.BackgroundColor = Color.DimGray; - // Let's add a separate cell to the worksheet - ws.Cell("B5").Value = "Tall 2"; - - // Only the used rows in a worksheet - ws.Rows().ForEach(r => r.Height = 30); - - var ws2 = workbook.Worksheets.Add("Multiple Rows"); + var bigRange = ws.Range("B4:C17"); // Contiguous rows by number - ws2.Rows(1, 2).ForEach(r => r.Style.Fill.BackgroundColor = Color.Red); + bigRange.Rows(1, 2).Style.Fill.BackgroundColor = Color.Red; // Contiguous rows by number - ws2.Rows("4:5").ForEach(r => r.Style.Fill.BackgroundColor = Color.Blue); + bigRange.Rows("4:5").Style.Fill.BackgroundColor = Color.Blue; // Spread rows by number - ws2.Rows("7:8,10:11").ForEach(r => r.Style.Fill.BackgroundColor = Color.Orange); + bigRange.Rows("7:8,10:11").Style.Fill.BackgroundColor = Color.Orange; + + // Using a single number + bigRange.Rows("13").Style.Fill.BackgroundColor = Color.Cyan; + + // Only the used rows in a worksheet + ws.Rows().Height = 15; + + var ws2 = workbook.Worksheets.Add("Rows of a Worksheet"); + + // Contiguous rows by number + ws2.Rows(1, 2).Style.Fill.BackgroundColor = Color.Red; + + // Contiguous rows by number + ws2.Rows("4:5").Style.Fill.BackgroundColor = Color.Blue; + + // Spread rows by number + ws2.Rows("7:8,10:11").Style.Fill.BackgroundColor = Color.Orange; + + // Using a single number + ws2.Rows("13").Style.Fill.BackgroundColor = Color.Cyan; + + ws2.Rows("1:13").Height = 15; workbook.SaveAs(filePath); } diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index 06f96d0..4dd9c78 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -14,40 +14,11 @@ { var wb = new XLWorkbook(); var ws = wb.Worksheets.Add("Print Areas"); - ws.PageSetup.PrintAreas.Add(ws.Range("A1:B2")); - ws.PageSetup.PrintAreas.Add(ws.Range("D4:E5")); - ws.PageSetup.PageOrientation = XLPageOrientation.Landscape; - ws.PageSetup.AdjustTo(85); - var ws2 = wb.Worksheets.Add("Sheet2"); - ws2.PageSetup.PrintAreas.Add(ws2.Range("B2:E5")); - ws2.PageSetup.PageOrientation = XLPageOrientation.Portrait; - ws2.PageSetup.PagesWide = 1; - ws2.PageSetup.PagesTall = 2; - ws2.PageSetup.PaperSize = XLPaperSize.MonarchEnvelope; - ws2.PageSetup.HorizontalDpi = 600; - ws2.PageSetup.VerticalDpi = 600; - ws2.PageSetup.FirstPageNumber = 6; - ws2.PageSetup.CenterHorizontally = true; - ws2.PageSetup.CenterVertically = true; - ws2.PageSetup.Margins.Top = 1.5; - - var headerFont = new XLFont() { Bold = true }; - ws2.PageSetup.Header.Left.AddText("Test", XLHFOccurrence.OddPages, headerFont); - ws2.PageSetup.Header.Left.AddText("Test", XLHFOccurrence.EvenPages, headerFont); - ws2.PageSetup.Header.Left.AddText("Test", XLHFOccurrence.FirstPage, headerFont); - ws2.PageSetup.Header.Left.AddText("Test", XLHFOccurrence.AllPages, headerFont); - ws2.PageSetup.Header.Left.Clear(); - - ws2.PageSetup.Footer.Center.AddText(XLHFPredefinedText.SheetName, XLHFOccurrence.AllPages, headerFont); - ws2.PageSetup.DraftQuality = true; - ws2.PageSetup.BlackAndWhite = true; - ws2.PageSetup.PageOrder = XLPageOrderValues.OverThenDown; - ws2.PageSetup.ShowComments = XLShowCommentsValues.AtEnd; - ws2.PageSetup.PrintAreas.Add(ws2.Range("H10:H20")); - ws2.PageSetup.RowTitles.Add(ws2.Row(1)); - - + // Column Collection examples + // Row Collection examples + // Sheets examples + // SheetTab examples // Add List Ranges(...) to IXLRandge