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