diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 0e5480a..ec16788 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -10,108 +10,133 @@ { internal partial class XLCell : IXLCell, IXLStylized { - public static readonly DateTime baseDate = new DateTime(1899, 12, 30); - public IXLWorksheet Worksheet { get { return worksheet; } } - public XLWorksheet worksheet; - public XLCell(XLWorksheet worksheet, IXLAddress address, IXLStyle defaultStyle) + public static readonly DateTime BaseDate = new DateTime(1899, 12, 30); + #region Private fields + private readonly XLWorksheet m_worksheet; + private XLRichString m_richText; + private XLHyperlink m_hyperlink; + #endregion + #region Constructor + public XLCell(XLWorksheet worksheet, XLAddress address, IXLStyle defaultStyle) { - this.Address = address; - this.ShareString = true; + Address = address; + ShareString = true; - if (defaultStyle == null) - style = new XLStyle(this, worksheet.Style); + if (defaultStyle == null) + { + m_style = new XLStyle(this, worksheet.Style); + } else - style = new XLStyle(this, defaultStyle); + { + m_style = new XLStyle(this, defaultStyle); + } - this.worksheet = worksheet; + m_worksheet = worksheet; + } + #endregion + IXLWorksheet IXLCell.Worksheet + { + get { return Worksheet; } + } + public XLWorksheet Worksheet + { + get { return m_worksheet; } } - public IXLAddress Address { get; internal set; } + IXLAddress IXLCell.Address + { + get { return Address; } + } + public XLAddress Address { get; internal set; } public String InnerText { - get - { - if (StringExtensions.IsNullOrWhiteSpace(cellValue)) - return FormulaA1; - else - return cellValue; - } + get { return StringExtensions.IsNullOrWhiteSpace(m_cellValue) ? FormulaA1 : m_cellValue; } } public IXLRange AsRange() { - return worksheet.Range(Address, Address); + return m_worksheet.Range(Address, Address); } public IXLCell SetValue(T value) { FormulaA1 = String.Empty; - richText = null; + m_richText = null; if (value is String) { - cellValue = value.ToString(); - dataType = XLCellValues.Text; - if (cellValue.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + m_cellValue = value.ToString(); + m_dataType = XLCellValues.Text; + if (m_cellValue.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + { Style.Alignment.WrapText = true; + } } else if (value is TimeSpan) { - cellValue = value.ToString(); - dataType = XLCellValues.TimeSpan; + m_cellValue = value.ToString(); + m_dataType = XLCellValues.TimeSpan; Style.NumberFormat.NumberFormatId = 46; } else if (value is DateTime) { - dataType = XLCellValues.DateTime; - DateTime dtTest = (DateTime)Convert.ChangeType(value, typeof(DateTime)); + m_dataType = XLCellValues.DateTime; + DateTime dtTest = (DateTime) Convert.ChangeType(value, typeof (DateTime)); if (dtTest.Date == dtTest) + { Style.NumberFormat.NumberFormatId = 14; + } else + { Style.NumberFormat.NumberFormatId = 22; + } - cellValue = dtTest.ToOADate().ToString(); + m_cellValue = dtTest.ToOADate().ToString(); } else if ( - value is sbyte - || value is byte - || value is char - || value is short - || value is ushort - || value is int - || value is uint - || value is long - || value is ulong - || value is float - || value is double - || value is decimal - ) + value is sbyte + || value is byte + || value is char + || value is short + || value is ushort + || value is int + || value is uint + || value is long + || value is ulong + || value is float + || value is double + || value is decimal + ) { - dataType = XLCellValues.Number; - cellValue = value.ToString(); + m_dataType = XLCellValues.Number; + m_cellValue = value.ToString(); } else if (value is Boolean) { - dataType = XLCellValues.Boolean; - cellValue = (Boolean)Convert.ChangeType(value, typeof(Boolean)) ? "1" : "0"; + m_dataType = XLCellValues.Boolean; + m_cellValue = (Boolean) Convert.ChangeType(value, typeof (Boolean)) ? "1" : "0"; } else { - cellValue = value.ToString(); - dataType = XLCellValues.Text; + m_cellValue = value.ToString(); + m_dataType = XLCellValues.Text; } return this; } - public T GetValue() + public T GetValue() { if (!StringExtensions.IsNullOrWhiteSpace(FormulaA1)) - return (T)Convert.ChangeType(String.Empty, typeof(T)); - else if (Value is TimeSpan) - if (typeof(T) == typeof(String)) - return (T)Convert.ChangeType(Value.ToString(), typeof(T)); - else - return (T)Value; - else - return (T)Convert.ChangeType(Value, typeof(T)); + { + return (T) Convert.ChangeType(String.Empty, typeof (T)); + } + if (Value is TimeSpan) + { + if (typeof (T) == typeof (String)) + { + return (T) Convert.ChangeType(Value.ToString(), typeof (T)); + } + return (T) Value; + } + return (T) Convert.ChangeType(Value, typeof (T)); } public String GetString() { @@ -137,19 +162,23 @@ { String cValue; if (StringExtensions.IsNullOrWhiteSpace(FormulaA1)) - cValue = cellValue; + { + cValue = m_cellValue; + } else + { cValue = GetString(); + } - if (dataType == XLCellValues.Boolean) + if (m_dataType == XLCellValues.Boolean) { return (cValue != "0").ToString(); } - else if (dataType == XLCellValues.TimeSpan) + if (m_dataType == XLCellValues.TimeSpan) { return cValue; } - else if (dataType == XLCellValues.DateTime || IsDateFormat()) + if (m_dataType == XLCellValues.DateTime || IsDateFormat()) { Double dTest; if (Double.TryParse(cValue, out dTest)) @@ -157,12 +186,9 @@ String format = GetFormat(); return DateTime.FromOADate(dTest).ToString(format); } - else - { - return cValue; - } + return cValue; } - else if (dataType == XLCellValues.Number) + if (m_dataType == XLCellValues.Number) { Double dTest; if (Double.TryParse(cValue, out dTest)) @@ -170,25 +196,19 @@ String format = GetFormat(); return dTest.ToString(format); } - else - { - return cValue; - } - } - else - { return cValue; } + return cValue; } private bool IsDateFormat() { - return (dataType == XLCellValues.Number - && StringExtensions.IsNullOrWhiteSpace(Style.NumberFormat.Format) - && ((Style.NumberFormat.NumberFormatId >= 14 - && Style.NumberFormat.NumberFormatId <= 22) - || (Style.NumberFormat.NumberFormatId >= 45 - && Style.NumberFormat.NumberFormatId <= 47))); + return (m_dataType == XLCellValues.Number + && StringExtensions.IsNullOrWhiteSpace(Style.NumberFormat.Format) + && ((Style.NumberFormat.NumberFormatId >= 14 + && Style.NumberFormat.NumberFormatId <= 22) + || (Style.NumberFormat.NumberFormatId >= 45 + && Style.NumberFormat.NumberFormatId <= 47))); } private String GetFormat() @@ -206,7 +226,7 @@ return format; } - internal String cellValue = String.Empty; + internal String m_cellValue = String.Empty; public Object Value { get @@ -215,7 +235,9 @@ if (!StringExtensions.IsNullOrWhiteSpace(fA1)) { if (fA1[0] == '{') + { fA1 = fA1.Substring(1, fA1.Length - 2); + } String sName; String cAddress; @@ -223,7 +245,9 @@ { sName = fA1.Substring(0, fA1.IndexOf('!')); if (sName[0] == '\'') + { sName = sName.Substring(1, sName.Length - 2); + } cAddress = fA1.Substring(fA1.IndexOf('!') + 1); } @@ -233,53 +257,56 @@ cAddress = fA1; } - - if (worksheet.Internals.Workbook.Worksheets.Any(w => w.Name.ToLower().Equals(sName.ToLower())) + if (m_worksheet.Internals.Workbook.WorksheetsInternal.Any(w => w.Name.ToLower().Equals(sName.ToLower())) && XLAddress.IsValidA1Address(cAddress) - ) + ) { - return worksheet.Internals.Workbook.Worksheet(sName).Cell(cAddress).Value; + return m_worksheet.Internals.Workbook.Worksheet(sName).Cell(cAddress).Value; } - else - { - return fA1; - } + return fA1; + } + if (m_dataType == XLCellValues.Boolean) + { + return m_cellValue != "0"; + } + else if (m_dataType == XLCellValues.DateTime) + { + return DateTime.FromOADate(Double.Parse(m_cellValue)); + } + else if (m_dataType == XLCellValues.Number) + { + return Double.Parse(m_cellValue); + } + else if (m_dataType == XLCellValues.TimeSpan) + { + //return (DateTime.FromOADate(Double.Parse(cellValue)) - baseDate); + return TimeSpan.Parse(m_cellValue); } else { - if (dataType == XLCellValues.Boolean) + if (m_richText == null) { - return cellValue != "0"; - } - else if (dataType == XLCellValues.DateTime) - { - return DateTime.FromOADate(Double.Parse(cellValue)); - } - else if (dataType == XLCellValues.Number) - { - return Double.Parse(cellValue); - } - else if (dataType == XLCellValues.TimeSpan) - { - //return (DateTime.FromOADate(Double.Parse(cellValue)) - baseDate); - return TimeSpan.Parse(cellValue); + return m_cellValue; } else { - if (richText == null) - return cellValue; - else - return richText.ToString(); + return m_richText.ToString(); } } } set - { + { FormulaA1 = String.Empty; if (!SetEnumerable(value)) + { if (!SetRange(value)) + { if (!SetRichText(value)) + { SetValue(value); + } + } + } } } @@ -292,11 +319,10 @@ } else { - richText = asRichString; - dataType = XLCellValues.Text; + m_richText = asRichString; + m_dataType = XLCellValues.Text; return true; } - } private Boolean SetRange(Object rangeObject) @@ -306,7 +332,9 @@ { var tmp = rangeObject as XLCell; if (tmp != null) + { asRange = tmp.AsRange() as XLRangeBase; + } } if (asRange != null) @@ -327,27 +355,32 @@ { maxRows = asRange.RowCount(); maxColumns = asRange.ColumnCount(); - worksheet.Range(Address.RowNumber, Address.ColumnNumber, maxRows, maxColumns).Clear(); + m_worksheet.Range(Address.RowNumber, Address.ColumnNumber, maxRows, maxColumns).Clear(); } - + for (var ro = 1; ro <= maxRows; ro++) { for (var co = 1; co <= maxColumns; co++) { - var sourceCell = (XLCell)asRange.Cell(ro, co); - var targetCell = (XLCell)worksheet.Cell(Address.RowNumber + ro - 1, Address.ColumnNumber + co - 1); + var sourceCell = asRange.Cell(ro, co); + var targetCell = m_worksheet.Cell(Address.RowNumber + ro - 1, Address.ColumnNumber + co - 1); targetCell.CopyFrom(sourceCell); //targetCell.Style = sourceCell.style; } } var rangesToMerge = new List(); - foreach (var mergedRange in (asRange.Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var mergedRange in (asRange.Worksheet).Internals.MergedRanges) { if (asRange.Contains(mergedRange)) { - var initialRo = Address.RowNumber + (mergedRange.RangeAddress.FirstAddress.RowNumber - asRange.RangeAddress.FirstAddress.RowNumber); - var initialCo = Address.ColumnNumber + (mergedRange.RangeAddress.FirstAddress.ColumnNumber - asRange.RangeAddress.FirstAddress.ColumnNumber); - rangesToMerge.Add(worksheet.Range(initialRo, initialCo, initialRo + mergedRange.RowCount() - 1, initialCo + mergedRange.ColumnCount() - 1)); + var initialRo = Address.RowNumber + + (mergedRange.RangeAddress.FirstAddress.RowNumber - asRange.RangeAddress.FirstAddress.RowNumber); + var initialCo = Address.ColumnNumber + + (mergedRange.RangeAddress.FirstAddress.ColumnNumber - asRange.RangeAddress.FirstAddress.ColumnNumber); + rangesToMerge.Add(m_worksheet.Range(initialRo, + initialCo, + initialRo + mergedRange.RowCount() - 1, + initialCo + mergedRange.ColumnCount() - 1)); } } rangesToMerge.ForEach(r => r.Merge()); @@ -358,7 +391,6 @@ { return false; } - } private Boolean SetEnumerable(Object collectionObject) @@ -381,7 +413,7 @@ } public IXLTable InsertTable(IEnumerable data, String tableName, Boolean createTable) { - if (data != null && data.GetType() != typeof(String)) + if (data != null && data.GetType() != typeof (String)) { Int32 co; Int32 ro = Address.RowNumber + 1; @@ -393,12 +425,15 @@ { co = Address.ColumnNumber; - if (m.GetType().IsPrimitive || m.GetType() == typeof(String) || m.GetType() == typeof(DateTime)) + if (m.GetType().IsPrimitive || m.GetType() == typeof (String) || m.GetType() == typeof (DateTime)) { if (!hasTitles) { String fieldName = GetFieldName(m.GetType().GetCustomAttributes(true)); - if (StringExtensions.IsNullOrWhiteSpace(fieldName)) fieldName = m.GetType().Name; + if (StringExtensions.IsNullOrWhiteSpace(fieldName)) + { + fieldName = m.GetType().Name; + } SetValue(fieldName, fRo, co); hasTitles = true; @@ -409,7 +444,7 @@ } else if (m.GetType().IsArray) { - foreach (var item in (Array)m) + foreach (var item in (Array) m) { SetValue(item, ro, co); co++; @@ -417,7 +452,10 @@ } else if (isDataTable || (m as DataRow) != null) { - if (!isDataTable) isDataTable = true; + if (!isDataTable) + { + isDataTable = true; + } if (!hasTitles) { foreach (DataColumn column in (m as DataRow).Table.Columns) @@ -447,19 +485,25 @@ if ((info as IEnumerable) == null) { String fieldName = GetFieldName(info.GetCustomAttributes(true)); - if (StringExtensions.IsNullOrWhiteSpace(fieldName)) fieldName = info.Name; + if (StringExtensions.IsNullOrWhiteSpace(fieldName)) + { + fieldName = info.Name; + } SetValue(fieldName, fRo, co); } co++; } - + foreach (var info in propertyInfo) { if ((info as IEnumerable) == null) { String fieldName = GetFieldName(info.GetCustomAttributes(true)); - if (StringExtensions.IsNullOrWhiteSpace(fieldName)) fieldName = info.Name; + if (StringExtensions.IsNullOrWhiteSpace(fieldName)) + { + fieldName = info.Name; + } SetValue(fieldName, fRo, co); } @@ -478,36 +522,48 @@ foreach (var info in propertyInfo) { if ((info as IEnumerable) == null) + { SetValue(info.GetValue(m, null), ro, co); + } co++; } } if (co > maxCo) + { maxCo = co; + } ro++; } ClearMerged(ro - 1, maxCo - 1); - var range = worksheet.Range( - Address.RowNumber, - Address.ColumnNumber, - ro - 1, - maxCo - 1); + var range = m_worksheet.Range( + Address.RowNumber, + Address.ColumnNumber, + ro - 1, + maxCo - 1); if (createTable) { if (tableName == null) + { return range.CreateTable(); + } else + { return range.CreateTable(tableName); + } } else { if (tableName == null) + { return range.AsTable(); + } else + { return range.AsTable(tableName); + } } } else @@ -518,7 +574,7 @@ public IXLRange InsertData(IEnumerable data) { - if (data != null && data.GetType() != typeof(String)) + if (data != null && data.GetType() != typeof (String)) { Int32 ro = Address.RowNumber; Int32 maxCo = 0; @@ -526,14 +582,14 @@ { Int32 co = Address.ColumnNumber; - if (m.GetType().IsPrimitive || m.GetType() == typeof(String) || m.GetType() == typeof(DateTime)) + if (m.GetType().IsPrimitive || m.GetType() == typeof (String) || m.GetType() == typeof (DateTime)) { SetValue(m, ro, co); } else if (m.GetType().IsArray) { //dynamic arr = m; - foreach (var item in (Array)m) + foreach (var item in (Array) m) { SetValue(item, ro, co); co++; @@ -559,22 +615,26 @@ foreach (var info in propertyInfo) { if ((info as IEnumerable) == null) + { SetValue(info.GetValue(m, null), ro, co); + } co++; } } if (co > maxCo) + { maxCo = co; + } ro++; } ClearMerged(ro - 1, maxCo - 1); - return worksheet.Range( - Address.RowNumber, - Address.ColumnNumber, - Address.RowNumber + ro - 1, - Address.ColumnNumber + maxCo - 1); + return m_worksheet.Range( + Address.RowNumber, + Address.ColumnNumber, + Address.RowNumber + ro - 1, + Address.ColumnNumber + maxCo - 1); } else { @@ -585,109 +645,120 @@ private void ClearMerged(Int32 rowCount, Int32 columnCount) { List mergeToDelete = new List(); - foreach (var merge in worksheet.Internals.MergedRanges) + foreach (var merge in m_worksheet.Internals.MergedRanges) { if (merge.Intersects(AsRange())) { mergeToDelete.Add(merge); } } - mergeToDelete.ForEach(m => worksheet.Internals.MergedRanges.Remove(m)); + mergeToDelete.ForEach(m => m_worksheet.Internals.MergedRanges.Remove(m)); } private void SetValue(object objWithValue, int ro, int co) { String str = String.Empty; if (objWithValue != null) + { str = objWithValue.ToString(); + } - worksheet.Cell(ro, co).Value = str; + m_worksheet.Cell(ro, co).Value = str; } private void SetValue(Object value) { FormulaA1 = String.Empty; String val = value.ToString(); - richText = null; + m_richText = null; if (val.Length > 0) { Double dTest; DateTime dtTest; Boolean bTest; TimeSpan tsTest; - if (style.NumberFormat.Format == "@") + if (m_style.NumberFormat.Format == "@") { - dataType = XLCellValues.Text; + m_dataType = XLCellValues.Text; if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + { Style.Alignment.WrapText = true; + } } else if (val[0] == '\'') { val = val.Substring(1, val.Length - 1); - dataType = XLCellValues.Text; + m_dataType = XLCellValues.Text; if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + { Style.Alignment.WrapText = true; + } } else if (value is TimeSpan || (TimeSpan.TryParse(val, out tsTest) && !Double.TryParse(val, out dTest))) { - dataType = XLCellValues.TimeSpan; + m_dataType = XLCellValues.TimeSpan; if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) + { Style.NumberFormat.NumberFormatId = 46; + } } else if (Double.TryParse(val, out dTest)) { - dataType = XLCellValues.Number; + m_dataType = XLCellValues.Number; } else if (DateTime.TryParse(val, out dtTest)) { - dataType = XLCellValues.DateTime; + m_dataType = XLCellValues.DateTime; if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) + { if (dtTest.Date == dtTest) + { Style.NumberFormat.NumberFormatId = 14; + } else + { Style.NumberFormat.NumberFormatId = 22; + } + } val = dtTest.ToOADate().ToString(); } else if (Boolean.TryParse(val, out bTest)) { - dataType = XLCellValues.Boolean; + m_dataType = XLCellValues.Boolean; val = bTest ? "1" : "0"; } else { - dataType = XLCellValues.Text; + m_dataType = XLCellValues.Text; if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + { Style.Alignment.WrapText = true; + } } } - cellValue = val; + m_cellValue = val; } - #region IXLStylized Members - - private Boolean initialStyle = true; + private Boolean m_initialStyle = true; public void SetStyle(XLStyle style) { - this.style = style; + m_style = style; } - private IXLStyle style; + private IXLStyle m_style; public IXLStyle Style { get { - if (initialStyle) + if (m_initialStyle) { - style = new XLStyle(this, style); - initialStyle = false; + m_style = new XLStyle(this, m_style); + m_initialStyle = false; } - return style; + return m_style; } - set - { - style = new XLStyle(this, value); - } + set { m_style = new XLStyle(this, value); } } public IEnumerable Styles @@ -707,155 +778,175 @@ get { return Style; } set { Style = value; } } - #endregion - public IXLCell SetDataType(XLCellValues dataType) { DataType = dataType; return this; } - internal XLCellValues dataType; + internal XLCellValues m_dataType; public XLCellValues DataType { - get - { - return dataType; - } + get { return m_dataType; } set { - if (dataType != value) + if (m_dataType != value) { - if (richText != null) + if (m_richText != null) { - cellValue = richText.ToString(); - richText = null; + m_cellValue = m_richText.ToString(); + m_richText = null; } - - if (cellValue.Length > 0) + + if (m_cellValue.Length > 0) { if (value == XLCellValues.Boolean) { Boolean bTest; - if (Boolean.TryParse(cellValue, out bTest)) - cellValue = bTest ? "1" : "0"; + if (Boolean.TryParse(m_cellValue, out bTest)) + { + m_cellValue = bTest ? "1" : "0"; + } else - cellValue = cellValue == "0" || String.IsNullOrEmpty(cellValue) ? "0" : "1"; + { + m_cellValue = m_cellValue == "0" || String.IsNullOrEmpty(m_cellValue) ? "0" : "1"; + } } else if (value == XLCellValues.DateTime) { DateTime dtTest; Double dblTest; - if (DateTime.TryParse(cellValue, out dtTest)) + if (DateTime.TryParse(m_cellValue, out dtTest)) { - cellValue = dtTest.ToOADate().ToString(); + m_cellValue = dtTest.ToOADate().ToString(); } - else if (Double.TryParse(cellValue, out dblTest)) + else if (Double.TryParse(m_cellValue, out dblTest)) { - cellValue = dblTest.ToString(); + m_cellValue = dblTest.ToString(); } else { - throw new ArgumentException("Cannot set data type to DateTime because '" + cellValue + "' is not recognized as a date."); + throw new ArgumentException("Cannot set data type to DateTime because '" + m_cellValue + + "' is not recognized as a date."); } if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) - if (cellValue.Contains('.')) + { + if (m_cellValue.Contains('.')) + { Style.NumberFormat.NumberFormatId = 22; + } else + { Style.NumberFormat.NumberFormatId = 14; + } + } } else if (value == XLCellValues.TimeSpan) { TimeSpan tsTest; - if (TimeSpan.TryParse(cellValue, out tsTest)) + if (TimeSpan.TryParse(m_cellValue, out tsTest)) { - cellValue = tsTest.ToString(); + m_cellValue = tsTest.ToString(); if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) + { Style.NumberFormat.NumberFormatId = 46; + } } else { try { - cellValue = (DateTime.FromOADate(Double.Parse(cellValue)) - baseDate).ToString(); + m_cellValue = (DateTime.FromOADate(Double.Parse(m_cellValue)) - BaseDate).ToString(); } catch { - throw new ArgumentException("Cannot set data type to TimeSpan because '" + cellValue + "' is not recognized as a TimeSpan."); + throw new ArgumentException("Cannot set data type to TimeSpan because '" + m_cellValue + + "' is not recognized as a TimeSpan."); } } } else if (value == XLCellValues.Number) { Double dTest; - if (Double.TryParse(cellValue, out dTest)) + if (Double.TryParse(m_cellValue, out dTest)) { - cellValue = Double.Parse(cellValue).ToString(); + m_cellValue = Double.Parse(m_cellValue).ToString(); } else { - throw new ArgumentException("Cannot set data type to Number because '" + cellValue + "' is not recognized as a number."); + throw new ArgumentException("Cannot set data type to Number because '" + m_cellValue + + "' is not recognized as a number."); } } else { var formatCodes = GetFormatCodes(); - if (dataType == XLCellValues.Boolean) + if (m_dataType == XLCellValues.Boolean) { - cellValue = (cellValue != "0").ToString(); + m_cellValue = (m_cellValue != "0").ToString(); } - else if (dataType == XLCellValues.TimeSpan) + else if (m_dataType == XLCellValues.TimeSpan) { - cellValue = TimeSpan.Parse(cellValue).ToString(); + m_cellValue = TimeSpan.Parse(m_cellValue).ToString(); } - else if (dataType == XLCellValues.Number) + else if (m_dataType == XLCellValues.Number) { String format; if (Style.NumberFormat.NumberFormatId > 0) + { format = formatCodes[Style.NumberFormat.NumberFormatId]; + } else + { format = Style.NumberFormat.Format; + } if (!StringExtensions.IsNullOrWhiteSpace(format) && format != "@") - cellValue = Double.Parse(cellValue).ToString(format); + { + m_cellValue = Double.Parse(m_cellValue).ToString(format); + } } - else if (dataType == XLCellValues.DateTime) + else if (m_dataType == XLCellValues.DateTime) { String format; if (Style.NumberFormat.NumberFormatId > 0) + { format = formatCodes[Style.NumberFormat.NumberFormatId]; + } else + { format = Style.NumberFormat.Format; - cellValue = DateTime.FromOADate(Double.Parse(cellValue)).ToString(format); + } + m_cellValue = DateTime.FromOADate(Double.Parse(m_cellValue)).ToString(format); } } } - dataType = value; + m_dataType = value; } } } public void Clear() { - worksheet.Range(Address, Address).Clear(); + m_worksheet.Range(Address, Address).Clear(); } public void ClearStyles() { - var newStyle = new XLStyle(this, worksheet.Style); - newStyle.NumberFormat = this.Style.NumberFormat; - this.Style = newStyle; + var newStyle = new XLStyle(this, m_worksheet.Style); + newStyle.NumberFormat = Style.NumberFormat; + Style = newStyle; } public void Delete(XLShiftDeletedCells shiftDeleteCells) { - worksheet.Range(Address, Address).Delete(shiftDeleteCells); + m_worksheet.Range(Address, Address).Delete(shiftDeleteCells); } - private static Dictionary formatCodes; + private static Dictionary ms_formatCodes; private static Dictionary GetFormatCodes() { - if (formatCodes == null) + if (ms_formatCodes == null) { var fCodes = new Dictionary(); fCodes.Add(0, ""); @@ -886,53 +977,63 @@ fCodes.Add(47, "mmss.0"); fCodes.Add(48, "##0.0E+0"); fCodes.Add(49, "@"); - formatCodes = fCodes; + ms_formatCodes = fCodes; } - return formatCodes; + return ms_formatCodes; } - private String formulaA1; + private String m_formulaA1; public String FormulaA1 { - get + get { - if (StringExtensions.IsNullOrWhiteSpace(formulaA1)) + if (StringExtensions.IsNullOrWhiteSpace(m_formulaA1)) { - if (!StringExtensions.IsNullOrWhiteSpace(formulaR1C1)) + if (!StringExtensions.IsNullOrWhiteSpace(m_formulaR1C1)) { - formulaA1 = GetFormulaA1(formulaR1C1); + m_formulaA1 = GetFormulaA1(m_formulaR1C1); return FormulaA1; } else + { return String.Empty; + } } - else if (formulaA1.Trim()[0] == '=') - return formulaA1.Substring(1); - else if (formulaA1.Trim().StartsWith("{=")) - return "{" + formulaA1.Substring(2); + else if (m_formulaA1.Trim()[0] == '=') + { + return m_formulaA1.Substring(1); + } + else if (m_formulaA1.Trim().StartsWith("{=")) + { + return "{" + m_formulaA1.Substring(2); + } else - return formulaA1; + { + return m_formulaA1; + } } - set - { - formulaA1 = value; - formulaR1C1 = String.Empty; + set + { + m_formulaA1 = value; + m_formulaR1C1 = String.Empty; } } - private String formulaR1C1; + private String m_formulaR1C1; public String FormulaR1C1 { - get + get { - if (StringExtensions.IsNullOrWhiteSpace(formulaR1C1)) - formulaR1C1 = GetFormulaR1C1(FormulaA1); + if (StringExtensions.IsNullOrWhiteSpace(m_formulaR1C1)) + { + m_formulaR1C1 = GetFormulaR1C1(FormulaA1); + } - return formulaR1C1; + return m_formulaR1C1; } - set - { - formulaR1C1 = value; + set + { + m_formulaR1C1 = value; //FormulaA1 = GetFormulaA1(value); } } @@ -947,49 +1048,50 @@ return GetFormula(value, FormulaConversionType.R1C1toA1, 0, 0); } - private enum FormulaConversionType { A1toR1C1, R1C1toA1 }; - private static Regex a1Regex = new Regex( - @"(?<=\W)(\$?[a-zA-Z]{1,3}\$?\d{1,7})(?=\W)" // A1 - + @"|(?<=\W)(\d{1,7}:\d{1,7})(?=\W)" // 1:1 - + @"|(?<=\W)([a-zA-Z]{1,3}:[a-zA-Z]{1,3})(?=\W)"); // A:A - - private static Regex a1SimpleRegex = new Regex( - @"(?<=\W)" // Start with non word + private static readonly Regex a1Regex = new Regex( + @"(?<=\W)(\$?[a-zA-Z]{1,3}\$?\d{1,7})(?=\W)" // A1 + + @"|(?<=\W)(\d{1,7}:\d{1,7})(?=\W)" // 1:1 + + @"|(?<=\W)([a-zA-Z]{1,3}:[a-zA-Z]{1,3})(?=\W)"); // A:A + + private static readonly Regex a1SimpleRegex = new Regex( + @"(?<=\W)" // Start with non word + @"(" // Start Group to pick - + @"(" // Start Sheet Name, optional - + @"(" - + @"\'[^\[\]\*/\\\?:]+\'" // Sheet name with special characters, surrounding apostrophes are required - + @"|" - + @"\'?\w+\'?" // Sheet name with letters and numbers, surrounding apostrophes are optional - + @")" - + @"!)?" // End Sheet Name, optional - + @"(" // Start range - + @"\$?[a-zA-Z]{1,3}\$?\d{1,7}" // A1 Address 1 - + @"(:\$?[a-zA-Z]{1,3}\$?\d{1,7})?" // A1 Address 2, optional - + @"|" - + @"(\d{1,7}:\d{1,7})" // 1:1 - + @"|" - + @"([a-zA-Z]{1,3}:[a-zA-Z]{1,3})" // A:A - + @")" // End Range + + @"(" // Start Sheet Name, optional + + @"(" + + @"\'[^\[\]\*/\\\?:]+\'" // Sheet name with special characters, surrounding apostrophes are required + + @"|" + + @"\'?\w+\'?" // Sheet name with letters and numbers, surrounding apostrophes are optional + + @")" + + @"!)?" // End Sheet Name, optional + + @"(" // Start range + + @"\$?[a-zA-Z]{1,3}\$?\d{1,7}" // A1 Address 1 + + @"(:\$?[a-zA-Z]{1,3}\$?\d{1,7})?" // A1 Address 2, optional + + @"|" + + @"(\d{1,7}:\d{1,7})" // 1:1 + + @"|" + + @"([a-zA-Z]{1,3}:[a-zA-Z]{1,3})" // A:A + + @")" // End Range + @")" // End Group to pick - + @"(?=\W)" // End with non word - ); + + @"(?=\W)" // End with non word + ); - private static Regex a1RowRegex = new Regex( - @"(\d{1,7}:\d{1,7})" // 1:1 - ); - private static Regex a1ColumnRegex = new Regex( - @"([a-zA-Z]{1,3}:[a-zA-Z]{1,3})" // A:A - ); + private static readonly Regex a1RowRegex = new Regex( + @"(\d{1,7}:\d{1,7})" // 1:1 + ); + private static readonly Regex a1ColumnRegex = new Regex( + @"([a-zA-Z]{1,3}:[a-zA-Z]{1,3})" // A:A + ); - private static Regex r1c1Regex = new Regex( - @"(?<=\W)([Rr]\[?-?\d{0,7}\]?[Cc]\[?-?\d{0,7}\]?)(?=\W)" // R1C1 - + @"|(?<=\W)([Rr]\[?-?\d{0,7}\]?:[Rr]\[?-?\d{0,7}\]?)(?=\W)" // R:R - + @"|(?<=\W)([Cc]\[?-?\d{0,5}\]?:[Cc]\[?-?\d{0,5}\]?)(?=\W)"); // C:C + private static readonly Regex r1c1Regex = new Regex( + @"(?<=\W)([Rr]\[?-?\d{0,7}\]?[Cc]\[?-?\d{0,7}\]?)(?=\W)" // R1C1 + + @"|(?<=\W)([Rr]\[?-?\d{0,7}\]?:[Rr]\[?-?\d{0,7}\]?)(?=\W)" // R:R + + @"|(?<=\W)([Cc]\[?-?\d{0,5}\]?:[Cc]\[?-?\d{0,5}\]?)(?=\W)"); // C:C private String GetFormula(String strValue, FormulaConversionType conversionType, Int32 rowsToShift, Int32 columnsToShift) { if (StringExtensions.IsNullOrWhiteSpace(strValue)) + { return String.Empty; + } var value = ">" + strValue + "<"; @@ -1002,13 +1104,17 @@ { var matchString = match.Value; var matchIndex = match.Index; - if (value.Substring(0, matchIndex).CharCount('"') % 2 == 0) // Check if the match is in between quotes + if (value.Substring(0, matchIndex).CharCount('"')%2 == 0) // Check if the match is in between quotes { sb.Append(value.Substring(lastIndex, matchIndex - lastIndex)); if (conversionType == FormulaConversionType.A1toR1C1) + { sb.Append(GetR1C1Address(matchString, rowsToShift, columnsToShift)); + } else + { sb.Append(GetA1Address(matchString, rowsToShift, columnsToShift)); + } } else { @@ -1017,7 +1123,9 @@ lastIndex = matchIndex + matchString.Length; } if (lastIndex < value.Length) + { sb.Append(value.Substring(lastIndex)); + } var retVal = sb.ToString(); return retVal.Substring(1, retVal.Length - 2); @@ -1048,7 +1156,6 @@ } else { - var rowPart = addressToUse.Substring(0, addressToUse.IndexOf("C")); String rowToReturn = GetA1Row(rowPart, rowsToShift); @@ -1072,15 +1179,21 @@ var bIndex = columnPart.IndexOf("["); var mIndex = columnPart.IndexOf("-"); if (bIndex >= 0) + { columnToReturn = XLAddress.GetColumnLetterFromNumber( - Address.ColumnNumber + Int32.Parse(columnPart.Substring(bIndex + 1, columnPart.Length - bIndex - 2)) + columnsToShift - ); + Address.ColumnNumber + Int32.Parse(columnPart.Substring(bIndex + 1, columnPart.Length - bIndex - 2)) + columnsToShift + ); + } else if (mIndex >= 0) + { columnToReturn = XLAddress.GetColumnLetterFromNumber( - Address.ColumnNumber + Int32.Parse(columnPart.Substring(mIndex)) + columnsToShift - ); + Address.ColumnNumber + Int32.Parse(columnPart.Substring(mIndex)) + columnsToShift + ); + } else + { columnToReturn = "$" + XLAddress.GetColumnLetterFromNumber(Int32.Parse(columnPart.Substring(1)) + columnsToShift); + } } return columnToReturn; } @@ -1096,9 +1209,14 @@ { var bIndex = rowPart.IndexOf("["); if (bIndex >= 0) - rowToReturn = (Address.RowNumber + Int32.Parse(rowPart.Substring(bIndex + 1, rowPart.Length - bIndex - 2)) + rowsToShift).ToString(); + { + rowToReturn = + (Address.RowNumber + Int32.Parse(rowPart.Substring(bIndex + 1, rowPart.Length - bIndex - 2)) + rowsToShift).ToString(); + } else + { rowToReturn = "$" + (Int32.Parse(rowPart.Substring(1)) + rowsToShift).ToString(); + } } return rowToReturn; } @@ -1127,15 +1245,12 @@ return leftPart + ":" + rightPart; } } - else - { - var address = XLAddress.Create(worksheet, a1Address); + var address = XLAddress.Create(m_worksheet, a1Address); - String rowPart = GetR1C1Row(address.RowNumber, address.FixedRow, rowsToShift); - String columnPart = GetR1C1Column(address.ColumnNumber, address.FixedRow, columnsToShift); + String rowPart = GetR1C1Row(address.RowNumber, address.FixedRow, rowsToShift); + String columnPart = GetR1C1Column(address.ColumnNumber, address.FixedRow, columnsToShift); - return rowPart + columnPart; - } + return rowPart + columnPart; } private String GetR1C1Row(Int32 rowNumber, Boolean fixedRow, Int32 rowsToShift) @@ -1146,12 +1261,18 @@ if (rowDiff != 0 || fixedRow) { if (fixedRow) + { rowPart = String.Format("R{0}", rowNumber); + } else + { rowPart = String.Format("R[{0}]", rowDiff); + } } else + { rowPart = "R"; + } return rowPart; } @@ -1164,34 +1285,40 @@ if (columnDiff != 0 || fixedColumn) { if (fixedColumn) + { columnPart = String.Format("C{0}", columnNumber); + } else + { columnPart = String.Format("C[{0}]", columnDiff); + } } else + { columnPart = "C"; + } return columnPart; } internal void CopyValues(XLCell source) { - this.cellValue = source.cellValue; - this.dataType = source.dataType; - this.FormulaR1C1 = source.FormulaR1C1; - richText = source.richText; + m_cellValue = source.m_cellValue; + m_dataType = source.m_dataType; + FormulaR1C1 = source.FormulaR1C1; + m_richText = source.m_richText; } - public IXLCell CopyFrom(IXLCell otherCell) + public IXLCell CopyFrom(XLCell otherCell) { - var source = otherCell as XLCell; - cellValue = source.cellValue; - richText = source.richText; - dataType = source.dataType; + var source = otherCell; + m_cellValue = source.m_cellValue; + m_richText = source.m_richText; + m_dataType = source.m_dataType; FormulaR1C1 = source.FormulaR1C1; - style = new XLStyle(this, source.style); - - if (source.hyperlink != null) + m_style = new XLStyle(this, source.m_style); + + if (source.m_hyperlink != null) { SettingHyperlink = true; Hyperlink = new XLHyperlink(source.Hyperlink); @@ -1200,8 +1327,10 @@ var asRange = source.AsRange(); if (source.Worksheet.DataValidations.Any(dv => dv.Ranges.Contains(asRange))) + { (DataValidation as XLDataValidation).CopyFrom(source.DataValidation); - + } + return this; } @@ -1213,12 +1342,11 @@ // FormulaA1 = GetFormula(formulaR1C1, FormulaConversionType.R1C1toA1, rowsToShift, columnsToShift); //} - internal void ShiftFormulaRows(XLRange shiftedRange, int rowsShifted) { if (!StringExtensions.IsNullOrWhiteSpace(FormulaA1)) { - var value = ">" + formulaA1 + "<"; + var value = ">" + m_formulaA1 + "<"; Regex regex = a1SimpleRegex; @@ -1229,7 +1357,7 @@ { var matchString = match.Value; var matchIndex = match.Index; - if (value.Substring(0, matchIndex).CharCount('"') % 2 == 0) // Check that the match is not between quotes + if (value.Substring(0, matchIndex).CharCount('"')%2 == 0) // Check that the match is not between quotes { sb.Append(value.Substring(lastIndex, matchIndex - lastIndex)); String sheetName; @@ -1238,21 +1366,25 @@ { sheetName = matchString.Substring(0, matchString.IndexOf('!')); if (sheetName[0] == '\'') + { sheetName = sheetName.Substring(1, sheetName.Length - 2); + } useSheetName = true; } else - sheetName = worksheet.Name; + { + sheetName = m_worksheet.Name; + } if (sheetName.ToLower().Equals(shiftedRange.Worksheet.Name.ToLower())) { String rangeAddress = matchString.Substring(matchString.IndexOf('!') + 1); if (!a1ColumnRegex.IsMatch(rangeAddress)) { - IXLRange matchRange = worksheet.Internals.Workbook.Worksheet(sheetName).Range(rangeAddress); - if ( shiftedRange.RangeAddress.FirstAddress.RowNumber <= matchRange.RangeAddress.LastAddress.RowNumber - && shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= matchRange.RangeAddress.FirstAddress.ColumnNumber - && shiftedRange.RangeAddress.LastAddress.ColumnNumber >= matchRange.RangeAddress.LastAddress.ColumnNumber) + IXLRange matchRange = m_worksheet.Internals.Workbook.Worksheet(sheetName).Range(rangeAddress); + if (shiftedRange.RangeAddress.FirstAddress.RowNumber <= matchRange.RangeAddress.LastAddress.RowNumber + && shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= matchRange.RangeAddress.FirstAddress.ColumnNumber + && shiftedRange.RangeAddress.LastAddress.ColumnNumber >= matchRange.RangeAddress.LastAddress.ColumnNumber) { #region change if (a1RowRegex.IsMatch(rangeAddress)) @@ -1262,78 +1394,113 @@ String row2String = rows[1]; String row1; if (row1String[0] == '$') + { row1 = "$" + (Int32.Parse(row1String.Substring(1)) + rowsShifted).ToStringLookup(); + } else + { row1 = (Int32.Parse(row1String) + rowsShifted).ToStringLookup(); + } String row2; if (row2String[0] == '$') + { row2 = "$" + (Int32.Parse(row2String.Substring(1)) + rowsShifted).ToStringLookup(); + } else + { row2 = (Int32.Parse(row2String) + rowsShifted).ToStringLookup(); + } if (useSheetName) + { sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, row1, row2)); + } else - sb.Append(String.Format("{1}:{2}", row1, row2)); + { + sb.Append(String.Format("{0}:{1}", row1, row2)); + } } else if (shiftedRange.RangeAddress.FirstAddress.RowNumber <= matchRange.RangeAddress.FirstAddress.RowNumber) { if (rangeAddress.Contains(':')) { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.FirstAddress.ColumnLetter, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.LastAddress.ColumnLetter, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}:{2}", + sheetName, + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.FirstAddress.ColumnLetter, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn), + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.LastAddress.ColumnLetter, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}:{1}", - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.FirstAddress.ColumnLetter, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.LastAddress.ColumnLetter, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.FirstAddress.ColumnLetter, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn), + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.LastAddress.ColumnLetter, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } } else { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}", sheetName, - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.FirstAddress.ColumnLetter, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}", + sheetName, + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.FirstAddress.ColumnLetter, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}", - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.FirstAddress.ColumnLetter, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn))); + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.FirstAddress.ColumnLetter, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn))); + } } } else { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, - matchRange.RangeAddress.FirstAddress.ToString(), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.LastAddress.ColumnLetter, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}:{2}", + sheetName, + matchRange.RangeAddress.FirstAddress, + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.LastAddress.ColumnLetter, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}:{1}", - matchRange.RangeAddress.FirstAddress.ToString(), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, - matchRange.RangeAddress.LastAddress.ColumnLetter, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + matchRange.RangeAddress.FirstAddress, + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber + rowsShifted, + matchRange.RangeAddress.LastAddress.ColumnLetter, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } } #endregion } @@ -1359,11 +1526,13 @@ lastIndex = matchIndex + matchString.Length; } if (lastIndex < value.Length) + { sb.Append(value.Substring(lastIndex)); + } var retVal = sb.ToString(); - formulaA1 = retVal.Substring(1, retVal.Length - 2); + m_formulaA1 = retVal.Substring(1, retVal.Length - 2); } } @@ -1371,7 +1540,7 @@ { if (!StringExtensions.IsNullOrWhiteSpace(FormulaA1)) { - var value = ">" + formulaA1 + "<"; + var value = ">" + m_formulaA1 + "<"; Regex regex = a1SimpleRegex; @@ -1382,7 +1551,7 @@ { var matchString = match.Value; var matchIndex = match.Index; - if (value.Substring(0, matchIndex).CharCount('"') % 2 == 0) // Check that the match is not between quotes + if (value.Substring(0, matchIndex).CharCount('"')%2 == 0) // Check that the match is not between quotes { sb.Append(value.Substring(lastIndex, matchIndex - lastIndex)); String sheetName; @@ -1391,19 +1560,23 @@ { sheetName = matchString.Substring(0, matchString.IndexOf('!')); if (sheetName[0] == '\'') + { sheetName = sheetName.Substring(1, sheetName.Length - 2); + } useSheetName = true; } else - sheetName = worksheet.Name; + { + sheetName = m_worksheet.Name; + } if (sheetName.ToLower().Equals(shiftedRange.Worksheet.Name.ToLower())) { String rangeAddress = matchString.Substring(matchString.IndexOf('!') + 1); if (!a1RowRegex.IsMatch(rangeAddress)) { - IXLRange matchRange = worksheet.Internals.Workbook.Worksheet(sheetName).Range(rangeAddress); - if ( shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= matchRange.RangeAddress.LastAddress.ColumnNumber + IXLRange matchRange = m_worksheet.Internals.Workbook.Worksheet(sheetName).Range(rangeAddress); + if (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= matchRange.RangeAddress.LastAddress.ColumnNumber && shiftedRange.RangeAddress.FirstAddress.RowNumber <= matchRange.RangeAddress.FirstAddress.RowNumber && shiftedRange.RangeAddress.LastAddress.RowNumber >= matchRange.RangeAddress.LastAddress.RowNumber) { @@ -1415,78 +1588,127 @@ String column2String = columns[1]; String column1; if (column1String[0] == '$') - column1 = "$" + XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column1String.Substring(1)) + columnsShifted); + { + column1 = "$" + + XLAddress.GetColumnLetterFromNumber( + XLAddress.GetColumnNumberFromLetter(column1String.Substring(1)) + columnsShifted); + } else - column1 = XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column1String) + columnsShifted); + { + column1 = + XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column1String) + + columnsShifted); + } String column2; if (column2String[0] == '$') - column2 = "$" + XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column2String.Substring(1)) + columnsShifted); + { + column2 = "$" + + XLAddress.GetColumnLetterFromNumber( + XLAddress.GetColumnNumberFromLetter(column2String.Substring(1)) + columnsShifted); + } else - column2 = XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column2String) + columnsShifted); + { + column2 = + XLAddress.GetColumnLetterFromNumber(XLAddress.GetColumnNumberFromLetter(column2String) + + columnsShifted); + } if (useSheetName) + { sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, column1, column2)); + } else - sb.Append(String.Format("{1}:{2}", column1, column2)); + { + sb.Append(String.Format("{0}:{1}", column1, column2)); + } } else if (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= matchRange.RangeAddress.FirstAddress.ColumnNumber) { if (rangeAddress.Contains(':')) { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber, - matchRange.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber, - matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}:{2}", + sheetName, + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber, + matchRange.RangeAddress.FirstAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn), + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber, + matchRange.RangeAddress.LastAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}:{1}", - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber, - matchRange.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber, - matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber, + matchRange.RangeAddress.FirstAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn), + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber, + matchRange.RangeAddress.LastAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } } else { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}", sheetName, - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber, - matchRange.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}", + sheetName, + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber, + matchRange.RangeAddress.FirstAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}", - new XLAddress(worksheet, - matchRange.RangeAddress.FirstAddress.RowNumber, - matchRange.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.FirstAddress.FixedRow, matchRange.RangeAddress.FirstAddress.FixedColumn))); + new XLAddress(m_worksheet, + matchRange.RangeAddress.FirstAddress.RowNumber, + matchRange.RangeAddress.FirstAddress.ColumnNumber + + columnsShifted, + matchRange.RangeAddress.FirstAddress.FixedRow, + matchRange.RangeAddress.FirstAddress.FixedColumn))); + } } } else { if (useSheetName) - sb.Append(String.Format("'{0}'!{1}:{2}", sheetName, - matchRange.RangeAddress.FirstAddress.ToString(), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber, - matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + { + sb.Append(String.Format("'{0}'!{1}:{2}", + sheetName, + matchRange.RangeAddress.FirstAddress, + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber, + matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } else + { sb.Append(String.Format("{0}:{1}", - matchRange.RangeAddress.FirstAddress.ToString(), - new XLAddress(worksheet, - matchRange.RangeAddress.LastAddress.RowNumber, - matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, - matchRange.RangeAddress.LastAddress.FixedRow, matchRange.RangeAddress.LastAddress.FixedColumn))); + matchRange.RangeAddress.FirstAddress, + new XLAddress(m_worksheet, + matchRange.RangeAddress.LastAddress.RowNumber, + matchRange.RangeAddress.LastAddress.ColumnNumber + columnsShifted, + matchRange.RangeAddress.LastAddress.FixedRow, + matchRange.RangeAddress.LastAddress.FixedColumn))); + } } #endregion } @@ -1512,87 +1734,93 @@ lastIndex = matchIndex + matchString.Length; } if (lastIndex < value.Length) + { sb.Append(value.Substring(lastIndex)); + } var retVal = sb.ToString(); - formulaA1 = retVal.Substring(1, retVal.Length - 2); + m_formulaA1 = retVal.Substring(1, retVal.Length - 2); } } public Boolean ShareString { get; set; } - public Boolean SettingHyperlink = false; - private XLHyperlink hyperlink; - public XLHyperlink Hyperlink - { - get - { - if (hyperlink == null) - Hyperlink = new XLHyperlink(); + public Boolean SettingHyperlink; - return hyperlink; + public XLHyperlink Hyperlink + { + get + { + if (m_hyperlink == null) + { + Hyperlink = new XLHyperlink(); + } + + return m_hyperlink; } set { - hyperlink = value; - hyperlink.Worksheet = worksheet; - hyperlink.Cell = this; - if (worksheet.Hyperlinks.Any(hl => hl.Cell.Address == Address)) - worksheet.Hyperlinks.Delete(Address); + m_hyperlink = value; + m_hyperlink.Worksheet = m_worksheet; + m_hyperlink.Cell = this; + if (m_worksheet.Hyperlinks.Any(hl => Address.Equals(hl.Cell.Address))) + { + m_worksheet.Hyperlinks.Delete(Address); + } - worksheet.Hyperlinks.Add(hyperlink); + m_worksheet.Hyperlinks.Add(m_hyperlink); if (!SettingHyperlink) { - if (Style.Font.FontColor.Equals(worksheet.Style.Font.FontColor)) + if (Style.Font.FontColor.Equals(m_worksheet.Style.Font.FontColor)) + { Style.Font.FontColor = XLColor.FromTheme(XLThemeColor.Hyperlink); + } - if (Style.Font.Underline == worksheet.Style.Font.Underline) + if (Style.Font.Underline == m_worksheet.Style.Font.Underline) + { Style.Font.Underline = XLFontUnderlineValues.Single; + } } } } public IXLDataValidation DataValidation { - get - { - return this.AsRange().DataValidation; - } + get { return AsRange().DataValidation; } } public IXLCells InsertCellsAbove(int numberOfRows) { - return this.AsRange().InsertRowsAbove(numberOfRows).Cells(); + return AsRange().InsertRowsAbove(numberOfRows).Cells(); } public IXLCells InsertCellsBelow(int numberOfRows) { - return this.AsRange().InsertRowsBelow(numberOfRows).Cells(); + return AsRange().InsertRowsBelow(numberOfRows).Cells(); } public IXLCells InsertCellsAfter(int numberOfColumns) { - return this.AsRange().InsertColumnsAfter(numberOfColumns).Cells(); + return AsRange().InsertColumnsAfter(numberOfColumns).Cells(); } public IXLCells InsertCellsBefore(int numberOfColumns) { - return this.AsRange().InsertColumnsBefore(numberOfColumns).Cells(); + return AsRange().InsertColumnsBefore(numberOfColumns).Cells(); } - public IXLCell AddToNamed(String rangeName) { - this.AsRange().AddToNamed(rangeName); + AsRange().AddToNamed(rangeName); return this; } public IXLCell AddToNamed(String rangeName, XLScope scope) { - this.AsRange().AddToNamed(rangeName, scope); + AsRange().AddToNamed(rangeName, scope); return this; } public IXLCell AddToNamed(String rangeName, XLScope scope, String comment) { - this.AsRange().AddToNamed(rangeName, scope, comment); + AsRange().AddToNamed(rangeName, scope, comment); return this; } @@ -1601,7 +1829,7 @@ get { var retVal = new XLRanges(); - retVal.Add(this.AsRange()); + retVal.Add(AsRange()); return retVal; } } @@ -1614,23 +1842,38 @@ public String ValueCached { get; internal set; } - XLRichString richText; - public IXLRichString RichText + public IXLRichString RichText { get { - if (richText == null) - { - if (StringExtensions.IsNullOrWhiteSpace(cellValue)) - richText = new XLRichString(style.Font); + if (m_richText == null) + { + if (StringExtensions.IsNullOrWhiteSpace(m_cellValue)) + { + m_richText = new XLRichString(m_style.Font); + } else - richText = new XLRichString(GetFormattedString(), style.Font); - dataType = XLCellValues.Text; + { + m_richText = new XLRichString(GetFormattedString(), m_style.Font); + } + m_dataType = XLCellValues.Text; } - return richText; + return m_richText; } } - public Boolean HasRichText { get { return richText != null; } } + public Boolean HasRichText + { + get { return m_richText != null; } + } + + //-- + #region Nested type: FormulaConversionType + private enum FormulaConversionType + { + A1toR1C1, + R1C1toA1 + }; + #endregion } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellCollection.cs index 10c9cb3..8943083 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellCollection.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; @@ -6,85 +7,85 @@ { internal class XLCellCollection : IDictionary { - private Dictionary dictionary = new Dictionary(); - - private Dictionary deleted = new Dictionary(); + #region Private fields + private readonly Dictionary m_dictionary = new Dictionary(); + private readonly Dictionary m_deleted = new Dictionary(); + #endregion public Dictionary Deleted { - get - { - return deleted; - } + get { return m_deleted; } } public void Add(IXLAddress key, XLCell value) { - if (deleted.ContainsKey(key)) - deleted.Remove(key); + if (m_deleted.ContainsKey(key)) + { + m_deleted.Remove(key); + } - dictionary.Add(key, value); + m_dictionary.Add(key, value); } public bool ContainsKey(IXLAddress key) { - return dictionary.ContainsKey(key); + return m_dictionary.ContainsKey(key); } public ICollection Keys { - get { return dictionary.Keys; } + get { return m_dictionary.Keys; } } public bool Remove(IXLAddress key) { - if (!deleted.ContainsKey(key)) - deleted.Add(key, dictionary[key]); + if (!m_deleted.ContainsKey(key)) + { + m_deleted.Add(key, m_dictionary[key]); + } - return dictionary.Remove(key); + return m_dictionary.Remove(key); } public bool TryGetValue(IXLAddress key, out XLCell value) { - return dictionary.TryGetValue(key, out value); + return m_dictionary.TryGetValue(key, out value); } public ICollection Values { - get { return dictionary.Values; } + get { return m_dictionary.Values; } } public XLCell this[IXLAddress key] { - get - { - return dictionary[key]; - } - set - { - dictionary[key] = value; - } + get { return m_dictionary[key]; } + set { m_dictionary[key] = value; } } public void Add(KeyValuePair item) { - if (deleted.ContainsKey(item.Key)) - deleted.Remove(item.Key); - dictionary.Add(item.Key, item.Value); + if (m_deleted.ContainsKey(item.Key)) + { + m_deleted.Remove(item.Key); + } + m_dictionary.Add(item.Key, item.Value); } public void Clear() { - foreach (var kp in dictionary) + foreach (var kp in m_dictionary) { - if (!deleted.ContainsKey(kp.Key)) - deleted.Add(kp.Key, kp.Value); + if (!m_deleted.ContainsKey(kp.Key)) + { + m_deleted.Add(kp.Key, kp.Value); + } } - dictionary.Clear(); + m_dictionary.Clear(); } public bool Contains(KeyValuePair item) { - return dictionary.Contains(item); + return m_dictionary.Contains(item); } public void CopyTo(KeyValuePair[] array, int arrayIndex) @@ -94,7 +95,7 @@ public int Count { - get { return dictionary.Count; } + get { return m_dictionary.Count; } } public bool IsReadOnly @@ -104,20 +105,22 @@ public bool Remove(KeyValuePair item) { - if (!deleted.ContainsKey(item.Key)) - deleted.Add(item.Key, dictionary[item.Key]); + if (!m_deleted.ContainsKey(item.Key)) + { + m_deleted.Add(item.Key, m_dictionary[item.Key]); + } - return dictionary.Remove(item.Key); + return m_dictionary.Remove(item.Key); } public IEnumerator> GetEnumerator() { - return dictionary.GetEnumerator(); + return m_dictionary.GetEnumerator(); } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + IEnumerator IEnumerable.GetEnumerator() { - return dictionary.GetEnumerator(); + return m_dictionary.GetEnumerator(); } public void RemoveAll() @@ -127,13 +130,15 @@ public void RemoveAll(Func predicate) { - foreach (var kp in dictionary.Values.Where(predicate).Select(c=>c)) + foreach (var kp in m_dictionary.Values.Where(predicate).Select(c => c)) { - if (!deleted.ContainsKey(kp.Address)) - deleted.Add(kp.Address, kp); + if (!m_deleted.ContainsKey(kp.Address)) + { + m_deleted.Add(kp.Address, kp); + } } - dictionary.RemoveAll(predicate); + m_dictionary.RemoveAll(predicate); } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs index af2fe0e..5a78bef 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs @@ -1,26 +1,30 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; namespace ClosedXML.Excel { - internal class XLCells : IXLCells, IXLStylized + internal class XLCells : IXLCells, IXLStylized, IEnumerable { - private Boolean usedCellsOnly; - private Boolean includeStyles; - public XLCells(Boolean entireWorksheet, Boolean usedCellsOnly, Boolean includeStyles) + #region Fields + private readonly bool m_usedCellsOnly; + private readonly bool m_includeStyles; + private readonly List m_rangeAddresses = new List(); + private IXLStyle m_style; + #endregion + #region Constructor + public XLCells(bool entireWorksheet, bool usedCellsOnly, bool includeStyles) { - this.style = new XLStyle(this, XLWorkbook.DefaultStyle); - this.usedCellsOnly = usedCellsOnly; - this.includeStyles = includeStyles; + m_style = new XLStyle(this, XLWorkbook.DefaultStyle); + m_usedCellsOnly = usedCellsOnly; + m_includeStyles = includeStyles; } - - private List rangeAddresses = new List(); - private struct MinMax { public Int32 MinRow; public Int32 MaxRow; public Int32 MinColumn; public Int32 MaxColumn; } - public IEnumerator GetEnumerator() + #endregion + public IEnumerator GetEnumerator() { - var cellsInRanges = new Dictionary>(); - foreach (var range in rangeAddresses) + var cellsInRanges = new Dictionary>(); + foreach (var range in m_rangeAddresses) { HashSet hash; if (cellsInRanges.ContainsKey(range.Worksheet)) @@ -33,20 +37,22 @@ cellsInRanges.Add(range.Worksheet, hash); } - if (usedCellsOnly) + if (m_usedCellsOnly) { - var addressList = (range.Worksheet as XLWorksheet).Internals.CellsCollection.Keys.Where(a => - a.RowNumber >= range.FirstAddress.RowNumber - && a.RowNumber <= range.LastAddress.RowNumber - && a.ColumnNumber >= range.FirstAddress.ColumnNumber - && a.ColumnNumber <= range.LastAddress.ColumnNumber).Select(a => a); + var tmpRange = range; + var addressList = range.Worksheet.Internals.CellsCollection.Keys + .Where(a => a.RowNumber >= tmpRange.FirstAddress.RowNumber && + a.RowNumber <= tmpRange.LastAddress.RowNumber && + a.ColumnNumber >= tmpRange.FirstAddress.ColumnNumber && + a.ColumnNumber <= tmpRange.LastAddress.ColumnNumber); foreach (var a in addressList) { if (!hash.Contains(a)) + { hash.Add(a); + } } - } else { @@ -63,25 +69,27 @@ { var address = new XLAddress(range.Worksheet, ro, co, false, false); if (!hash.Contains(address)) + { hash.Add(address); + } } } } } } - if (usedCellsOnly) + if (m_usedCellsOnly) { foreach (var cir in cellsInRanges) { - var cellsCollection = (cir.Key as XLWorksheet).Internals.CellsCollection; + var cellsCollection = cir.Key.Internals.CellsCollection; foreach (var a in cir.Value) { if (cellsCollection.ContainsKey(a)) - { + { var cell = cellsCollection[a]; - if (!StringExtensions.IsNullOrWhiteSpace((cell as XLCell).InnerText) - || (includeStyles && !cell.Style.Equals(cir.Key.Style))) + if (!StringExtensions.IsNullOrWhiteSpace((cell).InnerText) + || (m_includeStyles && !cell.Style.Equals(cir.Key.Style))) { yield return cell; } @@ -109,34 +117,34 @@ } } } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + IEnumerator IEnumerable.GetEnumerator() + { + foreach (var cell in this) + { + yield return cell; + } + } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } - public void Add(IXLRangeAddress rangeAddress) + public void Add(XLRangeAddress rangeAddress) { - rangeAddresses.Add(rangeAddress); + m_rangeAddresses.Add(rangeAddress); } - public void Add(IXLCell cell) + public void Add(XLCell cell) { - rangeAddresses.Add(new XLRangeAddress(cell.Address, cell.Address)); + m_rangeAddresses.Add(new XLRangeAddress(cell.Address, cell.Address)); } - #region IXLStylized Members - - private IXLStyle style; public IXLStyle Style { - get - { - return style; - } + get { return m_style; } set { - style = new XLStyle(this, value); - this.ForEach(c => c.Style = style); + m_style = new XLStyle(this, value); + this.ForEach(c => c.Style = m_style); } } @@ -145,9 +153,11 @@ get { UpdatingStyle = true; - yield return style; + yield return m_style; foreach (var c in this) + { yield return c.Style; + } UpdatingStyle = false; } } @@ -156,58 +166,44 @@ public IXLStyle InnerStyle { - get { return style; } - set { style = new XLStyle(this, value); } + get { return m_style; } + set { m_style = new XLStyle(this, value); } } - #endregion - - public Object Value + public Object Value { - set - { - this.ForEach(c => c.Value = value); - } + set { this.ForEach(c => c.Value = value); } } public IXLCells SetDataType(XLCellValues dataType) { - this.ForEach(c => c.DataType = dataType); + this.ForEach(c => c.DataType = dataType); return this; } public XLCellValues DataType { - set - { - this.ForEach(c => c.DataType = value); - } + set { this.ForEach(c => c.DataType = value); } } public void Clear() { - this.ForEach(c => c.Clear()); + this.ForEach(c => c.Clear()); } public void ClearStyles() { - this.ForEach(c => c.ClearStyles()); + this.ForEach(c => c.ClearStyles()); } public String FormulaA1 { - set - { - this.ForEach(c => c.FormulaA1 = value); - } + set { this.ForEach(c => c.FormulaA1 = value); } } public String FormulaR1C1 { - set - { - this.ForEach(c => c.FormulaR1C1 = value); - } + set { this.ForEach(c => c.FormulaR1C1 = value); } } public IXLRanges RangesUsed @@ -215,11 +211,19 @@ get { var retVal = new XLRanges(); - this.ForEach(c => retVal.Add(c.AsRange())); + this.ForEach(c => retVal.Add(c.AsRange())); return retVal; } } - - + //-- + #region Nested type: MinMax + private struct MinMax + { + public Int32 MinRow; + public Int32 MaxRow; + public Int32 MinColumn; + public Int32 MaxColumn; + } + #endregion } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index 487f02b..15f94e3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -2,31 +2,34 @@ using System.Collections.Generic; using System.Linq; - namespace ClosedXML.Excel { - internal class XLColumn: XLRangeBase, IXLColumn + internal class XLColumn : XLRangeBase, IXLColumn { public XLColumn(Int32 column, XLColumnParameters xlColumnParameters) - : base(new XLRangeAddress(new XLAddress(xlColumnParameters.Worksheet, 1, column, false, false), new XLAddress(xlColumnParameters.Worksheet, XLWorksheet.MaxNumberOfRows, column, false, false))) + : base( + new XLRangeAddress(new XLAddress(xlColumnParameters.Worksheet, 1, column, false, false), + new XLAddress(xlColumnParameters.Worksheet, XLWorksheet.MaxNumberOfRows, column, false, false))) { SetColumnNumber(column); - - this.IsReference = xlColumnParameters.IsReference; + + IsReference = xlColumnParameters.IsReference; if (IsReference) { - (Worksheet as XLWorksheet).RangeShiftedColumns += new RangeShiftedColumnsDelegate(Worksheet_RangeShiftedColumns); + (Worksheet).RangeShiftedColumns += Worksheet_RangeShiftedColumns; } else { - this.style = new XLStyle(this, xlColumnParameters.DefaultStyle); - this.width = xlColumnParameters.Worksheet.ColumnWidth; + style = new XLStyle(this, xlColumnParameters.DefaultStyle); + width = xlColumnParameters.Worksheet.ColumnWidth; } } public XLColumn(XLColumn column) - : base(new XLRangeAddress(new XLAddress(column.Worksheet, 1, column.ColumnNumber(), false, false), new XLAddress(column.Worksheet, XLWorksheet.MaxNumberOfRows, column.ColumnNumber(), false, false))) - { + : base( + new XLRangeAddress(new XLAddress(column.Worksheet, 1, column.ColumnNumber(), false, false), + new XLAddress(column.Worksheet, XLWorksheet.MaxNumberOfRows, column.ColumnNumber(), false, false))) + { width = column.width; IsReference = column.IsReference; collapsed = column.collapsed; @@ -35,10 +38,12 @@ style = new XLStyle(this, column.Style); } - void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) + private void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) { - if (range.RangeAddress.FirstAddress.ColumnNumber <= this.ColumnNumber()) - SetColumnNumber(this.ColumnNumber() + columnsShifted); + if (range.RangeAddress.FirstAddress.ColumnNumber <= ColumnNumber()) + { + SetColumnNumber(ColumnNumber() + columnsShifted); + } } private void SetColumnNumber(Int32 column) @@ -49,15 +54,21 @@ } else { - RangeAddress.FirstAddress = new XLAddress(Worksheet, 1, column, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); - RangeAddress.LastAddress = new XLAddress(Worksheet, XLWorksheet.MaxNumberOfRows, column, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); + RangeAddress.FirstAddress = new XLAddress(Worksheet, + 1, + column, + RangeAddress.FirstAddress.FixedRow, + RangeAddress.FirstAddress.FixedColumn); + RangeAddress.LastAddress = new XLAddress(Worksheet, + XLWorksheet.MaxNumberOfRows, + column, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn); } } public Boolean IsReference { get; private set; } - #region IXLColumn Members - private Double width; public Double Width { @@ -65,7 +76,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Width; + return (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Width; } else { @@ -76,7 +87,7 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Width = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Width = value; } else { @@ -87,23 +98,23 @@ public void Delete() { - var columnNumber = this.ColumnNumber(); - this.AsRange().Delete(XLShiftDeletedCells.ShiftCellsLeft); - (Worksheet as XLWorksheet).Internals.ColumnsCollection.Remove(columnNumber); + var columnNumber = ColumnNumber(); + AsRange().Delete(XLShiftDeletedCells.ShiftCellsLeft); + (Worksheet).Internals.ColumnsCollection.Remove(columnNumber); List columnsToMove = new List(); - columnsToMove.AddRange((Worksheet as XLWorksheet).Internals.ColumnsCollection.Where(c => c.Key > columnNumber).Select(c => c.Key)); - foreach (var column in columnsToMove.OrderBy(c=>c)) + columnsToMove.AddRange((Worksheet).Internals.ColumnsCollection.Where(c => c.Key > columnNumber).Select(c => c.Key)); + foreach (var column in columnsToMove.OrderBy(c => c)) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection.Add(column - 1, (Worksheet as XLWorksheet).Internals.ColumnsCollection[column]); - (Worksheet as XLWorksheet).Internals.ColumnsCollection.Remove(column); + (Worksheet).Internals.ColumnsCollection.Add(column - 1, (Worksheet).Internals.ColumnsCollection[column]); + (Worksheet).Internals.ColumnsCollection.Remove(column); } } public new void Clear() { - var range = this.AsRange(); + var range = AsRange(); range.Clear(); - this.Style = Worksheet.Style; + Style = Worksheet.Style; } public IXLCell Cell(Int32 rowNumber) @@ -126,26 +137,27 @@ { return Cells(firstRow + ":" + lastRow); } - #endregion - #region IXLStylized Members - private IXLStyle style; public override IXLStyle Style { get { if (IsReference) - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Style; + { + return (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Style; + } else + { return style; + } } set { if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Style = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Style = value; } else { @@ -153,23 +165,29 @@ Int32 minRow = 1; Int32 maxRow = 0; - var column = this.ColumnNumber(); - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Values.Any(c => c.Address.ColumnNumber == column)) + var column = ColumnNumber(); + if ((Worksheet).Internals.CellsCollection.Values.Any(c => c.Address.ColumnNumber == column)) { - minRow = (Worksheet as XLWorksheet).Internals.CellsCollection.Values - .Where(c => c.Address.ColumnNumber == column) - .Min(c => c.Address.RowNumber); - maxRow = (Worksheet as XLWorksheet).Internals.CellsCollection.Values - .Where(c => c.Address.ColumnNumber == column) - .Max(c => c.Address.RowNumber); + minRow = (Worksheet).Internals.CellsCollection.Values + .Where(c => c.Address.ColumnNumber == column) + .Min(c => c.Address.RowNumber); + maxRow = (Worksheet).Internals.CellsCollection.Values + .Where(c => c.Address.ColumnNumber == column) + .Max(c => c.Address.RowNumber); } - if ((Worksheet as XLWorksheet).Internals.RowsCollection.Count > 0) + if ((Worksheet).Internals.RowsCollection.Count > 0) { - Int32 minInCollection = (Worksheet as XLWorksheet).Internals.RowsCollection.Keys.Min(); - Int32 maxInCollection = (Worksheet as XLWorksheet).Internals.RowsCollection.Keys.Max(); - if (minInCollection < minRow) minRow = minInCollection; - if (maxInCollection > maxRow) maxRow = maxInCollection; + Int32 minInCollection = (Worksheet).Internals.RowsCollection.Keys.Min(); + Int32 maxInCollection = (Worksheet).Internals.RowsCollection.Keys.Max(); + if (minInCollection < minRow) + { + minRow = minInCollection; + } + if (maxInCollection > maxRow) + { + maxRow = maxInCollection; + } } for (Int32 ro = minRow; ro <= maxRow; ro++) @@ -188,16 +206,21 @@ yield return Style; - var column = this.ColumnNumber(); + var column = ColumnNumber(); Int32 minRow = 1; Int32 maxRow = 0; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Values.Any(c => c.Address.ColumnNumber == column)) - maxRow = (Worksheet as XLWorksheet).Internals.CellsCollection.Values.Where(c => c.Address.ColumnNumber == column).Max(c => c.Address.RowNumber); - - if ((Worksheet as XLWorksheet).Internals.RowsCollection.Count > 0) + if ((Worksheet).Internals.CellsCollection.Values.Any(c => c.Address.ColumnNumber == column)) { - Int32 maxInCollection = (Worksheet as XLWorksheet).Internals.RowsCollection.Keys.Max(); - if (maxInCollection > maxRow) maxRow = maxInCollection; + maxRow = (Worksheet).Internals.CellsCollection.Values.Where(c => c.Address.ColumnNumber == column).Max(c => c.Address.RowNumber); + } + + if ((Worksheet).Internals.RowsCollection.Count > 0) + { + Int32 maxInCollection = (Worksheet).Internals.RowsCollection.Keys.Max(); + if (maxInCollection > maxRow) + { + maxRow = maxInCollection; + } } for (var ro = minRow; ro <= maxRow; ro++) @@ -216,15 +239,19 @@ get { if (IsReference) - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].InnerStyle; + { + return (Worksheet).Internals.ColumnsCollection[ColumnNumber()].InnerStyle; + } else - return new XLStyle(new XLStylizedContainer(this.style, this), style); + { + return new XLStyle(new XLStylizedContainer(style, this), style); + } } set { if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].InnerStyle = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].InnerStyle = value; } else { @@ -232,24 +259,22 @@ } } } - #endregion - public new IXLColumns InsertColumnsAfter(Int32 numberOfColumns) { - var columnNum = this.ColumnNumber(); - (Worksheet as XLWorksheet).Internals.ColumnsCollection.ShiftColumnsRight(columnNum + 1, numberOfColumns); - XLRange range = (XLRange)this.Worksheet.Column(columnNum).AsRange(); + var columnNum = ColumnNumber(); + (Worksheet).Internals.ColumnsCollection.ShiftColumnsRight(columnNum + 1, numberOfColumns); + XLRange range = (XLRange) Worksheet.Column(columnNum).AsRange(); range.InsertColumnsAfter(true, numberOfColumns); return Worksheet.Columns(columnNum + 1, columnNum + numberOfColumns); } public new IXLColumns InsertColumnsBefore(Int32 numberOfColumns) { - var columnNum = this.ColumnNumber(); - (Worksheet as XLWorksheet).Internals.ColumnsCollection.ShiftColumnsRight(columnNum, numberOfColumns); + var columnNum = ColumnNumber(); + (Worksheet).Internals.ColumnsCollection.ShiftColumnsRight(columnNum, numberOfColumns); // We can't use this.AsRange() because we've shifted the columns // and we want to use the old columnNum. - XLRange range = (XLRange)this.Worksheet.Column(columnNum).AsRange(); + XLRange range = (XLRange) Worksheet.Column(columnNum).AsRange(); range.InsertColumnsBefore(true, numberOfColumns); return Worksheet.Columns(columnNum, columnNum + numberOfColumns - 1); } @@ -258,13 +283,15 @@ { return Range(1, 1, XLWorksheet.MaxNumberOfRows, 1); } - public override IXLRange Range(String rangeAddressStr) + public override XLRange Range(String rangeAddressStr) { String rangeAddressToUse; if (rangeAddressStr.Contains(':') || rangeAddressStr.Contains('-')) { if (rangeAddressStr.Contains('-')) + { rangeAddressStr = rangeAddressStr.Replace('-', ':'); + } String[] arrRange = rangeAddressStr.Split(':'); var firstPart = arrRange[0]; @@ -299,7 +326,7 @@ { Boolean isMerged = false; var cellAsRange = c.AsRange(); - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var m in (Worksheet).Internals.MergedRanges) { if (cellAsRange.Intersects(m)) { @@ -310,11 +337,11 @@ if (!isMerged) { Int32 textRotation = c.Style.Alignment.TextRotation; - var f = (XLFont)c.Style.Font; + var f = (XLFont) c.Style.Font; Double thisWidth; if (textRotation == 0) - { - thisWidth = f.GetWidth(c.GetFormattedString()); + { + thisWidth = f.GetWidth(c.GetFormattedString()); } else { @@ -326,22 +353,30 @@ { Int32 rotation; if (textRotation == 90 || textRotation == 180 || textRotation == 255) + { rotation = 90; + } else - rotation = textRotation % 90; - + { + rotation = textRotation%90; + } + Double r = DegreeToRadian(rotation); - thisWidth = f.GetWidth(c.GetFormattedString()) * Math.Cos(r) + Math.Sin(r) * f.GetWidth("X"); + thisWidth = f.GetWidth(c.GetFormattedString())*Math.Cos(r) + Math.Sin(r)*f.GetWidth("X"); } } if (thisWidth > colMaxWidth) + { colMaxWidth = thisWidth; + } } } if (colMaxWidth == 0) + { colMaxWidth = Worksheet.ColumnWidth; + } Width = colMaxWidth; @@ -350,7 +385,7 @@ private double DegreeToRadian(double angle) { - return Math.PI * angle / 180.0; + return Math.PI*angle/180.0; } public IXLColumn AdjustToContents(Double minWidth, Double maxWidth) @@ -368,7 +403,7 @@ { Boolean isMerged = false; var cellAsRange = c.AsRange(); - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var m in (Worksheet).Internals.MergedRanges) { if (cellAsRange.Intersects(m)) { @@ -379,7 +414,7 @@ if (!isMerged) { Int32 textRotation = c.Style.Alignment.TextRotation; - var f = (XLFont)c.Style.Font; + var f = (XLFont) c.Style.Font; Double thisWidth; if (textRotation == 0) { @@ -395,12 +430,16 @@ { Int32 rotation; if (textRotation == 90 || textRotation == 180 || textRotation == 255) + { rotation = 90; + } else - rotation = textRotation % 90; + { + rotation = textRotation%90; + } Double r = DegreeToRadian(rotation); - thisWidth = f.GetWidth(c.GetFormattedString()) * Math.Cos(r) + Math.Sin(r) * f.GetWidth("X"); + thisWidth = f.GetWidth(c.GetFormattedString())*Math.Cos(r) + Math.Sin(r)*f.GetWidth("X"); } } @@ -410,7 +449,9 @@ break; } else if (thisWidth > colMaxWidth) + { colMaxWidth = thisWidth; + } } } @@ -433,7 +474,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].IsHidden; + return (Worksheet).Internals.ColumnsCollection[ColumnNumber()].IsHidden; } else { @@ -444,7 +485,7 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].IsHidden = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].IsHidden = value; } else { @@ -453,26 +494,18 @@ } } - private Boolean collapsed; public Boolean Collapsed { get { - if (IsReference) - { - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Collapsed; - } - else - { - return collapsed; - } + return IsReference ? (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Collapsed : collapsed; } set { if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].Collapsed = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].Collapsed = value; } else { @@ -483,30 +516,24 @@ private Int32 outlineLevel; public Int32 OutlineLevel { - get - { - if (IsReference) - { - return (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].OutlineLevel; - } - else - { - return outlineLevel; - } + get { + return IsReference ? (Worksheet).Internals.ColumnsCollection[ColumnNumber()].OutlineLevel : outlineLevel; } set { if (value < 0 || value > 8) - throw new ArgumentOutOfRangeException("Outline level must be between 0 and 8."); + { + throw new ArgumentOutOfRangeException("value", "Outline level must be between 0 and 8."); + } if (IsReference) { - (Worksheet as XLWorksheet).Internals.ColumnsCollection[this.ColumnNumber()].OutlineLevel = value; + (Worksheet).Internals.ColumnsCollection[ColumnNumber()].OutlineLevel = value; } else { - (Worksheet as XLWorksheet).IncrementColumnOutline(value); - (Worksheet as XLWorksheet).DecrementColumnOutline(outlineLevel); + (Worksheet).IncrementColumnOutline(value); + (Worksheet).DecrementColumnOutline(outlineLevel); outlineLevel = value; } } @@ -518,7 +545,9 @@ public void Group(Boolean collapse) { if (OutlineLevel < 8) + { OutlineLevel += 1; + } Collapsed = collapse; } @@ -544,7 +573,9 @@ else { if (OutlineLevel > 0) + { OutlineLevel -= 1; + } } } public void Collapse() @@ -560,55 +591,58 @@ public Int32 CellCount() { - return this.RangeAddress.LastAddress.ColumnNumber - this.RangeAddress.FirstAddress.ColumnNumber + 1; + return RangeAddress.LastAddress.ColumnNumber - RangeAddress.FirstAddress.ColumnNumber + 1; } public IXLColumn Sort() { - this.RangeUsed().Sort(); + RangeUsed().Sort(); return this; } public IXLColumn Sort(XLSortOrder sortOrder) { - this.RangeUsed().Sort(sortOrder); + RangeUsed().Sort(sortOrder); return this; } public IXLColumn Sort(Boolean matchCase) { - this.AsRange().Sort(matchCase); + AsRange().Sort(matchCase); return this; } public IXLColumn Sort(XLSortOrder sortOrder, Boolean matchCase) { - this.AsRange().Sort(sortOrder, matchCase); + AsRange().Sort(sortOrder, matchCase); return this; } - private void CopyToCell(IXLRangeColumn rngColumn, IXLCell cell) + private void CopyToCell(IXLRangeColumn rngColumn, XLCell cell) { Int32 cellCount = rngColumn.CellCount(); Int32 roStart = cell.Address.RowNumber; Int32 coStart = cell.Address.ColumnNumber; for (Int32 ro = roStart; ro <= cellCount + roStart - 1; ro++) { - (cell.Worksheet.Cell(ro, coStart) as XLCell).CopyFrom(rngColumn.Cell(ro - roStart + 1)); - } + cell.Worksheet.Cell(ro, coStart).CopyFrom((XLCell) rngColumn.Cell(ro - roStart + 1)); + } } public new IXLRangeColumn CopyTo(IXLCell target) { var rngUsed = RangeUsed().Column(1); - CopyToCell(rngUsed, target); + CopyToCell(rngUsed, (XLCell)target); Int32 lastRowNumber = target.Address.RowNumber + rngUsed.CellCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } return target.Worksheet.Range( - target.Address.RowNumber, - target.Address.ColumnNumber, - lastRowNumber, - target.Address.ColumnNumber) - .Column(1); + target.Address.RowNumber, + target.Address.ColumnNumber, + lastRowNumber, + target.Address.ColumnNumber) + .Column(1); } public new IXLRangeColumn CopyTo(IXLRangeBase target) { @@ -618,17 +652,20 @@ Int32 targetRowCount = targetRangeUsed.RowCount(); Int32 maxRow = thisRowCount > targetRowCount ? thisRowCount : targetRowCount; - CopyToCell(this.Range(1, 1, maxRow, 1).Column(1), target.FirstCell()); + CopyToCell(Range(1, 1, maxRow, 1).Column(1), (XLCell)target.FirstCell()); Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + maxRow - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.LastAddress.ColumnNumber, - lastRowNumber, - target.RangeAddress.LastAddress.ColumnNumber ) - .Column(1); + target.RangeAddress.FirstAddress.RowNumber, + target.RangeAddress.LastAddress.ColumnNumber, + lastRowNumber, + target.RangeAddress.LastAddress.ColumnNumber) + .Column(1); } public IXLColumn CopyTo(IXLColumn column) { @@ -638,8 +675,8 @@ Int32 targetRowCount = column.LastCellUsed(true).Address.RowNumber; Int32 maxRow = thisRowCount > targetRowCount ? thisRowCount : targetRowCount; - CopyToCell(this.Column(1, maxRow), column.FirstCell()); - var newColumn = column as XLColumn; + CopyToCell(Column(1, maxRow), (XLCell) column.FirstCell()); + var newColumn = (XLColumn) column; newColumn.width = width; newColumn.style = new XLStyle(newColumn, Style); return newColumn; @@ -655,17 +692,17 @@ var columnPairs = columns.Split(','); foreach (var pair in columnPairs) { - this.AsRange().Columns(pair.Trim()).ForEach(c => retVal.Add(c)); + AsRange().Columns(pair.Trim()).ForEach(retVal.Add); } return retVal; } /// - /// Adds a vertical page break after this column. + /// Adds a vertical page break after this column. /// public IXLColumn AddVerticalPageBreak() { - Worksheet.PageSetup.AddVerticalPageBreak(this.ColumnNumber()); + Worksheet.PageSetup.AddVerticalPageBreak(ColumnNumber()); return this; } @@ -675,4 +712,4 @@ return this; } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs index 2153929..cc5b137 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs @@ -254,6 +254,7 @@ IXLWorksheet CopyTo(XLWorkbook workbook, String newSheetName, Int32 position); IXLRange RangeUsed(); + IXLRange RangeUsed(bool includeStyles); IXLDataValidations DataValidations { get; } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRange.cs index a3a8279..df6539c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRange.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRange.cs @@ -35,7 +35,7 @@ var byExclamation = rangeAddress.Split('!'); var wsName = byExclamation[0].Replace("'", ""); var rng = byExclamation[1]; - var rangeToAdd = namedRanges.Workbook.Worksheets.Worksheet(wsName).Range(rng); + var rangeToAdd = namedRanges.Workbook.WorksheetsInternal.Worksheet(wsName).Range(rng); ranges.Add(rangeToAdd); } return ranges; @@ -56,7 +56,7 @@ var byExclamation = rangeAddress.Split('!'); var wsName = byExclamation[0].Replace("'", ""); var rng = byExclamation[1]; - var rangeToAdd = workbook.Worksheets.Worksheet(wsName).Range(rng); + var rangeToAdd = workbook.WorksheetsInternal.Worksheet(wsName).Range(rng); ranges.Add(rangeToAdd); return Add(ranges); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs index ec4afd8..690675f 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs @@ -2,201 +2,263 @@ using System.Collections.Generic; using System.Linq; - namespace ClosedXML.Excel { - internal class XLRange: XLRangeBase, IXLRange + internal class XLRange : XLRangeBase, IXLRange { - //public new IXLWorksheet Worksheet { get { return base.Worksheet; } } - public XLRangeParameters RangeParameters { get; private set; } - public XLRange(XLRangeParameters xlRangeParameters): base(xlRangeParameters.RangeAddress) + #region Fields + private IXLSortElements m_sortRows; + private IXLSortElements m_sortColumns; + #endregion + #region Constructor + public XLRange(XLRangeParameters xlRangeParameters) + : base(xlRangeParameters.RangeAddress) { - this.RangeParameters = xlRangeParameters; - + RangeParameters = xlRangeParameters; + if (!xlRangeParameters.IgnoreEvents) { - (Worksheet as XLWorksheet).RangeShiftedRows += new RangeShiftedRowsDelegate(Worksheet_RangeShiftedRows); - (Worksheet as XLWorksheet).RangeShiftedColumns += new RangeShiftedColumnsDelegate(Worksheet_RangeShiftedColumns); + (Worksheet).RangeShiftedRows += Worksheet_RangeShiftedRows; + (Worksheet).RangeShiftedColumns += Worksheet_RangeShiftedColumns; xlRangeParameters.IgnoreEvents = true; } - this.defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); + m_defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); } + #endregion + public XLRangeParameters RangeParameters { get; private set; } - void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) + private void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) { - ShiftColumns(this.RangeAddress, range, columnsShifted); + ShiftColumns(RangeAddress, range, columnsShifted); } - void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) + private void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) { - ShiftRows(this.RangeAddress, range, rowsShifted); + ShiftRows(RangeAddress, range, rowsShifted); } - #region IXLRange Members - public IXLRangeColumn FirstColumn() { - return this.Column(1); + return Column(1); } public IXLRangeColumn LastColumn() { - return this.Column(this.ColumnCount()); + return Column(ColumnCount()); } public IXLRangeColumn FirstColumnUsed() { - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber; - var columnCount = this.ColumnCount(); + var firstColumn = RangeAddress.FirstAddress.ColumnNumber; + var columnCount = ColumnCount(); Int32 minColumnUsed = Int32.MaxValue; Int32 minColumnInCells = Int32.MaxValue; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Any(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount)) - minColumnInCells = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount).Select(c => c.Key.ColumnNumber).Min(); + if ((Worksheet).Internals.CellsCollection.Any(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount)) + { + minColumnInCells = (Worksheet).Internals.CellsCollection + .Where(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount).Select(c => c.Key.ColumnNumber).Min(); + } Int32 minCoInColumns = Int32.MaxValue; - if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.Any(c => c.Key >= firstColumn && c.Key <= columnCount)) - minCoInColumns = (Worksheet as XLWorksheet).Internals.ColumnsCollection - .Where(c => c.Key >= firstColumn && c.Key <= columnCount).Select(c => c.Key).Min(); + if ((Worksheet).Internals.ColumnsCollection.Any(c => c.Key >= firstColumn && c.Key <= columnCount)) + { + minCoInColumns = (Worksheet).Internals.ColumnsCollection + .Where(c => c.Key >= firstColumn && c.Key <= columnCount).Select(c => c.Key).Min(); + } minColumnUsed = minColumnInCells < minCoInColumns ? minColumnInCells : minCoInColumns; if (minColumnUsed == Int32.MaxValue) + { return null; + } else - return this.Column(minColumnUsed); + { + return Column(minColumnUsed); + } } public IXLRangeColumn LastColumnUsed() { - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber; - var columnCount = this.ColumnCount(); + var firstColumn = RangeAddress.FirstAddress.ColumnNumber; + var columnCount = ColumnCount(); Int32 maxColumnUsed = 0; Int32 maxColumnInCells = 0; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Any(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount)) - maxColumnInCells = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount).Select(c => c.Key.ColumnNumber).Max(); + if ((Worksheet).Internals.CellsCollection.Any(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount)) + { + maxColumnInCells = (Worksheet).Internals.CellsCollection + .Where(c => c.Key.ColumnNumber >= firstColumn && c.Key.ColumnNumber <= columnCount).Select(c => c.Key.ColumnNumber).Max(); + } Int32 maxCoInColumns = 0; - if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.Any(c => c.Key >= firstColumn && c.Key <= columnCount)) - maxCoInColumns = (Worksheet as XLWorksheet).Internals.ColumnsCollection - .Where(c => c.Key >= firstColumn && c.Key <= columnCount).Select(c => c.Key).Max(); + if ((Worksheet).Internals.ColumnsCollection.Any(c => c.Key >= firstColumn && c.Key <= columnCount)) + { + maxCoInColumns = (Worksheet).Internals.ColumnsCollection + .Where(c => c.Key >= firstColumn && c.Key <= columnCount).Select(c => c.Key).Max(); + } maxColumnUsed = maxColumnInCells > maxCoInColumns ? maxColumnInCells : maxCoInColumns; if (maxColumnUsed == 0) + { return null; + } else - return this.Column(maxColumnUsed); + { + return Column(maxColumnUsed); + } } public IXLRangeRow FirstRow() { - return this.Row(1); + return Row(1); } public IXLRangeRow LastRow() { - return this.Row(this.RowCount()); + return Row(RowCount()); } public IXLRangeRow FirstRowUsed() { - var firstRow = this.RangeAddress.FirstAddress.RowNumber; - var rowCount = this.RowCount(); + var firstRow = RangeAddress.FirstAddress.RowNumber; + var rowCount = RowCount(); Int32 minRowUsed = Int32.MaxValue; Int32 minRowInCells = Int32.MaxValue; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Any(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount)) - minRowInCells = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount).Select(c => c.Key.RowNumber).Min(); + if ((Worksheet).Internals.CellsCollection.Any(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount)) + { + minRowInCells = (Worksheet).Internals.CellsCollection + .Where(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount).Select(c => c.Key.RowNumber).Min(); + } Int32 minRoInRows = Int32.MaxValue; - if ((Worksheet as XLWorksheet).Internals.RowsCollection.Any(r => r.Key >= firstRow && r.Key <= rowCount)) - minRoInRows = (Worksheet as XLWorksheet).Internals.RowsCollection - .Where(r => r.Key >= firstRow && r.Key <= rowCount).Select(r => r.Key).Min(); + if ((Worksheet).Internals.RowsCollection.Any(r => r.Key >= firstRow && r.Key <= rowCount)) + { + minRoInRows = (Worksheet).Internals.RowsCollection + .Where(r => r.Key >= firstRow && r.Key <= rowCount).Select(r => r.Key).Min(); + } minRowUsed = minRowInCells < minRoInRows ? minRowInCells : minRoInRows; if (minRowUsed == Int32.MaxValue) + { return null; - else - return this.Row(minRowUsed); + } + return Row(minRowUsed); } public IXLRangeRow LastRowUsed() { - var firstRow = this.RangeAddress.FirstAddress.RowNumber; - var rowCount = this.RowCount(); + var firstRow = RangeAddress.FirstAddress.RowNumber; + var rowCount = RowCount(); Int32 maxRowUsed = 0; Int32 maxRowInCells = 0; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Any(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount)) - maxRowInCells = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount).Select(c => c.Key.RowNumber).Max(); + if ((Worksheet).Internals.CellsCollection.Any(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount)) + { + maxRowInCells = (Worksheet).Internals.CellsCollection + .Where(c => c.Key.RowNumber >= firstRow && c.Key.RowNumber <= rowCount).Select(c => c.Key.RowNumber).Max(); + } Int32 maxRoInRows = 0; - if ((Worksheet as XLWorksheet).Internals.RowsCollection.Any(r => r.Key >= firstRow && r.Key <= rowCount)) - maxRoInRows = (Worksheet as XLWorksheet).Internals.RowsCollection - .Where(r => r.Key >= firstRow && r.Key <= rowCount).Select(r => r.Key).Max(); + if ((Worksheet).Internals.RowsCollection.Any(r => r.Key >= firstRow && r.Key <= rowCount)) + { + maxRoInRows = (Worksheet).Internals.RowsCollection + .Where(r => r.Key >= firstRow && r.Key <= rowCount).Select(r => r.Key).Max(); + } maxRowUsed = maxRowInCells > maxRoInRows ? maxRowInCells : maxRoInRows; if (maxRowUsed == 0) + { return null; + } else - return this.Row(maxRowUsed); + { + return Row(maxRowUsed); + } } public IXLRangeRow Row(Int32 row) { - IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); - IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); + var firstCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber + row - 1, + RangeAddress.FirstAddress.ColumnNumber, + false, + false); + var lastCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber + row - 1, + RangeAddress.LastAddress.ColumnNumber, + false, + false); return new XLRangeRow( - new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style)); - + new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style)); } - public IXLRangeRow RowQuick(Int32 row) + public XLRangeRow RowQuick(Int32 row) { - IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, false, false); - IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.LastAddress.ColumnNumber, false, false); + var firstCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber + row - 1, + RangeAddress.FirstAddress.ColumnNumber, + false, + false); + var lastCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber + row - 1, + RangeAddress.LastAddress.ColumnNumber, + false, + false); return new XLRangeRow( - new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress),Worksheet.Style), true); - + new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style), true); } public IXLRangeColumn Column(Int32 column) { - IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); - IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); + var firstCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber + column - 1, + false, + false); + var lastCellAddress = new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber + column - 1, + false, + false); return new XLRangeColumn( - new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress),Worksheet.Style)); - } - public IXLRangeColumn ColumnQuick(Int32 column) - { - IXLAddress firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); - IXLAddress lastCellAddress = new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, false, false); - return new XLRangeColumn( - new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style), true); + new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style)); } public IXLRangeColumn Column(String column) { - return this.Column(XLAddress.GetColumnNumberFromLetter(column)); + return Column(XLAddress.GetColumnNumberFromLetter(column)); + } + public XLRangeColumn ColumnQuick(Int32 column) + { + var firstCellAddress = new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber + column - 1, + false, + false); + var lastCellAddress = new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber + column - 1, + false, + false); + return new XLRangeColumn( + new XLRangeParameters(new XLRangeAddress(firstCellAddress, lastCellAddress), Worksheet.Style), true); } public IXLRangeColumns Columns() { var retVal = new XLRangeColumns(); - foreach (var c in Enumerable.Range(1, this.ColumnCount())) + foreach (var c in Enumerable.Range(1, ColumnCount())) { - retVal.Add(this.Column(c)); + retVal.Add(Column(c)); } return retVal; } - public IXLRangeColumns Columns(Int32 firstColumn, Int32 lastColumn) + public virtual IXLRangeColumns Columns(Int32 firstColumn, Int32 lastColumn) { var retVal = new XLRangeColumns(); for (var co = firstColumn; co <= lastColumn; co++) { - retVal.Add(this.Column(co)); + retVal.Add(Column(co)); } return retVal; } public IXLRangeColumns Columns(String firstColumn, String lastColumn) { - return this.Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); + return Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); } public IXLRangeColumns Columns(String columns) { @@ -210,7 +272,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var columnRange = tPair.Split(':'); firstColumn = columnRange[0]; @@ -224,25 +288,71 @@ Int32 tmp; if (Int32.TryParse(firstColumn, out tmp)) - foreach (var col in this.Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))) + { + foreach (var col in Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))) { retVal.Add(col); } + } else - foreach (var col in this.Columns(firstColumn, lastColumn)) + { + foreach (var col in Columns(firstColumn, lastColumn)) { retVal.Add(col); } + } } return retVal; } + IXLCell IXLRange.Cell(int row, int column) + { + return Cell(row, column); + } + IXLCell IXLRange.Cell(string cellAddressInRange) + { + return Cell(cellAddressInRange); + } + IXLCell IXLRange.Cell(int row, string column) + { + return Cell(row, column); + } + IXLCell IXLRange.Cell(IXLAddress cellAddressInRange) + { + return Cell(cellAddressInRange); + } + + IXLRange IXLRange.Range(IXLRangeAddress rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLRange.Range(string rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLRange.Range(IXLCell firstCell, IXLCell lastCell) + { + return Range(firstCell, lastCell); + } + IXLRange IXLRange.Range(string firstCellAddress, string lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLRange.Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLRange.Range(int firstCellRow, int firstCellColumn, int lastCellRow, int lastCellColumn) + { + return Range(firstCellRow, firstCellColumn, lastCellRow, lastCellColumn); + } + public IXLRangeRows Rows() { var retVal = new XLRangeRows(); - foreach (var r in Enumerable.Range(1, this.RowCount())) + foreach (var r in Enumerable.Range(1, RowCount())) { - retVal.Add(this.Row(r)); + retVal.Add(Row(r)); } return retVal; } @@ -252,7 +362,7 @@ for (var ro = firstRow; ro <= lastRow; ro++) { - retVal.Add(this.Row(ro)); + retVal.Add(Row(ro)); } return retVal; } @@ -268,7 +378,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var rowRange = tPair.Split(':'); firstRow = rowRange[0]; @@ -279,7 +391,7 @@ firstRow = tPair; lastRow = tPair; } - foreach (var row in this.Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) + foreach (var row in Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) { retVal.Add(row); } @@ -289,40 +401,40 @@ public void Transpose(XLTransposeOptions transposeOption) { - var rowCount = this.RowCount(); - var columnCount = this.ColumnCount(); + var rowCount = RowCount(); + var columnCount = ColumnCount(); var squareSide = rowCount > columnCount ? rowCount : columnCount; var firstCell = FirstCell(); - var lastCell = LastCell(); MoveOrClearForTranspose(transposeOption, rowCount, columnCount); TransposeMerged(squareSide); TransposeRange(squareSide); - this.RangeAddress.LastAddress = new XLAddress(Worksheet, - firstCell.Address.RowNumber + columnCount - 1, - firstCell.Address.ColumnNumber + rowCount - 1, - RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn); + RangeAddress.LastAddress = new XLAddress(Worksheet, + firstCell.Address.RowNumber + columnCount - 1, + firstCell.Address.ColumnNumber + rowCount - 1, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn); if (rowCount > columnCount) { var rng = Worksheet.Range( - this.RangeAddress.LastAddress.RowNumber + 1, - this.RangeAddress.FirstAddress.ColumnNumber, - this.RangeAddress.LastAddress.RowNumber + (rowCount - columnCount), - this.RangeAddress.LastAddress.ColumnNumber); + RangeAddress.LastAddress.RowNumber + 1, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.LastAddress.RowNumber + (rowCount - columnCount), + RangeAddress.LastAddress.ColumnNumber); rng.Delete(XLShiftDeletedCells.ShiftCellsUp); } else if (columnCount > rowCount) { var rng = Worksheet.Range( - this.RangeAddress.FirstAddress.RowNumber, - this.RangeAddress.LastAddress.ColumnNumber + 1, - this.RangeAddress.LastAddress.RowNumber, - this.RangeAddress.LastAddress.ColumnNumber + (columnCount - rowCount)); + RangeAddress.FirstAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber + 1, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber + (columnCount - rowCount)); rng.Delete(XLShiftDeletedCells.ShiftCellsLeft); } - foreach (var c in this.Range(1,1,columnCount, rowCount).Cells()) + foreach (var c in Range(1, 1, columnCount, rowCount).Cells()) { var border = new XLBorder(this, c.Style.Border); c.Style.Border.TopBorder = border.LeftBorder; @@ -340,14 +452,12 @@ { var cellsToInsert = new Dictionary(); var cellsToDelete = new List(); - XLRange rngToTranspose = (XLRange)Worksheet.Range( - this.RangeAddress.FirstAddress.RowNumber, - this.RangeAddress.FirstAddress.ColumnNumber, - this.RangeAddress.FirstAddress.RowNumber + squareSide - 1, - this.RangeAddress.FirstAddress.ColumnNumber + squareSide - 1); + XLRange rngToTranspose = (XLRange) Worksheet.Range( + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.FirstAddress.RowNumber + squareSide - 1, + RangeAddress.FirstAddress.ColumnNumber + squareSide - 1); - Int32 roInitial = rngToTranspose.RangeAddress.FirstAddress.RowNumber; - Int32 coInitial = rngToTranspose.RangeAddress.FirstAddress.ColumnNumber; Int32 roCount = rngToTranspose.RowCount(); Int32 coCount = rngToTranspose.ColumnCount(); for (Int32 ro = 1; ro <= roCount; ro++) @@ -356,12 +466,14 @@ { var oldCell = rngToTranspose.Cell(ro, co); var newKey = rngToTranspose.Cell(co, ro).Address; // new XLAddress(Worksheet, c.Address.ColumnNumber, c.Address.RowNumber); - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, oldCell.Style); + var newCell = new XLCell(Worksheet, newKey, oldCell.Style); newCell.CopyFrom(oldCell); cellsToInsert.Add(newKey, newCell); cellsToDelete.Add(oldCell.Address); } } + //Int32 roInitial = rngToTranspose.RangeAddress.FirstAddress.RowNumber; + //Int32 coInitial = rngToTranspose.RangeAddress.FirstAddress.ColumnNumber; //foreach (var c in rngToTranspose.Cells()) //{ // var newKey = new XLAddress(Worksheet, c.Address.ColumnNumber, c.Address.RowNumber); @@ -371,29 +483,29 @@ // cellsToInsert.Add(newKey, newCell); // cellsToDelete.Add(c.Address); //} - cellsToDelete.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Add(c.Key, c.Value)); + cellsToDelete.ForEach(c => (Worksheet).Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => (Worksheet).Internals.CellsCollection.Add(c.Key, c.Value)); } private void TransposeMerged(Int32 squareSide) { - XLRange rngToTranspose = (XLRange)Worksheet.Range( - this.RangeAddress.FirstAddress.RowNumber, - this.RangeAddress.FirstAddress.ColumnNumber, - this.RangeAddress.FirstAddress.RowNumber + squareSide - 1, - this.RangeAddress.FirstAddress.ColumnNumber + squareSide - 1); + XLRange rngToTranspose = (XLRange) Worksheet.Range( + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.FirstAddress.RowNumber + squareSide - 1, + RangeAddress.FirstAddress.ColumnNumber + squareSide - 1); List mergeToDelete = new List(); List mergeToInsert = new List(); - foreach (var merge in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var merge in (Worksheet).Internals.MergedRanges) { - if (this.Contains(merge)) + if (Contains(merge)) { merge.RangeAddress.LastAddress = rngToTranspose.Cell(merge.ColumnCount(), merge.RowCount()).Address; } } - mergeToDelete.ForEach(m => (Worksheet as XLWorksheet).Internals.MergedRanges.Remove(m)); - mergeToInsert.ForEach(m => (Worksheet as XLWorksheet).Internals.MergedRanges.Add(m)); + mergeToDelete.ForEach(m => (Worksheet).Internals.MergedRanges.Remove(m)); + mergeToInsert.ForEach(m => (Worksheet).Internals.MergedRanges.Add(m)); } private void MoveOrClearForTranspose(XLTransposeOptions transposeOption, int rowCount, int columnCount) @@ -402,11 +514,11 @@ { if (rowCount > columnCount) { - this.InsertColumnsAfter(rowCount - columnCount, false); + InsertColumnsAfter(rowCount - columnCount, false); } else if (columnCount > rowCount) { - this.InsertRowsBelow(columnCount - rowCount, false); + InsertRowsBelow(columnCount - rowCount, false); } } else @@ -415,20 +527,20 @@ { var toMove = rowCount - columnCount; var rngToClear = Worksheet.Range( - this.RangeAddress.FirstAddress.RowNumber, - this.RangeAddress.LastAddress.ColumnNumber + 1, - this.RangeAddress.LastAddress.RowNumber, - this.RangeAddress.LastAddress.ColumnNumber + toMove); + RangeAddress.FirstAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber + 1, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber + toMove); rngToClear.Clear(); } else if (columnCount > rowCount) { var toMove = columnCount - rowCount; var rngToClear = Worksheet.Range( - this.RangeAddress.LastAddress.RowNumber + 1, - this.RangeAddress.FirstAddress.ColumnNumber, - this.RangeAddress.LastAddress.RowNumber + toMove, - this.RangeAddress.LastAddress.ColumnNumber); + RangeAddress.LastAddress.RowNumber + 1, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.LastAddress.RowNumber + toMove, + RangeAddress.LastAddress.ColumnNumber); rngToClear.Clear(); } } @@ -454,67 +566,56 @@ return new XLTable(this, name, true); } #endregion - public override bool Equals(object obj) { - var other = (XLRange)obj; - return this.RangeAddress.Equals(other.RangeAddress) - && this.Worksheet.Equals(other.Worksheet); + var other = (XLRange) obj; + return RangeAddress.Equals(other.RangeAddress) + && Worksheet.Equals(other.Worksheet); } public override int GetHashCode() { return RangeAddress.GetHashCode() - ^ this.Worksheet.GetHashCode(); + ^ Worksheet.GetHashCode(); } - IXLSortElements sortRows; public IXLSortElements SortRows { - get - { - if (sortRows == null) sortRows = new XLSortElements(); - return sortRows; - } + get { return m_sortRows ?? (m_sortRows = new XLSortElements()); } } - IXLSortElements sortColumns; public IXLSortElements SortColumns { - get - { - if (sortColumns == null) sortColumns = new XLSortElements(); - return sortColumns; - } + get { return m_sortColumns ?? (m_sortColumns = new XLSortElements()); } } public IXLRange Sort() { if (SortColumns.Count() == 0) - return Sort(XLSortOrder.Ascending); - else { - SortRangeRows(); - return this; + return Sort(XLSortOrder.Ascending); } + SortRangeRows(); + return this; } public IXLRange Sort(Boolean matchCase) { if (SortColumns.Count() == 0) - return Sort(XLSortOrder.Ascending, false); - else { - SortRangeRows(); - return this; + return Sort(XLSortOrder.Ascending, false); } + SortRangeRows(); + return this; } public IXLRange Sort(XLSortOrder sortOrder) { if (SortColumns.Count() == 0) { - Int32 columnCount = this.ColumnCount(); + Int32 columnCount = ColumnCount(); for (Int32 co = 1; co <= columnCount; co++) + { SortColumns.Add(co, sortOrder); + } } else { @@ -527,13 +628,19 @@ { if (SortColumns.Count() == 0) { - Int32 columnCount = this.ColumnCount(); + Int32 columnCount = ColumnCount(); for (Int32 co = 1; co <= columnCount; co++) + { SortColumns.Add(co, sortOrder, true, matchCase); + } } else { - SortColumns.ForEach(sc => { sc.SortOrder = sortOrder; sc.MatchCase = matchCase; }); + SortColumns.ForEach(sc => + { + sc.SortOrder = sortOrder; + sc.MatchCase = matchCase; + }); } SortRangeRows(); return this; @@ -560,12 +667,18 @@ Int32 co; if (!Int32.TryParse(coString, out co)) + { co = XLAddress.GetColumnNumberFromLetter(coString); + } if (order.ToUpper().Equals("ASC")) + { SortColumns.Add(co, XLSortOrder.Ascending); + } else + { SortColumns.Add(co, XLSortOrder.Descending); + } } SortRangeRows(); @@ -593,12 +706,18 @@ Int32 co; if (!Int32.TryParse(coString, out co)) + { co = XLAddress.GetColumnNumberFromLetter(coString); + } if (order.ToUpper().Equals("ASC")) + { SortColumns.Add(co, XLSortOrder.Ascending, true, matchCase); + } else + { SortColumns.Add(co, XLSortOrder.Descending, true, matchCase); + } } SortRangeRows(); @@ -611,16 +730,12 @@ { return Sort(); } - else + if (SortRows.Count() == 0) { - if (SortRows.Count() == 0) - return Sort(sortOrientation, XLSortOrder.Ascending); - else - { - SortRangeColumns(); - return this; - } + return Sort(sortOrientation, XLSortOrder.Ascending); } + SortRangeColumns(); + return this; } public IXLRange Sort(XLSortOrientation sortOrientation, Boolean matchCase) { @@ -628,16 +743,12 @@ { return Sort(matchCase); } - else + if (SortRows.Count() == 0) { - if (SortRows.Count() == 0) - return Sort(sortOrientation, XLSortOrder.Ascending, matchCase); - else - { - SortRangeColumns(); - return this; - } + return Sort(sortOrientation, XLSortOrder.Ascending, matchCase); } + SortRangeColumns(); + return this; } public IXLRange Sort(XLSortOrientation sortOrientation, XLSortOrder sortOrder) { @@ -645,21 +756,20 @@ { return Sort(sortOrder); } + if (SortRows.Count() == 0) + { + Int32 rowCount = RowCount(); + for (Int32 co = 1; co <= rowCount; co++) + { + SortRows.Add(co, sortOrder); + } + } else { - if (SortRows.Count() == 0) - { - Int32 rowCount = this.RowCount(); - for (Int32 co = 1; co <= rowCount; co++) - SortRows.Add(co, sortOrder); - } - else - { - SortRows.ForEach(sc => sc.SortOrder = sortOrder); - } - SortRangeColumns(); - return this; + SortRows.ForEach(sc => sc.SortOrder = sortOrder); } + SortRangeColumns(); + return this; } public IXLRange Sort(XLSortOrientation sortOrientation, XLSortOrder sortOrder, Boolean matchCase) { @@ -667,21 +777,24 @@ { return Sort(sortOrder, matchCase); } + if (SortRows.Count() == 0) + { + Int32 rowCount = RowCount(); + for (Int32 co = 1; co <= rowCount; co++) + { + SortRows.Add(co, sortOrder, matchCase); + } + } else { - if (SortRows.Count() == 0) - { - Int32 rowCount = this.RowCount(); - for (Int32 co = 1; co <= rowCount; co++) - SortRows.Add(co, sortOrder, matchCase); - } - else - { - SortRows.ForEach(sc => { sc.SortOrder = sortOrder; sc.MatchCase = matchCase; }); - } - SortRangeColumns(); - return this; + SortRows.ForEach(sc => + { + sc.SortOrder = sortOrder; + sc.MatchCase = matchCase; + }); } + SortRangeColumns(); + return this; } public IXLRange Sort(XLSortOrientation sortOrientation, String elementsToSortBy) { @@ -689,37 +802,38 @@ { return Sort(elementsToSortBy); } - else + SortRows.Clear(); + foreach (String roPair in elementsToSortBy.Split(',')) { - SortRows.Clear(); - foreach (String roPair in elementsToSortBy.Split(',')) + String roPairTrimmed = roPair.Trim(); + String roString; + String order; + if (roPairTrimmed.Contains(' ')) { - String roPairTrimmed = roPair.Trim(); - String roString; - String order; - if (roPairTrimmed.Contains(' ')) - { - var pair = roPairTrimmed.Split(' '); - roString = pair[0]; - order = pair[1]; - } - else - { - roString = roPairTrimmed; - order = "ASC"; - } - - Int32 ro = Int32.Parse(roString); - - if (order.ToUpper().Equals("ASC")) - SortRows.Add(ro, XLSortOrder.Ascending); - else - SortRows.Add(ro, XLSortOrder.Descending); + var pair = roPairTrimmed.Split(' '); + roString = pair[0]; + order = pair[1]; + } + else + { + roString = roPairTrimmed; + order = "ASC"; } - SortRangeColumns(); - return this; + Int32 ro = Int32.Parse(roString); + + if (order.ToUpper().Equals("ASC")) + { + SortRows.Add(ro, XLSortOrder.Ascending); + } + else + { + SortRows.Add(ro, XLSortOrder.Descending); + } } + + SortRangeColumns(); + return this; } public IXLRange Sort(XLSortOrientation sortOrientation, String elementsToSortBy, Boolean matchCase) { @@ -727,77 +841,72 @@ { return Sort(elementsToSortBy, matchCase); } - else + SortRows.Clear(); + foreach (String roPair in elementsToSortBy.Split(',')) { - SortRows.Clear(); - foreach (String roPair in elementsToSortBy.Split(',')) + String roPairTrimmed = roPair.Trim(); + String roString; + String order; + if (roPairTrimmed.Contains(' ')) { - String roPairTrimmed = roPair.Trim(); - String roString; - String order; - if (roPairTrimmed.Contains(' ')) - { - var pair = roPairTrimmed.Split(' '); - roString = pair[0]; - order = pair[1]; - } - else - { - roString = roPairTrimmed; - order = "ASC"; - } - - Int32 ro = Int32.Parse(roString); - - if (order.ToUpper().Equals("ASC")) - SortRows.Add(ro, XLSortOrder.Ascending,true, matchCase); - else - SortRows.Add(ro, XLSortOrder.Descending, true, matchCase); + var pair = roPairTrimmed.Split(' '); + roString = pair[0]; + order = pair[1]; + } + else + { + roString = roPairTrimmed; + order = "ASC"; } - SortRangeColumns(); - return this; - } - } + Int32 ro = Int32.Parse(roString); + if (order.ToUpper().Equals("ASC")) + { + SortRows.Add(ro, XLSortOrder.Ascending, true, matchCase); + } + else + { + SortRows.Add(ro, XLSortOrder.Descending, true, matchCase); + } + } + + SortRangeColumns(); + return this; + } #region Sort Rows private void SortRangeRows() { - SortingRangeRows(1, this.RowCount()); + SortingRangeRows(1, RowCount()); } private void SwapRows(Int32 row1, Int32 row2) { - Int32 cellCount = ColumnCount(); for (Int32 co = 1; co <= cellCount; co++) { - - var cell1 = (XLCell)RowQuick(row1).Cell(co); + var cell1 = (XLCell) RowQuick(row1).Cell(co); var cell1Address = cell1.Address; - var cell2 = (XLCell)RowQuick(row2).Cell(co); + var cell2 = (XLCell) RowQuick(row2).Cell(co); cell1.Address = cell2.Address; cell2.Address = cell1Address; - (Worksheet as XLWorksheet).Internals.CellsCollection[cell1.Address] = cell1; - (Worksheet as XLWorksheet).Internals.CellsCollection[cell2.Address] = cell2; + (Worksheet).Internals.CellsCollection[cell1.Address] = cell1; + (Worksheet).Internals.CellsCollection[cell2.Address] = cell2; } - } private int SortRangeRows(int begPoint, int endPoint) { int pivot = begPoint; int m = begPoint + 1; int n = endPoint; - while ((m < endPoint) && - ((RowQuick(pivot) as XLRangeRow).CompareTo((RowQuick(m) as XLRangeRow), SortColumns) >= 0)) + while ((m < endPoint) && RowQuick(pivot).CompareTo(RowQuick(m), SortColumns) >= 0) { m++; } - while ((n > begPoint) && - ((RowQuick(pivot) as XLRangeRow).CompareTo((RowQuick(n) as XLRangeRow), SortColumns) <= 0)) + while (n > begPoint && RowQuick(pivot).CompareTo(RowQuick(n), SortColumns) <= 0) { n--; } @@ -805,25 +914,21 @@ { SwapRows(m, n); - while ((m < endPoint) && - ((RowQuick(pivot) as XLRangeRow).CompareTo((RowQuick(m) as XLRangeRow), SortColumns) >= 0)) + while (m < endPoint && RowQuick(pivot).CompareTo(RowQuick(m), SortColumns) >= 0) { m++; } - while ((n > begPoint) && - ((RowQuick(pivot) as XLRangeRow).CompareTo((RowQuick(n) as XLRangeRow), SortColumns) <= 0)) + while (n > begPoint && RowQuick(pivot).CompareTo(RowQuick(n), SortColumns) <= 0) { n--; } - } if (pivot != n) { SwapRows(n, pivot); } return n; - } private void SortingRangeRows(int beg, int end) { @@ -831,55 +936,50 @@ { return; } - else + int pivot = SortRangeRows(beg, end); + if (pivot > beg) { - int pivot = SortRangeRows(beg, end); - if (pivot > beg) - SortingRangeRows(beg, pivot - 1); - if (pivot < end) - SortingRangeRows(pivot + 1, end); + SortingRangeRows(beg, pivot - 1); + } + if (pivot < end) + { + SortingRangeRows(pivot + 1, end); } } #endregion - #region Sort Columns private void SortRangeColumns() { - SortingRangeColumns(1, this.ColumnCount()); + SortingRangeColumns(1, ColumnCount()); } private void SwapColumns(Int32 column1, Int32 column2) { - Int32 cellCount = ColumnCount(); for (Int32 co = 1; co <= cellCount; co++) { - - var cell1 = (XLCell)ColumnQuick(column1).Cell(co); + var cell1 = (XLCell) ColumnQuick(column1).Cell(co); var cell1Address = cell1.Address; - var cell2 = (XLCell)ColumnQuick(column2).Cell(co); + var cell2 = (XLCell) ColumnQuick(column2).Cell(co); cell1.Address = cell2.Address; cell2.Address = cell1Address; - (Worksheet as XLWorksheet).Internals.CellsCollection[cell1.Address] = cell1; - (Worksheet as XLWorksheet).Internals.CellsCollection[cell2.Address] = cell2; + (Worksheet).Internals.CellsCollection[cell1.Address] = cell1; + (Worksheet).Internals.CellsCollection[cell2.Address] = cell2; } - } private int SortRangeColumns(int begPoint, int endPoint) { int pivot = begPoint; int m = begPoint + 1; int n = endPoint; - while ((m < endPoint) && - ((ColumnQuick(pivot) as XLRangeColumn).CompareTo((ColumnQuick(m) as XLRangeColumn), SortRows) >= 0)) + while ((m < endPoint) && ColumnQuick(pivot).CompareTo((ColumnQuick(m)), SortRows) >= 0) { m++; } - while ((n > begPoint) && - ((ColumnQuick(pivot) as XLRangeColumn).CompareTo((ColumnQuick(n) as XLRangeColumn), SortRows) <= 0)) + while ((n > begPoint) && ((ColumnQuick(pivot)).CompareTo((ColumnQuick(n)), SortRows) <= 0)) { n--; } @@ -887,18 +987,15 @@ { SwapColumns(m, n); - while ((m < endPoint) && - ((ColumnQuick(pivot) as XLRangeColumn).CompareTo((ColumnQuick(m) as XLRangeColumn), SortRows) >= 0)) + while ((m < endPoint) && (ColumnQuick(pivot)).CompareTo((ColumnQuick(m)), SortRows) >= 0) { m++; } - while ((n > begPoint) && - ((ColumnQuick(pivot) as XLRangeColumn).CompareTo((ColumnQuick(n) as XLRangeColumn), SortRows) <= 0)) + while ((n > begPoint) && (ColumnQuick(pivot)).CompareTo((ColumnQuick(n)), SortRows) <= 0) { n--; } - } if (pivot != n) { @@ -912,43 +1009,56 @@ { return; } - else + int pivot = SortRangeColumns(beg, end); + if (pivot > beg) { - int pivot = SortRangeColumns(beg, end); - if (pivot > beg) - SortingRangeColumns(beg, pivot - 1); - if (pivot < end) - SortingRangeColumns(pivot + 1, end); + SortingRangeColumns(beg, pivot - 1); + } + if (pivot < end) + { + SortingRangeColumns(pivot + 1, end); } } #endregion - public new IXLRange CopyTo(IXLCell target) { base.CopyTo(target); - Int32 lastRowNumber = target.Address.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.Address.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + Int32 lastRowNumber = target.Address.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.Address.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return target.Worksheet.Range(target.Address.RowNumber, target.Address.ColumnNumber, - lastRowNumber, lastColumnNumber); + return target.Worksheet.Range(target.Address.RowNumber, + target.Address.ColumnNumber, + lastRowNumber, + lastColumnNumber); } public new IXLRange CopyTo(IXLRangeBase target) { base.CopyTo(target); - Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.RangeAddress.FirstAddress.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.RangeAddress.FirstAddress.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.FirstAddress.ColumnNumber, - lastRowNumber, - lastColumnNumber); + return target.Worksheet.Range(target.RangeAddress.FirstAddress.RowNumber, + target.RangeAddress.FirstAddress.ColumnNumber, + lastRowNumber, + lastColumnNumber); } public IXLRange SetDataType(XLCellValues dataType) @@ -957,4 +1067,4 @@ return this; } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeAddress.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeAddress.cs index 8fccb20..2013fb4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeAddress.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeAddress.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Linq; namespace ClosedXML.Excel @@ -6,11 +7,13 @@ internal class XLRangeAddress : IXLRangeAddress { #region Private fields - private IXLAddress m_firstAddress; - private IXLAddress m_lastAddress; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private XLAddress m_firstAddress; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private XLAddress m_lastAddress; #endregion #region Constructor - public XLRangeAddress(IXLAddress firstAddress, IXLAddress lastAddress) + public XLRangeAddress(XLAddress firstAddress, XLAddress lastAddress) { if (firstAddress.Worksheet != lastAddress.Worksheet) { @@ -22,7 +25,7 @@ LastAddress = lastAddress; } - public XLRangeAddress(IXLWorksheet worksheet, String rangeAddress) + public XLRangeAddress(XLWorksheet worksheet, String rangeAddress) { String addressToUse; if (rangeAddress.Contains("!")) @@ -55,9 +58,10 @@ } #endregion #region Public properties - public IXLWorksheet Worksheet { get; internal set; } - - public IXLAddress FirstAddress + public XLWorksheet Worksheet { get; internal set; } + IXLWorksheet IXLRangeAddress.Worksheet { get { return Worksheet; } } + + public XLAddress FirstAddress { get { @@ -71,7 +75,14 @@ set { m_firstAddress = value; } } - public IXLAddress LastAddress + IXLAddress IXLRangeAddress.FirstAddress + { + [DebuggerStepThrough] + get { return FirstAddress; } + set { FirstAddress = value as XLAddress; } + } + + public XLAddress LastAddress { get { @@ -84,8 +95,15 @@ } set { m_lastAddress = value; } } + IXLAddress IXLRangeAddress.LastAddress + { + [DebuggerStepThrough] + get { return LastAddress; } + set { LastAddress = value as XLAddress; } + } - public Boolean IsInvalid { get; set; } + + public bool IsInvalid { get; set; } #endregion #region Public methods public override string ToString() diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 1dbed82..f58194e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -7,191 +7,311 @@ internal abstract class XLRangeBase : IXLRangeBase, IXLStylized { #region Fields - protected IXLStyle defaultStyle; + protected IXLStyle m_defaultStyle; #endregion #region Constructor - protected XLRangeBase(IXLRangeAddress rangeAddress) + protected XLRangeBase(XLRangeAddress rangeAddress) { RangeAddress = rangeAddress; } #endregion - - public IXLRangeAddress RangeAddress { get; protected set; } - public IXLWorksheet Worksheet + #region Public properties + public XLRangeAddress RangeAddress { get; protected set; } + IXLRangeAddress IXLRangeBase.RangeAddress + { + get { return RangeAddress; } + } + public XLWorksheet Worksheet + { + get { return RangeAddress.Worksheet; } + } + IXLWorksheet IXLRangeBase.Worksheet + { + get { return RangeAddress.Worksheet; } + } + + public String FormulaA1 + { + set { Cells().ForEach(c => c.FormulaA1 = value); } + } + public String FormulaR1C1 + { + set { Cells().ForEach(c => c.FormulaR1C1 = value); } + } + public Boolean ShareString + { + set { Cells().ForEach(c => c.ShareString = value); } + } + + public IXLHyperlinks Hyperlinks { get { - return RangeAddress.Worksheet; + var hyperlinks = new XLHyperlinks(); + var hls = from hl in Worksheet.Hyperlinks + where Contains(hl.Cell.AsRange()) + select hl; + hls.ForEach(hyperlinks.Add); + return hyperlinks; } } - public IXLCell FirstCell() + public IXLDataValidation DataValidation { - return this.Cell(1, 1); + get + { + var thisRange = AsRange(); + if (Worksheet.DataValidations.ContainsSingle(thisRange)) + { + return Worksheet.DataValidations.Where(dv => dv.Ranges.Contains(thisRange)).Single(); + } + var dvEmpty = new List(); + foreach (var dv in Worksheet.DataValidations) + { + foreach (var dvRange in dv.Ranges) + { + if (dvRange.Intersects(this)) + { + dv.Ranges.Remove(dvRange); + foreach (var c in dvRange.Cells()) + { + if (!Contains(c.Address.ToString())) + { + dv.Ranges.Add(c.AsRange()); + } + } + if (dv.Ranges.Count() == 0) + { + dvEmpty.Add(dv); + } + } + } + } + + dvEmpty.ForEach(dv => Worksheet.DataValidations.Delete(dv)); + + var newRanges = new XLRanges(); + newRanges.Add(AsRange()); + var dataValidation = new XLDataValidation(newRanges, Worksheet); + + Worksheet.DataValidations.Add(dataValidation); + return dataValidation; + } } - public IXLCell LastCell() + + public Object Value { - return this.Cell(this.RowCount(), this.ColumnCount()); + set { Cells().ForEach(c => c.Value = value); } } - - public IXLCell FirstCellUsed() + + public XLCellValues DataType + { + set { Cells().ForEach(c => c.DataType = value); } + } + + public IXLRanges RangesUsed + { + get + { + var retVal = new XLRanges(); + retVal.Add(AsRange()); + return retVal; + } + } + #endregion + IXLCell IXLRangeBase.FirstCell() + { + return FirstCell(); + } + public XLCell FirstCell() + { + return Cell(1, 1); + } + IXLCell IXLRangeBase.LastCell() + { + return LastCell(); + } + public XLCell LastCell() + { + return Cell(RowCount(), ColumnCount()); + } + + IXLCell IXLRangeBase.FirstCellUsed() { return FirstCellUsed(false); } - public IXLCell FirstCellUsed(Boolean includeStyles) + IXLCell IXLRangeBase.FirstCellUsed(bool includeStyles) + { + return FirstCellUsed(includeStyles); + } + public XLCell FirstCellUsed() + { + return FirstCellUsed(false); + } + public XLCell FirstCellUsed(Boolean includeStyles) { var cellsUsed = CellsUsed(includeStyles); - if (!cellsUsed.Any()) + if (!cellsUsed.Any()) { return null; } - else - { - var firstRow = cellsUsed.Min(c => c.Address.RowNumber); - var firstColumn = cellsUsed.Min(c => c.Address.ColumnNumber); - return Worksheet.Cell(firstRow, firstColumn); - //var firstAddress = cellsUsed.Min(c => c.Address); - //return Worksheet.Cell(firstAddress); - } + var firstRow = cellsUsed.Min(c => c.Address.RowNumber); + var firstColumn = cellsUsed.Min(c => c.Address.ColumnNumber); + return Worksheet.Cell(firstRow, firstColumn); + //var firstAddress = cellsUsed.Min(c => c.Address); + //return Worksheet.Cell(firstAddress); } - public IXLCell LastCellUsed() + IXLCell IXLRangeBase.LastCellUsed() { return LastCellUsed(false); } - public IXLCell LastCellUsed(Boolean includeStyles) + IXLCell IXLRangeBase.LastCellUsed(bool includeStyles) + { + return LastCellUsed(includeStyles); + } + public XLCell LastCellUsed() + { + return LastCellUsed(false); + } + public XLCell LastCellUsed(bool includeStyles) { var cellsUsed = CellsUsed(includeStyles); - if (!cellsUsed.Any()) + if (!cellsUsed.Any()) { return null; } - else - { - var lastRow = cellsUsed.Max(c => c.Address.RowNumber); - var lastColumn = cellsUsed.Max(c => c.Address.ColumnNumber); - return Worksheet.Cell(lastRow, lastColumn); - // var lastAddress = cellsUsed.Max(c => c.Address); - // return Worksheet.Cell(lastAddress); - } - } - - public IXLCell Cell(Int32 row, Int32 column) - { - return this.Cell(new XLAddress(Worksheet, row, column, false, false)); - } - public IXLCell Cell(String cellAddressInRange) - { - return this.Cell(XLAddress.Create(Worksheet, cellAddressInRange)); + var lastRow = cellsUsed.Max(c => c.Address.RowNumber); + var lastColumn = cellsUsed.Max(c => c.Address.ColumnNumber); + return Worksheet.Cell(lastRow, lastColumn); + // var lastAddress = cellsUsed.Max(c => c.Address); + // return Worksheet.Cell(lastAddress); } - public IXLCell Cell(Int32 row, String column) + public XLCell Cell(Int32 row, Int32 column) { - return this.Cell(new XLAddress(Worksheet, row, column, false, false)); + return Cell(new XLAddress(Worksheet, row, column, false, false)); } - public IXLCell Cell(IXLAddress cellAddressInRange) + + public XLCell Cell(String cellAddressInRange) + { + return Cell(XLAddress.Create(Worksheet, cellAddressInRange)); + } + + public XLCell Cell(Int32 row, String column) + { + return Cell(new XLAddress(Worksheet, row, column, false, false)); + } + public XLCell Cell(IXLAddress cellAddressInRange) { return Cell(cellAddressInRange.RowNumber, cellAddressInRange.ColumnNumber); } - public IXLCell Cell(XLAddress cellAddressInRange) + public XLCell Cell(XLAddress cellAddressInRange) { - IXLAddress absoluteAddress = cellAddressInRange + (XLAddress)this.RangeAddress.FirstAddress - 1; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.ContainsKey(absoluteAddress)) + var absoluteAddress = cellAddressInRange + RangeAddress.FirstAddress - 1; + if (Worksheet.Internals.CellsCollection.ContainsKey(absoluteAddress)) { - return (Worksheet as XLWorksheet).Internals.CellsCollection[absoluteAddress]; + return Worksheet.Internals.CellsCollection[absoluteAddress]; } - else + IXLStyle style = Style; + if (Style != null && Style.Equals(Worksheet.Style)) { - IXLStyle style = this.Style; - if (this.Style != null && this.Style.Equals(this.Worksheet.Style)) + if (Worksheet.Internals.RowsCollection.ContainsKey(absoluteAddress.RowNumber) + && !Worksheet.Internals.RowsCollection[absoluteAddress.RowNumber].Style.Equals(Worksheet.Style)) { - if ((Worksheet as XLWorksheet).Internals.RowsCollection.ContainsKey(absoluteAddress.RowNumber) - && !(Worksheet as XLWorksheet).Internals.RowsCollection[absoluteAddress.RowNumber].Style.Equals(this.Worksheet.Style)) - style = (Worksheet as XLWorksheet).Internals.RowsCollection[absoluteAddress.RowNumber].Style; - else if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.ContainsKey(absoluteAddress.ColumnNumber) - && !(Worksheet as XLWorksheet).Internals.ColumnsCollection[absoluteAddress.ColumnNumber].Style.Equals(this.Worksheet.Style)) - style = (Worksheet as XLWorksheet).Internals.ColumnsCollection[absoluteAddress.ColumnNumber].Style; + style = Worksheet.Internals.RowsCollection[absoluteAddress.RowNumber].Style; } - var newCell = new XLCell(Worksheet as XLWorksheet, absoluteAddress, style); - (Worksheet as XLWorksheet).Internals.CellsCollection.Add(absoluteAddress, newCell); - return newCell; + else if (Worksheet.Internals.ColumnsCollection.ContainsKey(absoluteAddress.ColumnNumber) + && !Worksheet.Internals.ColumnsCollection[absoluteAddress.ColumnNumber].Style.Equals(Worksheet.Style)) + { + style = Worksheet.Internals.ColumnsCollection[absoluteAddress.ColumnNumber].Style; + } } + var newCell = new XLCell(Worksheet, absoluteAddress, style); + Worksheet.Internals.CellsCollection.Add(absoluteAddress, newCell); + return newCell; } public Int32 RowCount() { - return this.RangeAddress.LastAddress.RowNumber - this.RangeAddress.FirstAddress.RowNumber + 1; + return RangeAddress.LastAddress.RowNumber - RangeAddress.FirstAddress.RowNumber + 1; } public Int32 RowNumber() { - return this.RangeAddress.FirstAddress.RowNumber; + return RangeAddress.FirstAddress.RowNumber; } public Int32 ColumnCount() { - return this.RangeAddress.LastAddress.ColumnNumber - this.RangeAddress.FirstAddress.ColumnNumber + 1; + return RangeAddress.LastAddress.ColumnNumber - RangeAddress.FirstAddress.ColumnNumber + 1; } public Int32 ColumnNumber() { - return this.RangeAddress.FirstAddress.ColumnNumber; + return RangeAddress.FirstAddress.ColumnNumber; } public String ColumnLetter() { - return this.RangeAddress.FirstAddress.ColumnLetter; + return RangeAddress.FirstAddress.ColumnLetter; } - public virtual IXLRange Range(String rangeAddressStr) + public virtual XLRange Range(String rangeAddressStr) { var rangeAddress = new XLRangeAddress(Worksheet, rangeAddressStr); return Range(rangeAddress); } - public IXLRange Range(IXLCell firstCell, IXLCell lastCell) + public XLRange Range(IXLCell firstCell, IXLCell lastCell) { return Range(firstCell.Address, lastCell.Address); } - public IXLRange Range(String firstCellAddress, String lastCellAddress) + public XLRange Range(String firstCellAddress, String lastCellAddress) { var rangeAddress = new XLRangeAddress(XLAddress.Create(Worksheet, firstCellAddress), XLAddress.Create(Worksheet, lastCellAddress)); return Range(rangeAddress); } - public IXLRange Range(Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn) + public XLRange Range(Int32 firstCellRow, Int32 firstCellColumn, Int32 lastCellRow, Int32 lastCellColumn) { - var rangeAddress = new XLRangeAddress(new XLAddress(Worksheet, firstCellRow, firstCellColumn, false, false), new XLAddress(Worksheet, lastCellRow, lastCellColumn, false, false)); + var rangeAddress = new XLRangeAddress(new XLAddress(Worksheet, firstCellRow, firstCellColumn, false, false), + new XLAddress(Worksheet, lastCellRow, lastCellColumn, false, false)); return Range(rangeAddress); } - public IXLRange Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) + public XLRange Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) { - var rangeAddress = new XLRangeAddress(firstCellAddress, lastCellAddress); + var rangeAddress = new XLRangeAddress(firstCellAddress as XLAddress, lastCellAddress as XLAddress); return Range(rangeAddress); } - public IXLRange Range(IXLRangeAddress rangeAddress) + public XLRange Range(IXLRangeAddress rangeAddress) { - var newFirstCellAddress = (XLAddress)rangeAddress.FirstAddress + (XLAddress)this.RangeAddress.FirstAddress - 1; + var newFirstCellAddress = (XLAddress) rangeAddress.FirstAddress + RangeAddress.FirstAddress - 1; newFirstCellAddress.FixedRow = rangeAddress.FirstAddress.FixedRow; newFirstCellAddress.FixedColumn = rangeAddress.FirstAddress.FixedColumn; - var newLastCellAddress = (XLAddress)rangeAddress.LastAddress + (XLAddress)this.RangeAddress.FirstAddress - 1; + var newLastCellAddress = (XLAddress) rangeAddress.LastAddress + RangeAddress.FirstAddress - 1; newLastCellAddress.FixedRow = rangeAddress.LastAddress.FixedRow; newLastCellAddress.FixedColumn = rangeAddress.LastAddress.FixedColumn; var newRangeAddress = new XLRangeAddress(newFirstCellAddress, newLastCellAddress); - var xlRangeParameters = new XLRangeParameters(newRangeAddress, this.Style); + var xlRangeParameters = new XLRangeParameters(newRangeAddress, Style); if ( - newFirstCellAddress.RowNumber < this.RangeAddress.FirstAddress.RowNumber - || newFirstCellAddress.RowNumber > this.RangeAddress.LastAddress.RowNumber - || newLastCellAddress.RowNumber > this.RangeAddress.LastAddress.RowNumber - || newFirstCellAddress.ColumnNumber < this.RangeAddress.FirstAddress.ColumnNumber - || newFirstCellAddress.ColumnNumber > this.RangeAddress.LastAddress.ColumnNumber - || newLastCellAddress.ColumnNumber > this.RangeAddress.LastAddress.ColumnNumber - ) - throw new ArgumentOutOfRangeException(String.Format("The cells {0} and {1} are outside the range '{2}'.", newFirstCellAddress.ToString(), newLastCellAddress.ToString(), this.ToString())); + newFirstCellAddress.RowNumber < RangeAddress.FirstAddress.RowNumber + || newFirstCellAddress.RowNumber > RangeAddress.LastAddress.RowNumber + || newLastCellAddress.RowNumber > RangeAddress.LastAddress.RowNumber + || newFirstCellAddress.ColumnNumber < RangeAddress.FirstAddress.ColumnNumber + || newFirstCellAddress.ColumnNumber > RangeAddress.LastAddress.ColumnNumber + || newLastCellAddress.ColumnNumber > RangeAddress.LastAddress.ColumnNumber + ) + { + throw new ArgumentOutOfRangeException(String.Format("The cells {0} and {1} are outside the range '{2}'.", + newFirstCellAddress, + newLastCellAddress, + ToString())); + } return new XLRange(xlRangeParameters); } - public IXLRanges Ranges( String ranges) + public IXLRanges Ranges(String ranges) { var retVal = new XLRanges(); var rangePairs = ranges.Split(','); @@ -206,7 +326,7 @@ var retVal = new XLRanges(); foreach (var pair in ranges) { - retVal.Add(this.Range(pair)); + retVal.Add(Range(pair)); } return retVal; } @@ -214,23 +334,25 @@ { Int32 test; if (Int32.TryParse(address, out test)) + { return "A" + address; - else - return address; + } + return address; } protected String FixRowAddress(String address) { Int32 test; if (Int32.TryParse(address, out test)) + { return XLAddress.GetColumnLetterFromNumber(test) + "1"; - else - return address; + } + return address; } public IXLCells Cells() { var cells = new XLCells(false, false, false); - cells.Add(this.RangeAddress); - return (IXLCells)cells; + cells.Add(RangeAddress); + return cells; } public IXLCells Cells(String cells) { @@ -239,21 +361,25 @@ public IXLCells CellsUsed() { var cells = new XLCells(false, true, false); - cells.Add(this.RangeAddress); - return (IXLCells)cells; + cells.Add(RangeAddress); + return cells; } - public IXLCells CellsUsed(Boolean includeStyles) + IXLCells IXLRangeBase.CellsUsed(Boolean includeStyles) + { + return CellsUsed(includeStyles); + } + public XLCells CellsUsed(bool includeStyles) { var cells = new XLCells(false, true, includeStyles); - cells.Add(this.RangeAddress); - return (IXLCells)cells; + cells.Add(RangeAddress); + return cells; } public IXLRange Merge() { - var tAddress = this.RangeAddress.ToString(); + var tAddress = RangeAddress.ToString(); Boolean foundOne = false; - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var m in (Worksheet).Internals.MergedRanges) { var mAddress = m.RangeAddress.ToString(); if (mAddress == tAddress) @@ -264,22 +390,24 @@ } if (!foundOne) - (Worksheet as XLWorksheet).Internals.MergedRanges.Add(this.AsRange()); + { + (Worksheet).Internals.MergedRanges.Add(AsRange()); + } return AsRange(); } public IXLRange Unmerge() { - var tAddress = this.RangeAddress.ToString(); - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + var tAddress = RangeAddress.ToString(); + foreach (var m in (Worksheet).Internals.MergedRanges) { var mAddress = m.RangeAddress.ToString(); if (mAddress == tAddress) { - (Worksheet as XLWorksheet).Internals.MergedRanges.Remove(this.AsRange()); + (Worksheet).Internals.MergedRanges.Remove(AsRange()); break; } } - + return AsRange(); } @@ -289,29 +417,46 @@ } public IXLRangeColumns InsertColumnsAfter(Int32 numberOfColumns, Boolean expandRange) { - var retVal = this.InsertColumnsAfter(false, numberOfColumns); + var retVal = InsertColumnsAfter(false, numberOfColumns); // Adjust the range if (expandRange) { - this.RangeAddress = new XLRangeAddress( - new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber + numberOfColumns, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + RangeAddress = new XLRangeAddress( + new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.FirstAddress.FixedRow, + RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber + numberOfColumns, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn)); } return retVal; } public IXLRangeColumns InsertColumnsAfter(Boolean onlyUsedCells, Int32 numberOfColumns) { - var columnCount = this.ColumnCount(); - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber + columnCount; - if (firstColumn > XLWorksheet.MaxNumberOfColumns) firstColumn = XLWorksheet.MaxNumberOfColumns; - var lastColumn = firstColumn + this.ColumnCount() - 1; - if (lastColumn > XLWorksheet.MaxNumberOfColumns) lastColumn = XLWorksheet.MaxNumberOfColumns; + var columnCount = ColumnCount(); + var firstColumn = RangeAddress.FirstAddress.ColumnNumber + columnCount; + if (firstColumn > XLWorksheet.MaxNumberOfColumns) + { + firstColumn = XLWorksheet.MaxNumberOfColumns; + } + var lastColumn = firstColumn + ColumnCount() - 1; + if (lastColumn > XLWorksheet.MaxNumberOfColumns) + { + lastColumn = XLWorksheet.MaxNumberOfColumns; + } - var firstRow = this.RangeAddress.FirstAddress.RowNumber; - var lastRow = firstRow + this.RowCount() - 1; - if (lastRow > XLWorksheet.MaxNumberOfRows) lastRow = XLWorksheet.MaxNumberOfRows; + var firstRow = RangeAddress.FirstAddress.RowNumber; + var lastRow = firstRow + RowCount() - 1; + if (lastRow > XLWorksheet.MaxNumberOfRows) + { + lastRow = XLWorksheet.MaxNumberOfRows; + } - var newRange = (XLRange)this.Worksheet.Range(firstRow, firstColumn, lastRow, lastColumn); + var newRange = Worksheet.Range(firstRow, firstColumn, lastRow, lastColumn); return newRange.InsertColumnsBefore(onlyUsedCells, numberOfColumns); } public IXLRangeColumns InsertColumnsBefore(Int32 numberOfColumns) @@ -320,37 +465,44 @@ } public IXLRangeColumns InsertColumnsBefore(Int32 numberOfColumns, Boolean expandRange) { - var retVal = this.InsertColumnsBefore(false, numberOfColumns); + var retVal = InsertColumnsBefore(false, numberOfColumns); // Adjust the range if (expandRange) { - this.RangeAddress = new XLRangeAddress( - new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + RangeAddress = new XLRangeAddress( + new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, + RangeAddress.FirstAddress.FixedRow, + RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn)); } return retVal; } public IXLRangeColumns InsertColumnsBefore(Boolean onlyUsedCells, Int32 numberOfColumns) { - foreach (var ws in (Worksheet as XLWorksheet).Internals.Workbook.Worksheets) + foreach (var ws in (Worksheet).Internals.Workbook.WorksheetsInternal) { - var xlWorksheet = (XLWorksheet)ws; - foreach (var cell in xlWorksheet.Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) + foreach (var cell in ws.Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) { - cell.ShiftFormulaColumns((XLRange)this.AsRange(), numberOfColumns); + cell.ShiftFormulaColumns((XLRange) AsRange(), numberOfColumns); } } var cellsToInsert = new Dictionary(); var cellsToDelete = new List(); var cellsToBlank = new List(); - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber; - var firstRow = this.RangeAddress.FirstAddress.RowNumber; - var lastRow = this.RangeAddress.FirstAddress.RowNumber + this.RowCount() - 1; + var firstColumn = RangeAddress.FirstAddress.ColumnNumber; + var firstRow = RangeAddress.FirstAddress.RowNumber; + var lastRow = RangeAddress.FirstAddress.RowNumber + RowCount() - 1; if (!onlyUsedCells) { - var lastColumn = this.Worksheet.LastColumnUsed().ColumnNumber(); + var lastColumn = Worksheet.LastColumnUsed().ColumnNumber(); for (var co = lastColumn; co >= firstColumn; co--) { @@ -360,61 +512,69 @@ var newColumn = co + numberOfColumns; var newKey = new XLAddress(Worksheet, ro, newColumn, false, false); IXLCell oldCell; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.ContainsKey(oldKey)) + if ((Worksheet).Internals.CellsCollection.ContainsKey(oldKey)) { - oldCell = (Worksheet as XLWorksheet).Internals.CellsCollection[oldKey]; + oldCell = (Worksheet).Internals.CellsCollection[oldKey]; } else { - oldCell = this.Worksheet.Cell(oldKey); + oldCell = Worksheet.Cell(oldKey); } - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, oldCell.Style); - newCell.CopyValues((XLCell)oldCell); + var newCell = new XLCell(Worksheet, newKey, oldCell.Style); + newCell.CopyValues((XLCell) oldCell); cellsToInsert.Add(newKey, newCell); cellsToDelete.Add(oldKey); if (oldKey.ColumnNumber < firstColumn + numberOfColumns) + { cellsToBlank.Add(oldKey); + } } } } else { - foreach (var c in (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => - c.Key.ColumnNumber >= firstColumn - && c.Key.RowNumber >= firstRow - && c.Key.RowNumber <= lastRow - )) + foreach (var c in (Worksheet).Internals.CellsCollection + .Where(c => + c.Key.ColumnNumber >= firstColumn + && c.Key.RowNumber >= firstRow + && c.Key.RowNumber <= lastRow + )) { var newColumn = c.Key.ColumnNumber + numberOfColumns; var newKey = new XLAddress(Worksheet, c.Key.RowNumber, newColumn, false, false); - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, c.Value.Style); + var newCell = new XLCell(Worksheet, newKey, c.Value.Style); newCell.CopyValues(c.Value); cellsToInsert.Add(newKey, newCell); cellsToDelete.Add(c.Key); if (c.Key.ColumnNumber < firstColumn + numberOfColumns) + { cellsToBlank.Add(c.Key); + } } } - cellsToDelete.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Add(c.Key, c.Value)); + cellsToDelete.ForEach(c => (Worksheet).Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => (Worksheet).Internals.CellsCollection.Add(c.Key, c.Value)); foreach (var c in cellsToBlank) { IXLStyle styleToUse; - if ((Worksheet as XLWorksheet).Internals.RowsCollection.ContainsKey(c.RowNumber)) - styleToUse = (Worksheet as XLWorksheet).Internals.RowsCollection[c.RowNumber].Style; + if ((Worksheet).Internals.RowsCollection.ContainsKey(c.RowNumber)) + { + styleToUse = (Worksheet).Internals.RowsCollection[c.RowNumber].Style; + } else - styleToUse = this.Worksheet.Style; - this.Worksheet.Cell(c.RowNumber, c.ColumnNumber).Style = styleToUse; + { + styleToUse = Worksheet.Style; + } + Worksheet.Cell(c.RowNumber, c.ColumnNumber).Style = styleToUse; } - (Worksheet as XLWorksheet).NotifyRangeShiftedColumns((XLRange)this.AsRange(), numberOfColumns); + (Worksheet).NotifyRangeShiftedColumns((XLRange) AsRange(), numberOfColumns); return Worksheet.Range( - RangeAddress.FirstAddress.RowNumber, - RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, - RangeAddress.LastAddress.RowNumber, - RangeAddress.LastAddress.ColumnNumber - numberOfColumns - ).Columns(); + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber - numberOfColumns, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber - numberOfColumns + ).Columns(); } public IXLRangeRows InsertRowsBelow(Int32 numberOfRows) @@ -423,68 +583,93 @@ } public IXLRangeRows InsertRowsBelow(Int32 numberOfRows, Boolean expandRange) { - var retVal = this.InsertRowsBelow(false,numberOfRows); + var retVal = InsertRowsBelow(false, numberOfRows); // Adjust the range if (expandRange) { - this.RangeAddress = new XLRangeAddress( - new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber + numberOfRows, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + RangeAddress = new XLRangeAddress( + new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.FirstAddress.FixedRow, + RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber + numberOfRows, + RangeAddress.LastAddress.ColumnNumber, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn)); } return retVal; } public IXLRangeRows InsertRowsBelow(Boolean onlyUsedCells, Int32 numberOfRows) { - var rowCount = this.RowCount(); - var firstRow = this.RangeAddress.FirstAddress.RowNumber + rowCount; - if (firstRow > XLWorksheet.MaxNumberOfRows) firstRow = XLWorksheet.MaxNumberOfRows; - var lastRow = firstRow + this.RowCount() - 1; - if (lastRow > XLWorksheet.MaxNumberOfRows) lastRow = XLWorksheet.MaxNumberOfRows; + var rowCount = RowCount(); + var firstRow = RangeAddress.FirstAddress.RowNumber + rowCount; + if (firstRow > XLWorksheet.MaxNumberOfRows) + { + firstRow = XLWorksheet.MaxNumberOfRows; + } + var lastRow = firstRow + RowCount() - 1; + if (lastRow > XLWorksheet.MaxNumberOfRows) + { + lastRow = XLWorksheet.MaxNumberOfRows; + } - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber; - var lastColumn = firstColumn + this.ColumnCount() - 1; - if (lastColumn > XLWorksheet.MaxNumberOfColumns) lastColumn = XLWorksheet.MaxNumberOfColumns; + var firstColumn = RangeAddress.FirstAddress.ColumnNumber; + var lastColumn = firstColumn + ColumnCount() - 1; + if (lastColumn > XLWorksheet.MaxNumberOfColumns) + { + lastColumn = XLWorksheet.MaxNumberOfColumns; + } - var newRange = (XLRange)this.Worksheet.Range(firstRow, firstColumn, lastRow, lastColumn); + var newRange = Worksheet.Range(firstRow, firstColumn, lastRow, lastColumn); return newRange.InsertRowsAbove(onlyUsedCells, numberOfRows); } + public IXLRangeRows InsertRowsAbove(Int32 numberOfRows) { return InsertRowsAbove(numberOfRows, false); } public IXLRangeRows InsertRowsAbove(Int32 numberOfRows, Boolean expandRange) { - var retVal = this.InsertRowsAbove(false, numberOfRows); + var retVal = InsertRowsAbove(false, numberOfRows); // Adjust the range if (expandRange) { - this.RangeAddress = new XLRangeAddress( - new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber - numberOfRows,RangeAddress.FirstAddress.ColumnNumber, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn), - new XLAddress(Worksheet, RangeAddress.LastAddress.RowNumber, RangeAddress.LastAddress.ColumnNumber, RangeAddress.LastAddress.FixedRow, RangeAddress.LastAddress.FixedColumn)); + RangeAddress = new XLRangeAddress( + new XLAddress(Worksheet, + RangeAddress.FirstAddress.RowNumber - numberOfRows, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.FirstAddress.FixedRow, + RangeAddress.FirstAddress.FixedColumn), + new XLAddress(Worksheet, + RangeAddress.LastAddress.RowNumber, + RangeAddress.LastAddress.ColumnNumber, + RangeAddress.LastAddress.FixedRow, + RangeAddress.LastAddress.FixedColumn)); } return retVal; } - public IXLRangeRows InsertRowsAbove(Boolean onlyUsedCells, Int32 numberOfRows ) + public IXLRangeRows InsertRowsAbove(Boolean onlyUsedCells, Int32 numberOfRows) { - foreach (var ws in (Worksheet as XLWorksheet).Internals.Workbook.Worksheets) + foreach (var ws in (Worksheet).Internals.Workbook.WorksheetsInternal) { - var xlWorksheet = (XLWorksheet)ws; - foreach (var cell in (xlWorksheet as XLWorksheet).Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) + foreach (var cell in ws.Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) { - cell.ShiftFormulaRows((XLRange)this.AsRange(), numberOfRows); + cell.ShiftFormulaRows((XLRange) AsRange(), numberOfRows); } } var cellsToInsert = new Dictionary(); var cellsToDelete = new List(); var cellsToBlank = new List(); - var firstRow = this.RangeAddress.FirstAddress.RowNumber; - var firstColumn = this.RangeAddress.FirstAddress.ColumnNumber; - var lastColumn = this.RangeAddress.FirstAddress.ColumnNumber + this.ColumnCount() - 1; + var firstRow = RangeAddress.FirstAddress.RowNumber; + var firstColumn = RangeAddress.FirstAddress.ColumnNumber; + var lastColumn = RangeAddress.FirstAddress.ColumnNumber + ColumnCount() - 1; if (!onlyUsedCells) { - var lastRow = this.Worksheet.LastRowUsed().RowNumber(); + var lastRow = Worksheet.LastRowUsed().RowNumber(); for (var ro = lastRow; ro >= firstRow; ro--) { @@ -493,71 +678,79 @@ var oldKey = new XLAddress(Worksheet, ro, co, false, false); var newRow = ro + numberOfRows; var newKey = new XLAddress(Worksheet, newRow, co, false, false); - IXLCell oldCell; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.ContainsKey(oldKey)) + XLCell oldCell; + if ((Worksheet).Internals.CellsCollection.ContainsKey(oldKey)) { - oldCell = (Worksheet as XLWorksheet).Internals.CellsCollection[oldKey]; + oldCell = (Worksheet).Internals.CellsCollection[oldKey]; } else { - oldCell = this.Worksheet.Cell(oldKey); + oldCell = Worksheet.Cell(oldKey); } - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, oldCell.Style); + var newCell = new XLCell(Worksheet, newKey, oldCell.Style); newCell.CopyFrom(oldCell); cellsToInsert.Add(newKey, newCell); cellsToDelete.Add(oldKey); if (oldKey.RowNumber < firstRow + numberOfRows) + { cellsToBlank.Add(oldKey); + } } } } else { - foreach (var c in (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => - c.Key.RowNumber >= firstRow - && c.Key.ColumnNumber >= firstColumn - && c.Key.ColumnNumber <= lastColumn - )) + foreach (var c in (Worksheet).Internals.CellsCollection + .Where(c => + c.Key.RowNumber >= firstRow + && c.Key.ColumnNumber >= firstColumn + && c.Key.ColumnNumber <= lastColumn + )) { var newRow = c.Key.RowNumber + numberOfRows; var newKey = new XLAddress(Worksheet, newRow, c.Key.ColumnNumber, false, false); - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, c.Value.Style); + var newCell = new XLCell(Worksheet, newKey, c.Value.Style); newCell.CopyFrom(c.Value); cellsToInsert.Add(newKey, newCell); cellsToDelete.Add(c.Key); if (c.Key.RowNumber < firstRow + numberOfRows) + { cellsToBlank.Add(c.Key); + } } } - cellsToDelete.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Add(c.Key, c.Value)); + cellsToDelete.ForEach(c => (Worksheet).Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => (Worksheet).Internals.CellsCollection.Add(c.Key, c.Value)); foreach (var c in cellsToBlank) { IXLStyle styleToUse; - if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.ContainsKey(c.ColumnNumber)) - styleToUse = (Worksheet as XLWorksheet).Internals.ColumnsCollection[c.ColumnNumber].Style; + if ((Worksheet).Internals.ColumnsCollection.ContainsKey(c.ColumnNumber)) + { + styleToUse = (Worksheet).Internals.ColumnsCollection[c.ColumnNumber].Style; + } else - styleToUse = this.Worksheet.Style; - this.Worksheet.Cell(c.RowNumber, c.ColumnNumber).Style = styleToUse; + { + styleToUse = Worksheet.Style; + } + Worksheet.Cell(c.RowNumber, c.ColumnNumber).Style = styleToUse; } - (Worksheet as XLWorksheet).NotifyRangeShiftedRows((XLRange)this.AsRange(), numberOfRows); + (Worksheet).NotifyRangeShiftedRows((XLRange) AsRange(), numberOfRows); return Worksheet.Range( - RangeAddress.FirstAddress.RowNumber - numberOfRows, - RangeAddress.FirstAddress.ColumnNumber, - RangeAddress.LastAddress.RowNumber - numberOfRows, - RangeAddress.LastAddress.ColumnNumber - ).Rows(); + RangeAddress.FirstAddress.RowNumber - numberOfRows, + RangeAddress.FirstAddress.ColumnNumber, + RangeAddress.LastAddress.RowNumber - numberOfRows, + RangeAddress.LastAddress.ColumnNumber + ).Rows(); } public void Clear() { // Remove cells inside range - (Worksheet as XLWorksheet).Internals.CellsCollection.RemoveAll(c => - c.Address.ColumnNumber >= this.RangeAddress.FirstAddress.ColumnNumber - && c.Address.ColumnNumber <= this.RangeAddress.LastAddress.ColumnNumber - && c.Address.RowNumber >= this.RangeAddress.FirstAddress.RowNumber - && c.Address.RowNumber <= this.RangeAddress.LastAddress.RowNumber + (Worksheet).Internals.CellsCollection.RemoveAll(c => + c.Address.ColumnNumber >= RangeAddress.FirstAddress.ColumnNumber + && c.Address.ColumnNumber <= RangeAddress.LastAddress.ColumnNumber + && c.Address.RowNumber >= RangeAddress.FirstAddress.RowNumber + && c.Address.RowNumber <= RangeAddress.LastAddress.RowNumber ); ClearMerged(); @@ -565,8 +758,10 @@ List hyperlinksToRemove = new List(); foreach (var hl in Worksheet.Hyperlinks) { - if (this.Contains(hl.Cell.AsRange())) + if (Contains(hl.Cell.AsRange())) + { hyperlinksToRemove.Add(hl); + } } hyperlinksToRemove.ForEach(hl => Worksheet.Hyperlinks.Delete(hl)); } @@ -575,7 +770,7 @@ { foreach (var cell in CellsUsed(true)) { - var newStyle = new XLStyle((XLCell)cell, Worksheet.Style); + var newStyle = new XLStyle((XLCell) cell, Worksheet.Style); newStyle.NumberFormat = cell.Style.NumberFormat; cell.Style = newStyle; } @@ -584,23 +779,27 @@ private void ClearMerged() { List mergeToDelete = new List(); - foreach (var merge in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var merge in (Worksheet).Internals.MergedRanges) { - if (this.Intersects(merge)) + if (Intersects(merge)) { mergeToDelete.Add(merge); } } - mergeToDelete.ForEach(m => (Worksheet as XLWorksheet).Internals.MergedRanges.Remove(m)); + mergeToDelete.ForEach(m => (Worksheet).Internals.MergedRanges.Remove(m)); } public Boolean Contains(String rangeAddress) { String addressToUse; if (rangeAddress.Contains("!")) + { addressToUse = rangeAddress.Substring(rangeAddress.IndexOf("!") + 1); + } else + { addressToUse = rangeAddress; + } XLAddress firstAddress; XLAddress lastAddress; @@ -620,7 +819,7 @@ public Boolean Contains(IXLRangeBase range) { - return Contains((XLAddress)range.RangeAddress.FirstAddress, (XLAddress)range.RangeAddress.LastAddress); + return Contains((XLAddress) range.RangeAddress.FirstAddress, (XLAddress) range.RangeAddress.LastAddress); } public Boolean Contains(XLAddress first, XLAddress last) @@ -634,133 +833,140 @@ RangeAddress.FirstAddress.ColumnNumber <= address.ColumnNumber && address.ColumnNumber <= RangeAddress.LastAddress.ColumnNumber; } - public Boolean Intersects(String rangeAddress) { - return this.Intersects(Range(rangeAddress)); + return Intersects(Range(rangeAddress)); } public Boolean Intersects(IXLRangeBase range) { - if (range.RangeAddress.IsInvalid || RangeAddress.IsInvalid) return false; + if (range.RangeAddress.IsInvalid || RangeAddress.IsInvalid) + { + return false; + } var ma = range.RangeAddress; var ra = RangeAddress; return !( // See if the two ranges intersect... - ma.FirstAddress.ColumnNumber > ra.LastAddress.ColumnNumber - || ma.LastAddress.ColumnNumber < ra.FirstAddress.ColumnNumber - || ma.FirstAddress.RowNumber > ra.LastAddress.RowNumber - || ma.LastAddress.RowNumber < ra.FirstAddress.RowNumber - ); + ma.FirstAddress.ColumnNumber > ra.LastAddress.ColumnNumber + || ma.LastAddress.ColumnNumber < ra.FirstAddress.ColumnNumber + || ma.FirstAddress.RowNumber > ra.LastAddress.RowNumber + || ma.LastAddress.RowNumber < ra.FirstAddress.RowNumber + ); } public void Delete(XLShiftDeletedCells shiftDeleteCells) { - var numberOfRows = this.RowCount(); - var numberOfColumns = this.ColumnCount(); + var numberOfRows = RowCount(); + var numberOfColumns = ColumnCount(); IXLRange shiftedRangeFormula; if (shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp) { var lastCell = Worksheet.Cell(XLWorksheet.MaxNumberOfRows, RangeAddress.LastAddress.ColumnNumber); shiftedRangeFormula = Worksheet.Range(RangeAddress.FirstAddress, lastCell.Address); if (StringExtensions.IsNullOrWhiteSpace(lastCell.GetString()) && StringExtensions.IsNullOrWhiteSpace(lastCell.FormulaA1)) - (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(lastCell.Address); + { + (Worksheet).Internals.CellsCollection.Remove(lastCell.Address); + } } else { var lastCell = Worksheet.Cell(RangeAddress.LastAddress.RowNumber, XLWorksheet.MaxNumberOfColumns); shiftedRangeFormula = Worksheet.Range(RangeAddress.FirstAddress, lastCell.Address); if (StringExtensions.IsNullOrWhiteSpace(lastCell.GetString()) && StringExtensions.IsNullOrWhiteSpace(lastCell.FormulaA1)) - (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(lastCell.Address); + { + (Worksheet).Internals.CellsCollection.Remove(lastCell.Address); + } } - foreach (var ws in (Worksheet as XLWorksheet).Internals.Workbook.Worksheets) + foreach (var ws in (Worksheet).Internals.Workbook.WorksheetsInternal) { - var xlWorksheet = (XLWorksheet)ws; - foreach (var cell in (xlWorksheet as XLWorksheet).Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) + foreach (var cell in ws.Internals.CellsCollection.Values.Where(c => !StringExtensions.IsNullOrWhiteSpace(c.FormulaA1))) { if (shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp) - cell.ShiftFormulaRows((XLRange)shiftedRangeFormula, numberOfRows * -1); + { + cell.ShiftFormulaRows((XLRange) shiftedRangeFormula, numberOfRows*-1); + } else - cell.ShiftFormulaColumns((XLRange)shiftedRangeFormula, numberOfColumns * -1); + { + cell.ShiftFormulaColumns((XLRange) shiftedRangeFormula, numberOfColumns*-1); + } } } // Range to shift... var cellsToInsert = new Dictionary(); var cellsToDelete = new List(); - var shiftLeftQuery = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => - c.Key.RowNumber >= this.RangeAddress.FirstAddress.RowNumber - && c.Key.RowNumber <= this.RangeAddress.LastAddress.RowNumber - && c.Key.ColumnNumber >= this.RangeAddress.FirstAddress.ColumnNumber); + var shiftLeftQuery = (Worksheet).Internals.CellsCollection + .Where(c => + c.Key.RowNumber >= RangeAddress.FirstAddress.RowNumber + && c.Key.RowNumber <= RangeAddress.LastAddress.RowNumber + && c.Key.ColumnNumber >= RangeAddress.FirstAddress.ColumnNumber); - var shiftUpQuery = (Worksheet as XLWorksheet).Internals.CellsCollection - .Where(c => - c.Key.ColumnNumber >= this.RangeAddress.FirstAddress.ColumnNumber - && c.Key.ColumnNumber <= this.RangeAddress.LastAddress.ColumnNumber - && c.Key.RowNumber >= this.RangeAddress.FirstAddress.RowNumber); + var shiftUpQuery = (Worksheet).Internals.CellsCollection + .Where(c => + c.Key.ColumnNumber >= RangeAddress.FirstAddress.ColumnNumber + && c.Key.ColumnNumber <= RangeAddress.LastAddress.ColumnNumber + && c.Key.RowNumber >= RangeAddress.FirstAddress.RowNumber); - var columnModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? this.ColumnCount() : 0; - var rowModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp ? this.RowCount() : 0; + var columnModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? ColumnCount() : 0; + var rowModifier = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp ? RowCount() : 0; var cellsQuery = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? shiftLeftQuery : shiftUpQuery; foreach (var c in cellsQuery) { var newKey = new XLAddress(Worksheet, c.Key.RowNumber - rowModifier, c.Key.ColumnNumber - columnModifier, false, false); - var newCell = new XLCell(Worksheet as XLWorksheet, newKey, c.Value.Style); + var newCell = new XLCell(Worksheet, newKey, c.Value.Style); newCell.CopyValues(c.Value); //newCell.ShiftFormula(rowModifier * -1, columnModifier * -1); cellsToDelete.Add(c.Key); - var canInsert = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft ? - c.Key.ColumnNumber > this.RangeAddress.LastAddress.ColumnNumber : - c.Key.RowNumber > this.RangeAddress.LastAddress.RowNumber; + var canInsert = shiftDeleteCells == XLShiftDeletedCells.ShiftCellsLeft + ? c.Key.ColumnNumber > RangeAddress.LastAddress.ColumnNumber + : c.Key.RowNumber > RangeAddress.LastAddress.RowNumber; if (canInsert) + { cellsToInsert.Add(newKey, newCell); + } } - cellsToDelete.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Remove(c)); - cellsToInsert.ForEach(c => (Worksheet as XLWorksheet).Internals.CellsCollection.Add(c.Key, c.Value)); - + cellsToDelete.ForEach(c => (Worksheet).Internals.CellsCollection.Remove(c)); + cellsToInsert.ForEach(c => (Worksheet).Internals.CellsCollection.Add(c.Key, c.Value)); + List mergesToRemove = new List(); - foreach (var merge in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var merge in (Worksheet).Internals.MergedRanges) { - if (this.Contains(merge)) + if (Contains(merge)) + { mergesToRemove.Add(merge); + } } - mergesToRemove.ForEach(r => (Worksheet as XLWorksheet).Internals.MergedRanges.Remove(r)); + mergesToRemove.ForEach(r => (Worksheet).Internals.MergedRanges.Remove(r)); List hyperlinksToRemove = new List(); foreach (var hl in Worksheet.Hyperlinks) { - if (this.Contains(hl.Cell.AsRange())) + if (Contains(hl.Cell.AsRange())) + { hyperlinksToRemove.Add(hl); + } } hyperlinksToRemove.ForEach(hl => Worksheet.Hyperlinks.Delete(hl)); - var shiftedRange = (XLRange)this.AsRange(); + var shiftedRange = (XLRange) AsRange(); if (shiftDeleteCells == XLShiftDeletedCells.ShiftCellsUp) { - (Worksheet as XLWorksheet).NotifyRangeShiftedRows(shiftedRange, rowModifier * -1); + (Worksheet).NotifyRangeShiftedRows(shiftedRange, rowModifier*-1); } else { - (Worksheet as XLWorksheet).NotifyRangeShiftedColumns(shiftedRange, columnModifier * -1); + (Worksheet).NotifyRangeShiftedColumns(shiftedRange, columnModifier*-1); } } - #region IXLStylized Members - public virtual IXLStyle Style { - get - { - return this.defaultStyle; - } - set - { - this.Cells().ForEach(c => c.Style = value); - } + get { return m_defaultStyle; } + set { Cells().ForEach(c => c.Style = value); } } public virtual IEnumerable Styles @@ -768,7 +974,7 @@ get { UpdatingStyle = true; - foreach (var cell in this.Cells()) + foreach (var cell in Cells()) { yield return cell.Style; } @@ -780,12 +986,10 @@ public virtual IXLStyle InnerStyle { - get { return this.defaultStyle; } - set { defaultStyle = new XLStyle(this, value); } + get { return m_defaultStyle; } + set { m_defaultStyle = new XLStyle(this, value); } } - #endregion - public virtual IXLRange AsRange() { return Worksheet.Range(RangeAddress.FirstAddress, RangeAddress.LastAddress); @@ -793,34 +997,22 @@ public override string ToString() { - return String.Format("'{0}'!{1}:{2}", Worksheet.Name, RangeAddress.FirstAddress.ToString(), RangeAddress.LastAddress.ToString()); + return String.Format("'{0}'!{1}:{2}", Worksheet.Name, RangeAddress.FirstAddress, RangeAddress.LastAddress); } - public string ToStringRelative() + public string ToStringRelative() { - return String.Format("'{0}'!{1}:{2}", Worksheet.Name, RangeAddress.FirstAddress.ToStringRelative(), RangeAddress.LastAddress.ToStringRelative()); + return String.Format("'{0}'!{1}:{2}", + Worksheet.Name, + RangeAddress.FirstAddress.ToStringRelative(), + RangeAddress.LastAddress.ToStringRelative()); } - public string ToStringFixed() + public string ToStringFixed() { return String.Format("'{0}'!{1}:{2}", Worksheet.Name, RangeAddress.FirstAddress.ToStringFixed(), RangeAddress.LastAddress.ToStringFixed()); } - public String FormulaA1 - { - set - { - Cells().ForEach(c => c.FormulaA1 = value); - } - } - public String FormulaR1C1 - { - set - { - Cells().ForEach(c => c.FormulaR1C1 = value); - } - } - public IXLRange AddToNamed(String rangeName) { return AddToNamed(rangeName, XLScope.Workbook); @@ -834,7 +1026,7 @@ IXLNamedRanges namedRanges; if (scope == XLScope.Workbook) { - namedRanges = (Worksheet as XLWorksheet).Internals.Workbook.NamedRanges; + namedRanges = (Worksheet).Internals.Workbook.NamedRanges; } else { @@ -844,11 +1036,11 @@ if (namedRanges.Any(nr => nr.Name.ToLower() == rangeName.ToLower())) { var namedRange = namedRanges.Where(nr => nr.Name.ToLower() == rangeName.ToLower()).Single(); - namedRange.Add((Worksheet as XLWorksheet).Internals.Workbook, this.ToStringFixed()); + namedRange.Add((Worksheet).Internals.Workbook, ToStringFixed()); } else { - namedRanges.Add(rangeName, this.ToStringFixed(), comment); + namedRanges.Add(rangeName, ToStringFixed(), comment); } return AsRange(); } @@ -858,19 +1050,19 @@ if (!thisRangeAddress.IsInvalid && !shiftedRange.RangeAddress.IsInvalid) { if ((columnsShifted < 0 - // all columns - && thisRangeAddress.FirstAddress.ColumnNumber >= shiftedRange.RangeAddress.FirstAddress.ColumnNumber - && thisRangeAddress.LastAddress.ColumnNumber <= shiftedRange.RangeAddress.FirstAddress.ColumnNumber - columnsShifted - // all rows - && thisRangeAddress.FirstAddress.RowNumber >= shiftedRange.RangeAddress.FirstAddress.RowNumber - && thisRangeAddress.LastAddress.RowNumber <= shiftedRange.RangeAddress.LastAddress.RowNumber + // all columns + && thisRangeAddress.FirstAddress.ColumnNumber >= shiftedRange.RangeAddress.FirstAddress.ColumnNumber + && thisRangeAddress.LastAddress.ColumnNumber <= shiftedRange.RangeAddress.FirstAddress.ColumnNumber - columnsShifted + // all rows + && thisRangeAddress.FirstAddress.RowNumber >= shiftedRange.RangeAddress.FirstAddress.RowNumber + && thisRangeAddress.LastAddress.RowNumber <= shiftedRange.RangeAddress.LastAddress.RowNumber ) || ( - shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber - && shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber - && shiftedRange.RangeAddress.LastAddress.RowNumber >= thisRangeAddress.LastAddress.RowNumber - && shiftedRange.ColumnCount() > - (thisRangeAddress.LastAddress.ColumnNumber - thisRangeAddress.FirstAddress.ColumnNumber + 1) - + (thisRangeAddress.FirstAddress.ColumnNumber - shiftedRange.RangeAddress.FirstAddress.ColumnNumber))) + shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber + && shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber + && shiftedRange.RangeAddress.LastAddress.RowNumber >= thisRangeAddress.LastAddress.RowNumber + && shiftedRange.ColumnCount() > + (thisRangeAddress.LastAddress.ColumnNumber - thisRangeAddress.FirstAddress.ColumnNumber + 1) + + (thisRangeAddress.FirstAddress.ColumnNumber - shiftedRange.RangeAddress.FirstAddress.ColumnNumber))) { thisRangeAddress.IsInvalid = true; } @@ -880,19 +1072,28 @@ && shiftedRange.RangeAddress.LastAddress.RowNumber >= thisRangeAddress.LastAddress.RowNumber) { if ( - (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber && columnsShifted > 0) - || (shiftedRange.RangeAddress.FirstAddress.ColumnNumber < thisRangeAddress.FirstAddress.ColumnNumber && columnsShifted < 0) - ) - thisRangeAddress.FirstAddress = new XLAddress(Worksheet, - thisRangeAddress.FirstAddress.RowNumber, - thisRangeAddress.FirstAddress.ColumnNumber + columnsShifted, - thisRangeAddress.FirstAddress.FixedRow, thisRangeAddress.FirstAddress.FixedColumn); + (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber && + columnsShifted > 0) + || + (shiftedRange.RangeAddress.FirstAddress.ColumnNumber < thisRangeAddress.FirstAddress.ColumnNumber && + columnsShifted < 0) + ) + { + thisRangeAddress.FirstAddress = new XLAddress(Worksheet, + thisRangeAddress.FirstAddress.RowNumber, + thisRangeAddress.FirstAddress.ColumnNumber + columnsShifted, + thisRangeAddress.FirstAddress.FixedRow, + thisRangeAddress.FirstAddress.FixedColumn); + } if (shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.LastAddress.ColumnNumber) - thisRangeAddress.LastAddress = new XLAddress(Worksheet, - thisRangeAddress.LastAddress.RowNumber, - thisRangeAddress.LastAddress.ColumnNumber + columnsShifted, - thisRangeAddress.LastAddress.FixedRow, thisRangeAddress.LastAddress.FixedColumn); + { + thisRangeAddress.LastAddress = new XLAddress(Worksheet, + thisRangeAddress.LastAddress.RowNumber, + thisRangeAddress.LastAddress.ColumnNumber + columnsShifted, + thisRangeAddress.LastAddress.FixedRow, + thisRangeAddress.LastAddress.FixedColumn); + } } } } @@ -903,19 +1104,19 @@ if (!thisRangeAddress.IsInvalid && !shiftedRange.RangeAddress.IsInvalid) { if ((rowsShifted < 0 - // all columns - && thisRangeAddress.FirstAddress.ColumnNumber >= shiftedRange.RangeAddress.FirstAddress.ColumnNumber - && thisRangeAddress.LastAddress.ColumnNumber <= shiftedRange.RangeAddress.FirstAddress.ColumnNumber - // all rows - && thisRangeAddress.FirstAddress.RowNumber >= shiftedRange.RangeAddress.FirstAddress.RowNumber - && thisRangeAddress.LastAddress.RowNumber <= shiftedRange.RangeAddress.LastAddress.RowNumber - rowsShifted - ) || ( - shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber - && shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber - && shiftedRange.RangeAddress.LastAddress.ColumnNumber >= thisRangeAddress.LastAddress.ColumnNumber - && shiftedRange.RowCount() > - (thisRangeAddress.LastAddress.RowNumber - thisRangeAddress.FirstAddress.RowNumber + 1) - + (thisRangeAddress.FirstAddress.RowNumber - shiftedRange.RangeAddress.FirstAddress.RowNumber))) + // all columns + && thisRangeAddress.FirstAddress.ColumnNumber >= shiftedRange.RangeAddress.FirstAddress.ColumnNumber + && thisRangeAddress.LastAddress.ColumnNumber <= shiftedRange.RangeAddress.FirstAddress.ColumnNumber + // all rows + && thisRangeAddress.FirstAddress.RowNumber >= shiftedRange.RangeAddress.FirstAddress.RowNumber + && thisRangeAddress.LastAddress.RowNumber <= shiftedRange.RangeAddress.LastAddress.RowNumber - rowsShifted + ) || ( + shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber + && shiftedRange.RangeAddress.FirstAddress.ColumnNumber <= thisRangeAddress.FirstAddress.ColumnNumber + && shiftedRange.RangeAddress.LastAddress.ColumnNumber >= thisRangeAddress.LastAddress.ColumnNumber + && shiftedRange.RowCount() > + (thisRangeAddress.LastAddress.RowNumber - thisRangeAddress.FirstAddress.RowNumber + 1) + + (thisRangeAddress.FirstAddress.RowNumber - shiftedRange.RangeAddress.FirstAddress.RowNumber))) { thisRangeAddress.IsInvalid = true; } @@ -925,19 +1126,25 @@ && shiftedRange.RangeAddress.LastAddress.ColumnNumber >= thisRangeAddress.LastAddress.ColumnNumber) { if ( - (shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber && rowsShifted > 0) - || (shiftedRange.RangeAddress.FirstAddress.RowNumber < thisRangeAddress.FirstAddress.RowNumber && rowsShifted < 0) - ) - thisRangeAddress.FirstAddress = new XLAddress(Worksheet, - thisRangeAddress.FirstAddress.RowNumber + rowsShifted, - thisRangeAddress.FirstAddress.ColumnNumber, - thisRangeAddress.FirstAddress.FixedRow, thisRangeAddress.FirstAddress.FixedColumn); + (shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.FirstAddress.RowNumber && rowsShifted > 0) + || (shiftedRange.RangeAddress.FirstAddress.RowNumber < thisRangeAddress.FirstAddress.RowNumber && rowsShifted < 0) + ) + { + thisRangeAddress.FirstAddress = new XLAddress(Worksheet, + thisRangeAddress.FirstAddress.RowNumber + rowsShifted, + thisRangeAddress.FirstAddress.ColumnNumber, + thisRangeAddress.FirstAddress.FixedRow, + thisRangeAddress.FirstAddress.FixedColumn); + } if (shiftedRange.RangeAddress.FirstAddress.RowNumber <= thisRangeAddress.LastAddress.RowNumber) - thisRangeAddress.LastAddress = new XLAddress(Worksheet, - thisRangeAddress.LastAddress.RowNumber + rowsShifted, - thisRangeAddress.LastAddress.ColumnNumber, - thisRangeAddress.LastAddress.FixedRow, thisRangeAddress.LastAddress.FixedColumn); + { + thisRangeAddress.LastAddress = new XLAddress(Worksheet, + thisRangeAddress.LastAddress.RowNumber + rowsShifted, + thisRangeAddress.LastAddress.ColumnNumber, + thisRangeAddress.LastAddress.FixedRow, + thisRangeAddress.LastAddress.FixedColumn); + } } } } @@ -945,87 +1152,18 @@ public IXLRange RangeUsed() { - var firstCell = FirstCellUsed(); + return RangeUsed(false); + } + + public IXLRange RangeUsed(bool includeStyles) + { + var firstCell = FirstCellUsed(includeStyles); if (firstCell == null) { return null; } - else - { - var lastCell = LastCellUsed(); - return Worksheet.Range(firstCell, lastCell); - } - } - - public Boolean ShareString - { - set - { - Cells().ForEach(c => c.ShareString = value); - } - } - - public IXLHyperlinks Hyperlinks - { - get - { - IXLHyperlinks hyperlinks = new XLHyperlinks(); - var hls = from hl in Worksheet.Hyperlinks - where Contains(hl.Cell.AsRange()) - select hl; - hls.ForEach(hl => hyperlinks.Add(hl)); - return hyperlinks; - } - } - - public IXLDataValidation DataValidation - { - get - { - var thisRange = this.AsRange(); - if (Worksheet.DataValidations.ContainsSingle(thisRange)) - { - return Worksheet.DataValidations.Where(dv => dv.Ranges.Contains(thisRange)).Single(); - } - else - { - List dvEmpty = new List(); - foreach (var dv in Worksheet.DataValidations) - { - foreach (var dvRange in dv.Ranges) - { - if (dvRange.Intersects(this)) - { - dv.Ranges.Remove(dvRange); - foreach (var c in dvRange.Cells()) - { - if (!this.Contains(c.Address.ToString())) - dv.Ranges.Add(c.AsRange()); - } - if (dv.Ranges.Count() == 0) - dvEmpty.Add(dv); - } - } - } - - dvEmpty.ForEach(dv => (Worksheet.DataValidations as XLDataValidations).Delete(dv)); - - var newRanges = new XLRanges(); - newRanges.Add(this.AsRange()); - var dataValidation = new XLDataValidation(newRanges, Worksheet as XLWorksheet); - - Worksheet.DataValidations.Add(dataValidation); - return dataValidation; - } - } - } - - public Object Value - { - set - { - Cells().ForEach(c => c.Value = value); - } + var lastCell = LastCellUsed(includeStyles); + return Worksheet.Range(firstCell, lastCell); } public IXLRangeBase SetValue(T value) @@ -1034,24 +1172,6 @@ return this; } - public XLCellValues DataType - { - set - { - Cells().ForEach(c => c.DataType = value); - } - } - - public IXLRanges RangesUsed - { - get - { - var retVal = new XLRanges(); - retVal.Add(this.AsRange()); - return retVal; - } - } - public void CopyTo(IXLRangeBase target) { CopyTo(target.FirstCell()); @@ -1070,13 +1190,15 @@ public void SetAutoFilter(Boolean autoFilter) { if (autoFilter) + { Worksheet.AutoFilterRange = this; + } else + { Worksheet.AutoFilterRange = null; + } } - - //public IXLChart CreateChart(Int32 firstRow, Int32 firstColumn, Int32 lastRow, Int32 lastColumn) //{ // IXLChart chart = new XLChart(Worksheet); @@ -1088,4 +1210,4 @@ // return chart; //} } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs index 5dd6914..c43fe91 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeColumn.cs @@ -1,31 +1,31 @@ using System; using System.Linq; - namespace ClosedXML.Excel { - internal class XLRangeColumn: XLRangeBase, IXLRangeColumn + internal class XLRangeColumn : XLRangeBase, IXLRangeColumn { + #region Constructor public XLRangeColumn(XLRangeParameters xlRangeParameters) : base(xlRangeParameters.RangeAddress) { - (Worksheet as XLWorksheet).RangeShiftedRows += new RangeShiftedRowsDelegate(Worksheet_RangeShiftedRows); - (Worksheet as XLWorksheet).RangeShiftedColumns += new RangeShiftedColumnsDelegate(Worksheet_RangeShiftedColumns); - this.defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); + (Worksheet).RangeShiftedRows += Worksheet_RangeShiftedRows; + (Worksheet).RangeShiftedColumns += Worksheet_RangeShiftedColumns; + m_defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); } public XLRangeColumn(XLRangeParameters xlRangeParameters, Boolean quick) : base(xlRangeParameters.RangeAddress) { - } + #endregion - void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) + private void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) { - ShiftColumns(this.RangeAddress, range, columnsShifted); + ShiftColumns(RangeAddress, range, columnsShifted); } - void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) + private void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) { - ShiftRows(this.RangeAddress, range, rowsShifted); + ShiftRows(RangeAddress, range, rowsShifted); } public IXLCell Cell(int row) @@ -48,18 +48,20 @@ { return Cells(firstRow + ":" + lastRow); } - - public IXLRange Range(int firstRow, int lastRow) + + public XLRange Range(int firstRow, int lastRow) { return Range(firstRow, 1, lastRow, 1); } - public override IXLRange Range(String rangeAddressStr) + public override XLRange Range(String rangeAddressStr) { String rangeAddressToUse; if (rangeAddressStr.Contains(':') || rangeAddressStr.Contains('-')) { if (rangeAddressStr.Contains('-')) + { rangeAddressStr = rangeAddressStr.Replace('-', ':'); + } String[] arrRange = rangeAddressStr.Split(':'); var firstPart = arrRange[0]; @@ -99,28 +101,34 @@ public Int32 CellCount() { - return this.RangeAddress.LastAddress.ColumnNumber - this.RangeAddress.FirstAddress.ColumnNumber + 1; + return RangeAddress.LastAddress.ColumnNumber - RangeAddress.FirstAddress.ColumnNumber + 1; } public Int32 CompareTo(XLRangeColumn otherColumn, IXLSortElements rowsToSort) { foreach (var e in rowsToSort) { - var thisCell = (XLCell)this.Cell(e.ElementNumber); - var otherCell = (XLCell)otherColumn.Cell(e.ElementNumber); + var thisCell = (XLCell) Cell(e.ElementNumber); + var otherCell = (XLCell) otherColumn.Cell(e.ElementNumber); Int32 comparison; Boolean thisCellIsBlank = StringExtensions.IsNullOrWhiteSpace(thisCell.InnerText); Boolean otherCellIsBlank = StringExtensions.IsNullOrWhiteSpace(otherCell.InnerText); if (e.IgnoreBlanks && (thisCellIsBlank || otherCellIsBlank)) { if (thisCellIsBlank && otherCellIsBlank) + { comparison = 0; + } else { if (thisCellIsBlank) + { comparison = e.SortOrder == XLSortOrder.Ascending ? 1 : -1; + } else + { comparison = e.SortOrder == XLSortOrder.Ascending ? -1 : 1; + } } } else @@ -130,9 +138,13 @@ if (thisCell.DataType == XLCellValues.Text) { if (e.MatchCase) + { comparison = thisCell.InnerText.CompareTo(otherCell.InnerText); + } else + { comparison = thisCell.InnerText.ToLower().CompareTo(otherCell.InnerText.ToLower()); + } } else if (thisCell.DataType == XLCellValues.TimeSpan) { @@ -143,18 +155,18 @@ comparison = Double.Parse(thisCell.InnerText).CompareTo(Double.Parse(otherCell.InnerText)); } } + else if (e.MatchCase) + { + comparison = thisCell.GetString().ToLower().CompareTo(otherCell.GetString().ToLower()); + } else - if (e.MatchCase) - comparison = thisCell.GetString().ToLower().CompareTo(otherCell.GetString().ToLower()); - else - comparison = thisCell.GetString().CompareTo(otherCell.GetString()); + { + comparison = thisCell.GetString().CompareTo(otherCell.GetString()); + } } if (comparison != 0) { - if (e.SortOrder == XLSortOrder.Ascending) - return comparison; - else - return comparison * -1; + return e.SortOrder == XLSortOrder.Ascending ? comparison : comparison*-1; } } return 0; @@ -162,22 +174,22 @@ public IXLRangeColumn Sort() { - this.AsRange().Sort(); + AsRange().Sort(); return this; } public IXLRangeColumn Sort(XLSortOrder sortOrder) { - this.AsRange().Sort(sortOrder); + AsRange().Sort(sortOrder); return this; } public IXLRangeColumn Sort(Boolean matchCase) { - this.AsRange().Sort(matchCase); + AsRange().Sort(matchCase); return this; } public IXLRangeColumn Sort(XLSortOrder sortOrder, Boolean matchCase) { - this.AsRange().Sort(sortOrder, matchCase); + AsRange().Sort(sortOrder, matchCase); return this; } @@ -185,33 +197,45 @@ { base.CopyTo(target); - Int32 lastRowNumber = target.Address.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.Address.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + Int32 lastRowNumber = target.Address.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.Address.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return target.Worksheet.Range(target.Address.RowNumber, target.Address.ColumnNumber, - lastRowNumber, lastColumnNumber) - .Column(1); + return target.Worksheet.Range(target.Address.RowNumber, + target.Address.ColumnNumber, + lastRowNumber, + lastColumnNumber) + .Column(1); } public new IXLRangeColumn CopyTo(IXLRangeBase target) { base.CopyTo(target); - Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.RangeAddress.FirstAddress.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + var lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.RangeAddress.FirstAddress.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.FirstAddress.ColumnNumber, - lastRowNumber, - lastColumnNumber) - .Column(1); + return target.Worksheet.Range(target.RangeAddress.FirstAddress.RowNumber, + target.RangeAddress.FirstAddress.ColumnNumber, + lastRowNumber, + lastColumnNumber) + .Column(1); } - public IXLRangeColumn Column(Int32 start, Int32 end) { return Range(start, end).FirstColumn(); @@ -228,7 +252,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var rowRange = tPair.Split(':'); firstRow = rowRange[0]; @@ -239,7 +265,7 @@ firstRow = tPair; lastRow = tPair; } - retVal.Add(this.Range(firstRow, lastRow).FirstColumn()); + retVal.Add(Range(firstRow, lastRow).FirstColumn()); } return retVal; } @@ -250,5 +276,4 @@ return this; } } -} - +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs index c9d2a8c..ab3bbf6 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeParameters.cs @@ -1,30 +1,20 @@ -using System; - - -namespace ClosedXML.Excel +namespace ClosedXML.Excel { internal class XLRangeParameters { - public XLRangeParameters(IXLRangeAddress rangeAddress, IXLStyle defaultStyle) + #region Constructor + public XLRangeParameters(XLRangeAddress rangeAddress, IXLStyle defaultStyle) { RangeAddress = rangeAddress; - + DefaultStyle = defaultStyle; } - #region Properties - - // Public - public IXLRangeAddress RangeAddress { get; private set; } - - public IXLStyle DefaultStyle { get; private set; } - public Boolean IgnoreEvents { get; set; } - - // Private - - // Override - - #endregion + #region Properties + public XLRangeAddress RangeAddress { get; private set; } + public IXLStyle DefaultStyle { get; private set; } + public bool IgnoreEvents { get; set; } + #endregion } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs index 2d3db1f..cc9cd74 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeRow.cs @@ -1,34 +1,35 @@ using System; using System.Linq; - namespace ClosedXML.Excel { - internal class XLRangeRow: XLRangeBase, IXLRangeRow + internal class XLRangeRow : XLRangeBase, IXLRangeRow { - public XLRangeParameters RangeParameters { get; private set; } - public XLRangeRow(XLRangeParameters xlRangeParameters): base(xlRangeParameters.RangeAddress) + #region Constructor + public XLRangeRow(XLRangeParameters xlRangeParameters) + : base(xlRangeParameters.RangeAddress) { - this.RangeParameters = xlRangeParameters; - - (Worksheet as XLWorksheet).RangeShiftedRows += new RangeShiftedRowsDelegate(Worksheet_RangeShiftedRows); - (Worksheet as XLWorksheet).RangeShiftedColumns += new RangeShiftedColumnsDelegate(Worksheet_RangeShiftedColumns); - this.defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); + RangeParameters = xlRangeParameters; + + (Worksheet).RangeShiftedRows += Worksheet_RangeShiftedRows; + (Worksheet).RangeShiftedColumns += Worksheet_RangeShiftedColumns; + m_defaultStyle = new XLStyle(this, xlRangeParameters.DefaultStyle); } public XLRangeRow(XLRangeParameters xlRangeParameters, Boolean quick) - : base(xlRangeParameters.RangeAddress) + : base(xlRangeParameters.RangeAddress) { - this.RangeParameters = xlRangeParameters; - + RangeParameters = xlRangeParameters; } + #endregion + public XLRangeParameters RangeParameters { get; private set; } - void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) + private void Worksheet_RangeShiftedColumns(XLRange range, int columnsShifted) { - ShiftColumns(this.RangeAddress, range, columnsShifted); + ShiftColumns(RangeAddress, range, columnsShifted); } - void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) + private void Worksheet_RangeShiftedRows(XLRange range, int rowsShifted) { - ShiftRows(this.RangeAddress, range, rowsShifted); + ShiftRows(RangeAddress, range, rowsShifted); } public IXLCell Cell(int column) @@ -54,7 +55,7 @@ { return InsertCellsAfter(numberOfColumns, true); } - public IXLCells InsertCellsAfter(int numberOfColumns, Boolean expandRange) + public IXLCells InsertCellsAfter(int numberOfColumns, Boolean expandRange) { return InsertColumnsAfter(numberOfColumns, expandRange).Cells(); } @@ -79,13 +80,15 @@ return retVal; } - public override IXLRange Range(String rangeAddressStr) + public override XLRange Range(String rangeAddressStr) { String rangeAddressToUse; if (rangeAddressStr.Contains(':') || rangeAddressStr.Contains('-')) { if (rangeAddressStr.Contains('-')) + { rangeAddressStr = rangeAddressStr.Replace('-', ':'); + } String[] arrRange = rangeAddressStr.Split(':'); var firstPart = arrRange[0]; @@ -109,33 +112,39 @@ public IXLCells Cells(String firstColumn, String lastColumn) { return Cells(XLAddress.GetColumnNumberFromLetter(firstColumn) + ":" - + XLAddress.GetColumnNumberFromLetter(lastColumn)); + + XLAddress.GetColumnNumberFromLetter(lastColumn)); } public Int32 CellCount() { - return this.RangeAddress.LastAddress.ColumnNumber - this.RangeAddress.FirstAddress.ColumnNumber + 1; + return RangeAddress.LastAddress.ColumnNumber - RangeAddress.FirstAddress.ColumnNumber + 1; } public Int32 CompareTo(XLRangeRow otherRow, IXLSortElements columnsToSort) { foreach (var e in columnsToSort) { - var thisCell = (XLCell)this.Cell(e.ElementNumber); - var otherCell = (XLCell)otherRow.Cell(e.ElementNumber); + var thisCell = (XLCell) Cell(e.ElementNumber); + var otherCell = (XLCell) otherRow.Cell(e.ElementNumber); Int32 comparison; Boolean thisCellIsBlank = StringExtensions.IsNullOrWhiteSpace(thisCell.InnerText); Boolean otherCellIsBlank = StringExtensions.IsNullOrWhiteSpace(otherCell.InnerText); if (e.IgnoreBlanks && (thisCellIsBlank || otherCellIsBlank)) { if (thisCellIsBlank && otherCellIsBlank) + { comparison = 0; + } else { if (thisCellIsBlank) + { comparison = e.SortOrder == XLSortOrder.Ascending ? 1 : -1; + } else + { comparison = e.SortOrder == XLSortOrder.Ascending ? -1 : 1; + } } } else @@ -145,9 +154,13 @@ if (thisCell.DataType == XLCellValues.Text) { if (e.MatchCase) + { comparison = thisCell.InnerText.CompareTo(otherCell.InnerText); + } else + { comparison = thisCell.InnerText.ToLower().CompareTo(otherCell.InnerText.ToLower()); + } } else if (thisCell.DataType == XLCellValues.TimeSpan) { @@ -158,18 +171,18 @@ comparison = Double.Parse(thisCell.InnerText).CompareTo(Double.Parse(otherCell.InnerText)); } } + else if (e.MatchCase) + { + comparison = thisCell.GetString().ToLower().CompareTo(otherCell.GetString().ToLower()); + } else - if (e.MatchCase) - comparison = thisCell.GetString().ToLower().CompareTo(otherCell.GetString().ToLower()); - else - comparison = thisCell.GetString().CompareTo(otherCell.GetString()); + { + comparison = thisCell.GetString().CompareTo(otherCell.GetString()); + } } if (comparison != 0) { - if (e.SortOrder == XLSortOrder.Ascending) - return comparison; - else - return comparison * -1; + return e.SortOrder == XLSortOrder.Ascending ? comparison : comparison*-1; } } return 0; @@ -177,22 +190,22 @@ public IXLRangeRow Sort() { - this.AsRange().Sort(XLSortOrientation.LeftToRight); + AsRange().Sort(XLSortOrientation.LeftToRight); return this; } public IXLRangeRow Sort(XLSortOrder sortOrder) { - this.AsRange().Sort(XLSortOrientation.LeftToRight, sortOrder); + AsRange().Sort(XLSortOrientation.LeftToRight, sortOrder); return this; } public IXLRangeRow Sort(Boolean matchCase) { - this.AsRange().Sort(XLSortOrientation.LeftToRight, matchCase); + AsRange().Sort(XLSortOrientation.LeftToRight, matchCase); return this; } public IXLRangeRow Sort(XLSortOrder sortOrder, Boolean matchCase) { - this.AsRange().Sort(XLSortOrientation.LeftToRight, sortOrder, matchCase); + AsRange().Sort(XLSortOrientation.LeftToRight, sortOrder, matchCase); return this; } @@ -200,32 +213,44 @@ { base.CopyTo(target); - Int32 lastRowNumber = target.Address.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.Address.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + Int32 lastRowNumber = target.Address.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.Address.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return target.Worksheet.Range(target.Address.RowNumber, target.Address.ColumnNumber, - lastRowNumber, lastColumnNumber) - .Row(1); + return target.Worksheet.Range(target.Address.RowNumber, + target.Address.ColumnNumber, + lastRowNumber, + lastColumnNumber) + .Row(1); } public new IXLRangeRow CopyTo(IXLRangeBase target) { base.CopyTo(target); - Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + this.RowCount() - 1; - if (lastRowNumber > XLWorksheet.MaxNumberOfRows) lastRowNumber = XLWorksheet.MaxNumberOfRows; - Int32 lastColumnNumber = target.RangeAddress.LastAddress.ColumnNumber + this.ColumnCount() - 1; - if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + RowCount() - 1; + if (lastRowNumber > XLWorksheet.MaxNumberOfRows) + { + lastRowNumber = XLWorksheet.MaxNumberOfRows; + } + Int32 lastColumnNumber = target.RangeAddress.LastAddress.ColumnNumber + ColumnCount() - 1; + if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) + { + lastColumnNumber = XLWorksheet.MaxNumberOfColumns; + } - return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.LastAddress.ColumnNumber, - lastRowNumber, - lastColumnNumber) - .Row(1); + return target.Worksheet.Range(target.RangeAddress.FirstAddress.RowNumber, + target.RangeAddress.LastAddress.ColumnNumber, + lastRowNumber, + lastColumnNumber) + .Row(1); } - public IXLRangeRow Row(Int32 start, Int32 end) { return Range(1, start, 1, end).Row(1); @@ -242,7 +267,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var columnRange = tPair.Split(':'); firstColumn = columnRange[0]; @@ -254,7 +281,7 @@ lastColumn = tPair; } - retVal.Add(this.Range(firstColumn, lastColumn).FirstRow()); + retVal.Add(Range(firstColumn, lastColumn).FirstRow()); } return retVal; } @@ -265,5 +292,4 @@ return this; } } -} - +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index 6be49b3..5653f22 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -30,7 +30,7 @@ if (IsReference) { //SMELL: Leak may occur - (Worksheet as XLWorksheet).RangeShiftedRows += Worksheet_RangeShiftedRows; + (Worksheet).RangeShiftedRows += Worksheet_RangeShiftedRows; } else { @@ -92,7 +92,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Height; + return (Worksheet).Internals.RowsCollection[RowNumber()].Height; } return m_height; } @@ -100,7 +100,7 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Height = value; + (Worksheet).Internals.RowsCollection[RowNumber()].Height = value; } else { @@ -113,20 +113,20 @@ { var rowNumber = RowNumber(); AsRange().Delete(XLShiftDeletedCells.ShiftCellsUp); - (Worksheet as XLWorksheet).Internals.RowsCollection.Remove(rowNumber); + (Worksheet).Internals.RowsCollection.Remove(rowNumber); var rowsToMove = new List(); - rowsToMove.AddRange((Worksheet as XLWorksheet).Internals.RowsCollection.Where(c => c.Key > rowNumber).Select(c => c.Key)); + rowsToMove.AddRange((Worksheet).Internals.RowsCollection.Where(c => c.Key > rowNumber).Select(c => c.Key)); foreach (var row in rowsToMove.OrderBy(r => r)) { - (Worksheet as XLWorksheet).Internals.RowsCollection.Add(row - 1, (Worksheet as XLWorksheet).Internals.RowsCollection[row]); - (Worksheet as XLWorksheet).Internals.RowsCollection.Remove(row); + (Worksheet).Internals.RowsCollection.Add(row - 1, (Worksheet).Internals.RowsCollection[row]); + (Worksheet).Internals.RowsCollection.Remove(row); } } public new IXLRows InsertRowsBelow(Int32 numberOfRows) { var rowNum = RowNumber(); - (Worksheet as XLWorksheet).Internals.RowsCollection.ShiftRowsDown(rowNum + 1, numberOfRows); + (Worksheet).Internals.RowsCollection.ShiftRowsDown(rowNum + 1, numberOfRows); XLRange range = (XLRange) Worksheet.Row(rowNum).AsRange(); range.InsertRowsBelow(true, numberOfRows); return Worksheet.Rows(rowNum + 1, rowNum + numberOfRows); @@ -135,7 +135,7 @@ public new IXLRows InsertRowsAbove(Int32 numberOfRows) { var rowNum = RowNumber(); - (Worksheet as XLWorksheet).Internals.RowsCollection.ShiftRowsDown(rowNum, numberOfRows); + (Worksheet).Internals.RowsCollection.ShiftRowsDown(rowNum, numberOfRows); // We can't use this.AsRange() because we've shifted the rows // and we want to use the old rowNum. XLRange range = (XLRange) Worksheet.Row(rowNum).AsRange(); @@ -170,7 +170,7 @@ return retVal; } - public override IXLRange Range(String rangeAddressStr) + public override XLRange Range(String rangeAddressStr) { String rangeAddressToUse; if (rangeAddressStr.Contains(':') || rangeAddressStr.Contains('-')) @@ -219,7 +219,7 @@ { Boolean isMerged = false; var cellAsRange = c.AsRange(); - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var m in (Worksheet).Internals.MergedRanges) { if (cellAsRange.Intersects(m)) { @@ -295,7 +295,7 @@ { Boolean isMerged = false; var cellAsRange = c.AsRange(); - foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + foreach (var m in (Worksheet).Internals.MergedRanges) { if (cellAsRange.Intersects(m)) { @@ -343,7 +343,7 @@ rowMaxHeight = maxHeight; break; } - else if (thisHeight > rowMaxHeight) + if (thisHeight > rowMaxHeight) { rowMaxHeight = thisHeight; } @@ -367,20 +367,13 @@ { get { - if (IsReference) - { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].IsHidden; - } - else - { - return m_isHidden; - } + return IsReference ? (Worksheet).Internals.RowsCollection[RowNumber()].IsHidden : m_isHidden; } set { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].IsHidden = value; + (Worksheet).Internals.RowsCollection[RowNumber()].IsHidden = value; } else { @@ -394,14 +387,14 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].SetStyleNoColumns(value); + (Worksheet).Internals.RowsCollection[RowNumber()].SetStyleNoColumns(value); } else { style = new XLStyle(this, value); var row = RowNumber(); - foreach (var c in (Worksheet as XLWorksheet).Internals.CellsCollection.Values.Where(c => c.Address.RowNumber == row)) + foreach (var c in (Worksheet).Internals.CellsCollection.Values.Where(c => c.Address.RowNumber == row)) { c.Style = value; } @@ -414,7 +407,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Style; + return (Worksheet).Internals.RowsCollection[RowNumber()].Style; } else { @@ -425,7 +418,7 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Style = value; + (Worksheet).Internals.RowsCollection[RowNumber()].Style = value; } else { @@ -434,20 +427,20 @@ Int32 minColumn = 1; Int32 maxColumn = 0; var row = RowNumber(); - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Values.Any(c => c.Address.RowNumber == row)) + if ((Worksheet).Internals.CellsCollection.Values.Any(c => c.Address.RowNumber == row)) { - minColumn = (Worksheet as XLWorksheet).Internals.CellsCollection.Values + minColumn = (Worksheet).Internals.CellsCollection.Values .Where(c => c.Address.RowNumber == row) .Min(c => c.Address.ColumnNumber); - maxColumn = (Worksheet as XLWorksheet).Internals.CellsCollection.Values + maxColumn = (Worksheet).Internals.CellsCollection.Values .Where(c => c.Address.RowNumber == row) .Max(c => c.Address.ColumnNumber); } - if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.Count > 0) + if ((Worksheet).Internals.ColumnsCollection.Count > 0) { - Int32 minInCollection = (Worksheet as XLWorksheet).Internals.ColumnsCollection.Keys.Min(); - Int32 maxInCollection = (Worksheet as XLWorksheet).Internals.ColumnsCollection.Keys.Max(); + Int32 minInCollection = (Worksheet).Internals.ColumnsCollection.Keys.Min(); + Int32 maxInCollection = (Worksheet).Internals.ColumnsCollection.Keys.Max(); if (minInCollection < minColumn) { minColumn = minInCollection; @@ -477,16 +470,16 @@ var row = RowNumber(); Int32 minColumn = 1; Int32 maxColumn = 0; - if ((Worksheet as XLWorksheet).Internals.CellsCollection.Values.Any(c => c.Address.RowNumber == row)) + if ((Worksheet).Internals.CellsCollection.Values.Any(c => c.Address.RowNumber == row)) { maxColumn = - (Worksheet as XLWorksheet).Internals.CellsCollection.Values.Where(c => c.Address.RowNumber == row).Max( + (Worksheet).Internals.CellsCollection.Values.Where(c => c.Address.RowNumber == row).Max( c => c.Address.ColumnNumber); } - if ((Worksheet as XLWorksheet).Internals.ColumnsCollection.Count > 0) + if ((Worksheet).Internals.ColumnsCollection.Count > 0) { - Int32 maxInCollection = (Worksheet as XLWorksheet).Internals.ColumnsCollection.Keys.Max(); + Int32 maxInCollection = (Worksheet).Internals.ColumnsCollection.Keys.Max(); if (maxInCollection > maxColumn) { maxColumn = maxInCollection; @@ -510,18 +503,15 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].InnerStyle; + return (Worksheet).Internals.RowsCollection[RowNumber()].InnerStyle; } - else - { - return new XLStyle(new XLStylizedContainer(style, this), style); - } + return new XLStyle(new XLStylizedContainer(style, this), style); } set { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].InnerStyle = value; + (Worksheet).Internals.RowsCollection[RowNumber()].InnerStyle = value; } else { @@ -541,7 +531,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Collapsed; + return (Worksheet).Internals.RowsCollection[RowNumber()].Collapsed; } else { @@ -552,7 +542,7 @@ { if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].Collapsed = value; + (Worksheet).Internals.RowsCollection[RowNumber()].Collapsed = value; } else { @@ -567,7 +557,7 @@ { if (IsReference) { - return (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].OutlineLevel; + return (Worksheet).Internals.RowsCollection[RowNumber()].OutlineLevel; } return m_outlineLevel; } @@ -575,17 +565,17 @@ { if (value < 1 || value > 8) { - throw new ArgumentOutOfRangeException("Outline level must be between 1 and 8."); + throw new ArgumentOutOfRangeException("value", "Outline level must be between 1 and 8."); } if (IsReference) { - (Worksheet as XLWorksheet).Internals.RowsCollection[RowNumber()].OutlineLevel = value; + Worksheet.Internals.RowsCollection[RowNumber()].OutlineLevel = value; } else { - (Worksheet as XLWorksheet).IncrementColumnOutline(value); - (Worksheet as XLWorksheet).DecrementColumnOutline(m_outlineLevel); + Worksheet.IncrementColumnOutline(value); + Worksheet.DecrementColumnOutline(m_outlineLevel); m_outlineLevel = value; } } @@ -668,21 +658,21 @@ return this; } - private void CopyToCell(IXLRangeRow rngRow, IXLCell cell) + private void CopyToCell(IXLRangeRow rngRow, XLCell cell) { Int32 cellCount = rngRow.CellCount(); Int32 roStart = cell.Address.RowNumber; Int32 coStart = cell.Address.ColumnNumber; for (Int32 co = coStart; co <= cellCount + coStart - 1; co++) { - (cell.Worksheet.Cell(roStart, co) as XLCell).CopyFrom(rngRow.Cell(co - coStart + 1)); + (cell.Worksheet.Cell(roStart, co)).CopyFrom((XLCell) rngRow.Cell(co - coStart + 1)); } } public new IXLRangeRow CopyTo(IXLCell target) { var rngUsed = RangeUsed().Row(1); - CopyToCell(rngUsed, target); + CopyToCell(rngUsed, (XLCell) target); Int32 lastColumnNumber = target.Address.ColumnNumber + rngUsed.CellCount() - 1; if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) @@ -705,7 +695,7 @@ Int32 targetColumnCount = targetRangeUsed.ColumnCount(); Int32 maxColumn = thisColumnCount > targetColumnCount ? thisColumnCount : targetColumnCount; - CopyToCell(Range(1, 1, 1, maxColumn).Row(1), target.FirstCell()); + CopyToCell(Range(1, 1, 1, maxColumn).Row(1), (XLCell) target.FirstCell()); Int32 lastColumnNumber = target.RangeAddress.LastAddress.ColumnNumber + maxColumn - 1; if (lastColumnNumber > XLWorksheet.MaxNumberOfColumns) @@ -713,11 +703,10 @@ lastColumnNumber = XLWorksheet.MaxNumberOfColumns; } - return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.LastAddress.ColumnNumber, - target.RangeAddress.FirstAddress.RowNumber, - lastColumnNumber) + return target.Worksheet.Range(target.RangeAddress.FirstAddress.RowNumber, + target.RangeAddress.LastAddress.ColumnNumber, + target.RangeAddress.FirstAddress.RowNumber, + lastColumnNumber) .Row(1); } public IXLRow CopyTo(IXLRow row) @@ -730,8 +719,8 @@ Int32 targetColumnCount = ReferenceEquals(lastCellUsed, null) ? 0 : row.LastCellUsed(true).Address.ColumnNumber; Int32 maxColumn = thisColumnCount > targetColumnCount ? thisColumnCount : targetColumnCount; - CopyToCell(Row(1, maxColumn), row.FirstCell()); - var newRow = row as XLRow; + CopyToCell(Row(1, maxColumn), (XLCell) row.FirstCell()); + var newRow = (XLRow) row; newRow.m_height = m_height; newRow.style = new XLStyle(newRow, Style); return newRow; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs index 8d9950d..fa736be 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs @@ -7,6 +7,41 @@ { internal class XLTable : XLRange, IXLTable { + #region Private fields + private string m_name; + internal bool m_showTotalsRow; + internal Dictionary m_fields = new Dictionary(); + private readonly Dictionary m_fieldNames = new Dictionary(); + internal HashSet m_uniqueNames; + #endregion + #region Constructor + public XLTable(XLRange range, Boolean addToTables) + : base(range.RangeParameters) + { + InitializeValues(); + + Int32 id = 1; + while (true) + { + var tableName = String.Format("Table{0}", id); + if (!Worksheet.Tables.Any(t => t.Name == tableName)) + { + Name = tableName; + AddToTables(range, addToTables); + break; + } + id++; + } + } + public XLTable(XLRange range, String name, Boolean addToTables) + : base(range.RangeParameters) + { + InitializeValues(); + + Name = name; + AddToTables(range, addToTables); + } + #endregion public String RelId { get; set; } public Boolean EmphasizeFirstColumn { get; set; } public Boolean EmphasizeLastColumn { get; set; } @@ -15,64 +50,50 @@ public Boolean ShowAutoFilter { get; set; } public XLTableTheme Theme { get; set; } - - private String name; - public String Name + public String Name { - get - { - return name; - } + get { return m_name; } set { if (Worksheet.Tables.Any(t => t.Name == value)) + { throw new ArgumentException(String.Format("This worksheet already contains a table named '{0}'", value)); + } - name = value; + m_name = value; } } - internal Boolean showTotalsRow; public Boolean ShowTotalsRow { - get { return showTotalsRow; } - set + get { return m_showTotalsRow; } + set { - if (value && !showTotalsRow) - this.InsertRowsBelow(1); - else if (!value && showTotalsRow) - this.TotalsRow().Delete(); + if (value && !m_showTotalsRow) + { + InsertRowsBelow(1); + } + else if (!value && m_showTotalsRow) + { + TotalsRow().Delete(); + } - showTotalsRow = value; + m_showTotalsRow = value; } } public IXLRange DataRange { get - { - if (showTotalsRow) - return base.Range(2,1, RowCount() - 1, ColumnCount()); - else - return base.Range(2, 1, RowCount(), ColumnCount()); - } - } - public XLTable(XLRange range, Boolean addToTables) - : base(range.RangeParameters) - { - InitializeValues(); - - Int32 id = 1; - while (true) { - String tableName = String.Format("Table{0}", id); - if (!Worksheet.Tables.Any(t => t.Name == tableName)) + if (m_showTotalsRow) { - Name = tableName; - AddToTables(range, addToTables); - break; + return base.Range(2, 1, RowCount() - 1, ColumnCount()); } - id++; + else + { + return base.Range(2, 1, RowCount(), ColumnCount()); + } } } @@ -83,62 +104,58 @@ Theme = XLTableTheme.TableStyleLight9; } - public XLTable(XLRange range, String name, Boolean addToTables) - : base(range.RangeParameters) - { - InitializeValues(); - - this.Name = name; - AddToTables(range, addToTables); - } - private void AddToTables(XLRange range, Boolean addToTables) { if (addToTables) { - uniqueNames = new HashSet(); + m_uniqueNames = new HashSet(); Int32 co = 1; foreach (var c in range.Row(1).Cells()) { - if (StringExtensions.IsNullOrWhiteSpace(((XLCell)c).InnerText)) + if (StringExtensions.IsNullOrWhiteSpace(((XLCell) c).InnerText)) + { c.Value = GetUniqueName("Column" + co.ToStringLookup()); - uniqueNames.Add(c.GetString()); + } + m_uniqueNames.Add(c.GetString()); co++; } Worksheet.Tables.Add(this); } } - internal HashSet uniqueNames; private String GetUniqueName(String originalName) { String name = originalName; - if (uniqueNames.Contains(name)) + if (m_uniqueNames.Contains(name)) { Int32 i = 1; name = originalName + i.ToStringLookup(); - while (uniqueNames.Contains(name)) + while (m_uniqueNames.Contains(name)) { i++; name = originalName + i.ToStringLookup(); } } - uniqueNames.Add(name); + m_uniqueNames.Add(name); return name; } public IXLRangeRow HeadersRow() { - return new XLTableRow(this, (XLRangeRow)base.FirstRow()); + return new XLTableRow(this, (XLRangeRow) base.FirstRow()); } public IXLRangeRow TotalsRow() { if (ShowTotalsRow) - return new XLTableRow(this, (XLRangeRow)base.LastRow()); + { + return new XLTableRow(this, (XLRangeRow) base.LastRow()); + } else + { throw new InvalidOperationException("Cannot access TotalsRow if ShowTotals property is false"); + } } public new IXLTableRow FirstRow() @@ -148,51 +165,55 @@ public new IXLTableRow FirstRowUsed() { - return new XLTableRow(this, (XLRangeRow)(DataRange.FirstRowUsed())); + return new XLTableRow(this, (XLRangeRow) (DataRange.FirstRowUsed())); } public new IXLTableRow LastRow() { if (ShowTotalsRow) - return new XLTableRow(this, (XLRangeRow)base.Row(RowCount() - 1)); + { + return new XLTableRow(this, (XLRangeRow) base.Row(RowCount() - 1)); + } else - return new XLTableRow(this, (XLRangeRow)base.Row(RowCount())); + { + return new XLTableRow(this, (XLRangeRow) base.Row(RowCount())); + } } public new IXLTableRow LastRowUsed() { - return new XLTableRow(this, (XLRangeRow)(DataRange.LastRowUsed())); + return new XLTableRow(this, (XLRangeRow) (DataRange.LastRowUsed())); } public new IXLTableRow Row(int row) { - return new XLTableRow(this, (XLRangeRow)base.Row(row + 1)); + return new XLTableRow(this, (XLRangeRow) base.Row(row + 1)); } public new IXLTableRows Rows() { - var retVal = new XLTableRows(Worksheet as XLWorksheet); + var retVal = new XLTableRows(Worksheet); foreach (var r in Enumerable.Range(1, DataRange.RowCount())) { - retVal.Add(this.Row(r)); + retVal.Add(Row(r)); } return retVal; } public new IXLTableRows Rows(int firstRow, int lastRow) { - var retVal = new XLTableRows(Worksheet as XLWorksheet); + var retVal = new XLTableRows(Worksheet); for (var ro = firstRow; ro <= lastRow; ro++) { - retVal.Add(this.Row(ro)); + retVal.Add(Row(ro)); } return retVal; } public new IXLTableRows Rows(string rows) { - var retVal = new XLTableRows(Worksheet as XLWorksheet); + var retVal = new XLTableRows(Worksheet); var rowPairs = rows.Split(','); foreach (var pair in rowPairs) { @@ -202,7 +223,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var rowRange = tPair.Split(':'); firstRow = rowRange[0]; @@ -213,7 +236,7 @@ firstRow = tPair; lastRow = tPair; } - foreach (var row in this.Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) + foreach (var row in Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) { retVal.Add(row); } @@ -262,32 +285,74 @@ return DataRange.Columns(columns); } + IXLCell IXLTable.Cell(int row, int column) + { + return Cell(row, column); + } + IXLCell IXLTable.Cell(string cellAddressInRange) + { + return Cell(cellAddressInRange); + } + IXLCell IXLTable.Cell(int row, string column) + { + return Cell(row, column); + } + IXLCell IXLTable.Cell(IXLAddress cellAddressInRange) + { + return Cell(cellAddressInRange); + } + + IXLRange IXLTable.Range(IXLRangeAddress rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLTable.Range(string rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLTable.Range(IXLCell firstCell, IXLCell lastCell) + { + return Range(firstCell, lastCell); + } + IXLRange IXLTable.Range(string firstCellAddress, string lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLTable.Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLTable.Range(int firstCellRow, int firstCellColumn, int lastCellRow, int lastCellColumn) + { + return Range(firstCellRow, firstCellColumn, lastCellRow, lastCellColumn); + } + public IXLTableField Field(String fieldName) { return Field(GetFieldIndex(fieldName)); } - internal Dictionary fields = new Dictionary(); public IXLTableField Field(Int32 fieldIndex) { - if (!fields.ContainsKey(fieldIndex)) + if (!m_fields.ContainsKey(fieldIndex)) { if (fieldIndex >= HeadersRow().CellCount()) + { throw new ArgumentOutOfRangeException(); + } - var newField = new XLTableField(this) { Index = fieldIndex, Name = HeadersRow().Cell(fieldIndex + 1).GetString() }; - fields.Add(fieldIndex, newField); + var newField = new XLTableField(this) {Index = fieldIndex, Name = HeadersRow().Cell(fieldIndex + 1).GetString()}; + m_fields.Add(fieldIndex, newField); } - return fields[fieldIndex]; + return m_fields[fieldIndex]; } - private Dictionary fieldNames = new Dictionary(); - public Int32 GetFieldIndex(String name) + public Int32 GetFieldIndex(String name) { - if (fieldNames.ContainsKey(name)) + if (m_fieldNames.ContainsKey(name)) { - return fieldNames[name].Index; + return m_fieldNames[name].Index; } else { @@ -297,19 +362,19 @@ { if (headersRow.Cell(cellPos).GetString().Equals(name)) { - if (fieldNames.ContainsKey(name)) + if (m_fieldNames.ContainsKey(name)) { throw new ArgumentException("The header row contains more than one field name '" + name + "'."); } else { - fieldNames.Add(name, Field(cellPos - 1)); + m_fieldNames.Add(name, Field(cellPos - 1)); } } } - if (fieldNames.ContainsKey(name)) + if (m_fieldNames.ContainsKey(name)) { - return fieldNames[name].Index; + return m_fieldNames[name].Index; } else { @@ -340,7 +405,9 @@ Int32 co; if (!Int32.TryParse(coString, out co)) - co = this.Field(coString).Index + 1; + { + co = Field(coString).Index + 1; + } toSortBy.Append(co); toSortBy.Append(" "); @@ -349,7 +416,5 @@ } return DataRange.Sort(toSortBy.ToString(0, toSortBy.Length - 1)); } - - } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs index 0e90d82..0ad6184 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLAddress.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Globalization; namespace ClosedXML.Excel @@ -6,7 +7,7 @@ internal class XLAddress : IXLAddress { #region Static - public static XLAddress Create(IXLWorksheet worksheet, string cellAddressString) + public static XLAddress Create(XLWorksheet worksheet, string cellAddressString) { var fixedColumn = cellAddressString[0] == '$'; Int32 startPos; @@ -26,11 +27,10 @@ } var fixedRow = cellAddressString[rowPos] == '$'; - string columnLetter = null; + string columnLetter; int rowNumber; if (fixedRow) { - if (fixedColumn) { columnLetter = cellAddressString.Substring(startPos, rowPos - 1); @@ -59,7 +59,7 @@ } private static readonly NumberFormatInfo ms_nfi = CultureInfo.InvariantCulture.NumberFormat; - private const Int32 TwoT26 = 26 * 26; + private const Int32 TwoT26 = 26*26; /// /// Gets the column number of a given column letter. /// @@ -80,14 +80,14 @@ if (length == 2) { return - ((Convert.ToByte(columnLetter[0]) - 64) * 26) + + ((Convert.ToByte(columnLetter[0]) - 64)*26) + (Convert.ToByte(columnLetter[1]) - 64); } if (length == 3) { return - ((Convert.ToByte(columnLetter[0]) - 64) * TwoT26) + - ((Convert.ToByte(columnLetter[1]) - 64) * 26) + + ((Convert.ToByte(columnLetter[0]) - 64)*TwoT26) + + ((Convert.ToByte(columnLetter[1]) - 64)*26) + (Convert.ToByte(columnLetter[2]) - 64); } throw new ApplicationException("Column Length must be between 1 and 3."); @@ -120,10 +120,7 @@ { return row > 0 && row <= XLWorksheet.MaxNumberOfRows; } - else - { - return false; - } + return false; } public static Boolean IsValidA1Address(String address) @@ -153,21 +150,21 @@ Int32 i = Convert.ToInt32( Math.Log( Convert.ToDouble( - 25 * ( + 25*( Convert.ToDouble(columnNumber) + 1 ) ) - ) / Math.Log(26) + )/Math.Log(26) ) - 1 ; i >= 0 ; i-- ) { - Int32 x = Convert.ToInt32(Math.Pow(26, i + 1) - 1) / 25 - 1; + Int32 x = Convert.ToInt32(Math.Pow(26, i + 1) - 1)/25 - 1; if (columnNumber > x) { - s += (Char)(((columnNumber - x - 1) / Convert.ToInt32(Math.Pow(26, i))) % 26 + 65); + s += (Char) (((columnNumber - x - 1)/Convert.ToInt32(Math.Pow(26, i)))%26 + 65); } } return s; @@ -207,10 +204,7 @@ { return Int32.Parse(cellAddressString.Substring(rowPos + 1), ms_nfi); } - else - { - return Int32.Parse(cellAddressString.Substring(rowPos), ms_nfi); - } + return Int32.Parse(cellAddressString.Substring(rowPos), ms_nfi); } public static Int32 GetColumnNumberFromAddress2(String cellAddressString) @@ -235,20 +229,24 @@ { return GetColumnNumberFromLetter(cellAddressString.Substring(startPos, rowPos - 1)); } - else - { - return GetColumnNumberFromLetter(cellAddressString.Substring(startPos, rowPos)); - } + return GetColumnNumberFromLetter(cellAddressString.Substring(startPos, rowPos)); } #endregion #region Private fields + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private bool m_fixedRow; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private bool m_fixedColumn; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private string m_columnLetter; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private readonly int m_rowNumber; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private readonly int m_columnNumber; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] private readonly int m_hashCode; + private String m_trimmedAddress; #endregion #region Constructors /// @@ -259,8 +257,8 @@ /// The column letter of the cell address. /// /// - public XLAddress(IXLWorksheet worksheet, int rowNumber, string columnLetter, bool fixedRow, bool fixedColumn) - : this(worksheet, rowNumber, GetColumnNumberFromLetter(columnLetter), fixedRow, fixedColumn) + public XLAddress(XLWorksheet worksheet, int rowNumber, string columnLetter, bool fixedRow, bool fixedColumn) + : this(worksheet, rowNumber, GetColumnNumberFromLetter(columnLetter), fixedRow, fixedColumn) { m_columnLetter = columnLetter; } @@ -273,8 +271,8 @@ /// The column number of the cell address. /// /// - public XLAddress(IXLWorksheet worksheet, int rowNumber, int columnNumber, bool fixedRow, bool fixedColumn) - + public XLAddress(XLWorksheet worksheet, int rowNumber, int columnNumber, bool fixedRow, bool fixedColumn) + { Worksheet = worksheet; @@ -288,7 +286,12 @@ } #endregion #region Properties - public IXLWorksheet Worksheet { get; internal set; } + public XLWorksheet Worksheet { get; internal set; } + IXLWorksheet IXLAddress.Worksheet + { + [DebuggerStepThrough] + get { return Worksheet; } + } public Boolean FixedRow { @@ -315,10 +318,7 @@ /// public Int32 ColumnNumber { - get - { - return m_columnNumber; - } + get { return m_columnNumber; } } /// @@ -355,7 +355,7 @@ { return m_rowNumber.ToStringLookup() + "," + ColumnNumber; } - if ((Worksheet as XLWorksheet).Internals.Workbook.ReferenceStyle == XLReferenceStyle.R1C1) + if ((Worksheet).Internals.Workbook.ReferenceStyle == XLReferenceStyle.R1C1) { return m_rowNumber.ToStringLookup() + "," + ColumnNumber; } @@ -363,10 +363,9 @@ } #endregion #region Methods - private String trimmedAddress; public string GetTrimmedAddress() { - return trimmedAddress ?? (trimmedAddress = ColumnLetter + m_rowNumber.ToStringLookup()); + return m_trimmedAddress ?? (m_trimmedAddress = ColumnLetter + m_rowNumber.ToStringLookup()); } public string ToStringRelative() @@ -380,50 +379,58 @@ } #endregion #region Operator Overloads - public static XLAddress operator +(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) + public static XLAddress operator +(XLAddress left, XLAddress right) { - return new XLAddress(xlCellAddressLeft.Worksheet, - xlCellAddressLeft.RowNumber + xlCellAddressRight.RowNumber, - xlCellAddressLeft.ColumnNumber + xlCellAddressRight.ColumnNumber, - xlCellAddressLeft.m_fixedRow, - xlCellAddressLeft.m_fixedColumn); + return new XLAddress(left.Worksheet, + left.RowNumber + right.RowNumber, + left.ColumnNumber + right.ColumnNumber, + left.m_fixedRow, + left.m_fixedColumn); } - public static XLAddress operator -(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) + public static XLAddress operator -(XLAddress left, XLAddress right) { - return new XLAddress(xlCellAddressLeft.Worksheet, - xlCellAddressLeft.RowNumber - xlCellAddressRight.RowNumber, - xlCellAddressLeft.ColumnNumber - xlCellAddressRight.ColumnNumber, - xlCellAddressLeft.m_fixedRow, - xlCellAddressLeft.m_fixedColumn); + return new XLAddress(left.Worksheet, + left.RowNumber - right.RowNumber, + left.ColumnNumber - right.ColumnNumber, + left.m_fixedRow, + left.m_fixedColumn); } - public static XLAddress operator +(XLAddress xlCellAddressLeft, Int32 right) + public static XLAddress operator +(XLAddress left, Int32 right) { - return new XLAddress(xlCellAddressLeft.Worksheet, - xlCellAddressLeft.RowNumber + right, - xlCellAddressLeft.ColumnNumber + right, - xlCellAddressLeft.m_fixedRow, - xlCellAddressLeft.m_fixedColumn); + return new XLAddress(left.Worksheet, + left.RowNumber + right, + left.ColumnNumber + right, + left.m_fixedRow, + left.m_fixedColumn); } - public static XLAddress operator -(XLAddress xlCellAddressLeft, Int32 right) + public static XLAddress operator -(XLAddress left, Int32 right) { - return new XLAddress(xlCellAddressLeft.Worksheet, - xlCellAddressLeft.RowNumber - right, - xlCellAddressLeft.ColumnNumber - right, - xlCellAddressLeft.m_fixedRow, - xlCellAddressLeft.m_fixedColumn); + return new XLAddress(left.Worksheet, + left.RowNumber - right, + left.ColumnNumber - right, + left.m_fixedRow, + left.m_fixedColumn); } - public static Boolean operator ==(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) + public static Boolean operator ==(XLAddress left, XLAddress right) { - return xlCellAddressLeft.Equals(xlCellAddressRight); + if (ReferenceEquals(left, right)) + { + return true; + } + if (ReferenceEquals(left, null)) + { + return false; + } + return left.Equals(right); } - public static Boolean operator !=(XLAddress xlCellAddressLeft, XLAddress xlCellAddressRight) + public static Boolean operator !=(XLAddress left, XLAddress right) { - return !(xlCellAddressLeft == xlCellAddressRight); + return !(left == right); } #endregion #region Interface Requirements @@ -448,16 +455,19 @@ return (obj).GetHashCode(); } - public override Int32 GetHashCode() { return m_hashCode; } #endregion #region IEquatable Members - public Boolean Equals(IXLAddress other) + public bool Equals(IXLAddress other) { var right = other as XLAddress; + if (ReferenceEquals(right, null)) + { + return false; + } if (m_hashCode != right.m_hashCode) { return false; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 6169a21..fd04cbc 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -1,24 +1,196 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; namespace ClosedXML.Excel { - public enum XLCalculateMode { Auto, AutoNoTable, Manual, Default }; - public enum XLReferenceStyle { R1C1, A1, Default }; + public enum XLCalculateMode + { + Auto, + AutoNoTable, + Manual, + Default + }; + + public enum XLReferenceStyle + { + R1C1, + A1, + Default + }; + public partial class XLWorkbook { - private enum XLLoadSource { New, File, Stream }; - private XLLoadSource loadSource = XLLoadSource.New; + #region Static + private static IXLStyle ms_defaultStyle; + public static IXLStyle DefaultStyle + { + get + { + if (ms_defaultStyle == null) + { + ms_defaultStyle = new XLStyle(null, null) + { + Font = new XLFont(null, null) + { + Bold = false, + Italic = false, + Underline = XLFontUnderlineValues.None, + Strikethrough = false, + VerticalAlignment = XLFontVerticalTextAlignmentValues.Baseline, + FontSize = 11, + FontColor = XLColor.FromArgb(0, 0, 0), + FontName = "Calibri", + FontFamilyNumbering = XLFontFamilyNumberingValues.Swiss + }, + Fill = new XLFill(null) + { + BackgroundColor = XLColor.FromIndex(64), + PatternType = XLFillPatternValues.None, + PatternColor = XLColor.FromIndex(64) + }, + Border = new XLBorder(null, null) + { + BottomBorder = XLBorderStyleValues.None, + DiagonalBorder = XLBorderStyleValues.None, + DiagonalDown = false, + DiagonalUp = false, + LeftBorder = XLBorderStyleValues.None, + RightBorder = XLBorderStyleValues.None, + TopBorder = XLBorderStyleValues.None, + BottomBorderColor = XLColor.Black, + DiagonalBorderColor = XLColor.Black, + LeftBorderColor = XLColor.Black, + RightBorderColor = XLColor.Black, + TopBorderColor = XLColor.Black + }, + NumberFormat = new XLNumberFormat(null, null) {NumberFormatId = 0}, + Alignment = new XLAlignment(null) + { + Horizontal = XLAlignmentHorizontalValues.General, + Indent = 0, + JustifyLastLine = false, + ReadingOrder = XLAlignmentReadingOrderValues.ContextDependent, + RelativeIndent = 0, + ShrinkToFit = false, + TextRotation = 0, + Vertical = XLAlignmentVerticalValues.Bottom, + WrapText = false + }, + Protection = new XLProtection(null) + { + Locked = true, + Hidden = false + } + }; + } + return ms_defaultStyle; + } + } + + public static Double DefaultRowHeight { get; private set; } + public static Double DefaultColumnWidth { get; private set; } + + public static IXLPageSetup DefaultPageOptions + { + get + { + var defaultPageOptions = new XLPageSetup(null, null) + { + PageOrientation = XLPageOrientation.Default, + Scale = 100, + PaperSize = XLPaperSize.LetterPaper, + Margins = new XLMargins + { + Top = 0.75, + Bottom = 0.5, + Left = 0.75, + Right = 0.75, + Header = 0.5, + Footer = 0.75 + }, + ScaleHFWithDocument = true, + AlignHFWithMargins = true, + PrintErrorValue = XLPrintErrorValues.Displayed, + ShowComments = XLShowCommentsValues.None + }; + return defaultPageOptions; + } + } + + public static IXLOutline DefaultOutline + { + get + { + return new XLOutline(null) + { + SummaryHLocation = XLOutlineSummaryHLocation.Right, + SummaryVLocation = XLOutlineSummaryVLocation.Bottom + }; + } + } + #endregion + private void InitializeTheme() + { + Theme = new XLTheme + { + Text1 = XLColor.FromHtml("#FF000000"), + Background1 = XLColor.FromHtml("#FFFFFFFF"), + Text2 = XLColor.FromHtml("#FF1F497D"), + Background2 = XLColor.FromHtml("#FFEEECE1"), + Accent1 = XLColor.FromHtml("#FF4F81BD"), + Accent2 = XLColor.FromHtml("#FFC0504D"), + Accent3 = XLColor.FromHtml("#FF9BBB59"), + Accent4 = XLColor.FromHtml("#FF8064A2"), + Accent5 = XLColor.FromHtml("#FF4BACC6"), + Accent6 = XLColor.FromHtml("#FFF79646"), + Hyperlink = XLColor.FromHtml("#FF0000FF"), + FollowedHyperlink = XLColor.FromHtml("#FF800080") + }; + } + + internal IXLColor GetXLColor(XLThemeColor themeColor) + { + switch (themeColor) + { + case XLThemeColor.Text1: + return Theme.Text1; + case XLThemeColor.Background1: + return Theme.Background1; + case XLThemeColor.Text2: + return Theme.Text2; + case XLThemeColor.Background2: + return Theme.Background2; + case XLThemeColor.Accent1: + return Theme.Accent1; + case XLThemeColor.Accent2: + return Theme.Accent2; + case XLThemeColor.Accent3: + return Theme.Accent3; + case XLThemeColor.Accent4: + return Theme.Accent4; + case XLThemeColor.Accent5: + return Theme.Accent5; + case XLThemeColor.Accent6: + return Theme.Accent6; + default: + throw new ArgumentException("Invalid theme color"); + } + } + #region Fields + private readonly XLLoadSource m_loadSource = XLLoadSource.New; + private readonly String m_originalFile; + private readonly Stream m_originalStream; + #endregion + #region Constructor /// - /// Creates a new Excel workbook. + /// Creates a new Excel workbook. /// public XLWorkbook() { DefaultRowHeight = 15; DefaultColumnWidth = 9.140625; - Worksheets = new XLWorksheets(this); + WorksheetsInternal = new XLWorksheets(this); NamedRanges = new XLNamedRanges(this); CustomProperties = new XLCustomProperties(this); Style = new XLStyle(null, DefaultStyle); @@ -38,76 +210,39 @@ ShowWhiteSpace = DefaultShowWhiteSpace; ShowZeros = DefaultShowZeros; } - - private void InitializeTheme() - { - Theme = new XLTheme() { - Text1 = XLColor.FromHtml("#FF000000"), - Background1 = XLColor.FromHtml("#FFFFFFFF"), - Text2 = XLColor.FromHtml("#FF1F497D"), - Background2 = XLColor.FromHtml("#FFEEECE1"), - Accent1 = XLColor.FromHtml("#FF4F81BD"), - Accent2 = XLColor.FromHtml("#FFC0504D"), - Accent3 = XLColor.FromHtml("#FF9BBB59"), - Accent4 = XLColor.FromHtml("#FF8064A2"), - Accent5 = XLColor.FromHtml("#FF4BACC6"), - Accent6 = XLColor.FromHtml("#FFF79646"), - Hyperlink = XLColor.FromHtml("#FF0000FF"), - FollowedHyperlink = XLColor.FromHtml("#FF800080") - }; - } - - internal IXLColor GetXLColor(XLThemeColor themeColor) - { - switch (themeColor) - { - case XLThemeColor.Text1: return Theme.Text1; - case XLThemeColor.Background1: return Theme.Background1; - case XLThemeColor.Text2: return Theme.Text2; - case XLThemeColor.Background2: return Theme.Background2; - case XLThemeColor.Accent1: return Theme.Accent1; - case XLThemeColor.Accent2: return Theme.Accent2; - case XLThemeColor.Accent3: return Theme.Accent3; - case XLThemeColor.Accent4: return Theme.Accent4; - case XLThemeColor.Accent5: return Theme.Accent5; - case XLThemeColor.Accent6: return Theme.Accent6; - default: throw new ArgumentException("Invalid theme color"); - } - } - - private String originalFile; - private Stream originalStream; /// - /// Opens an existing workbook from a file. + /// Opens an existing workbook from a file. /// - /// The file to open. - public XLWorkbook(String file): this() + /// The file to open. + public XLWorkbook(String file) + : this() { - loadSource = XLLoadSource.File; - originalFile = file; + m_loadSource = XLLoadSource.File; + m_originalFile = file; Load(file); } /// - /// Opens an existing workbook from a stream. + /// Opens an existing workbook from a stream. /// - /// The stream to open. + /// The stream to open. public XLWorkbook(Stream stream) - : this() + : this() { - loadSource = XLLoadSource.Stream; - originalStream = stream; + m_loadSource = XLLoadSource.Stream; + m_originalStream = stream; Load(stream); } - + #endregion #region IXLWorkbook Members + internal XLWorksheets WorksheetsInternal { get; private set; } + /// + /// Gets an object to manipulate the worksheets. + /// + public IXLWorksheets Worksheets { get { return WorksheetsInternal; } } /// - /// Gets an object to manipulate the worksheets. - /// - public IXLWorksheets Worksheets { get; private set; } - /// - /// Gets an object to manipulate this workbook's named ranges. + /// Gets an object to manipulate this workbook's named ranges. /// public IXLNamedRanges NamedRanges { get; private set; } @@ -117,58 +252,69 @@ } /// - /// Gets the file name of the workbook. + /// Gets the file name of the workbook. /// public String Name { get; private set; } /// - /// Gets the file name of the workbook including its full directory. + /// Gets the file name of the workbook including its full directory. /// public String FullName { get; private set; } /// - /// Gets an object to manipulate this workbook's theme. + /// Gets an object to manipulate this workbook's theme. /// public IXLTheme Theme { get; private set; } /// - /// Saves the current workbook. + /// Saves the current workbook. /// public void Save() { - if (loadSource == XLLoadSource.New) + if (m_loadSource == XLLoadSource.New) + { throw new Exception("This is a new file, please use one of the SaveAs methods."); - else if (loadSource == XLLoadSource.Stream) - CreatePackage(originalStream, false); + } + + if (m_loadSource == XLLoadSource.Stream) + { + CreatePackage(m_originalStream, false); + } else - CreatePackage(originalFile); + { + CreatePackage(m_originalFile); + } } /// - /// Saves the current workbook to a file. + /// Saves the current workbook to a file. /// public void SaveAs(String file) { PathHelper.CreateDirectory(Path.GetDirectoryName(file)); - if (loadSource == XLLoadSource.New) + if (m_loadSource == XLLoadSource.New) { if (File.Exists(file)) + { File.Delete(file); + } CreatePackage(file); } - else if (loadSource == XLLoadSource.File) + else if (m_loadSource == XLLoadSource.File) { - if (originalFile.Trim().ToLower() != file.Trim().ToLower()) - File.Copy(originalFile, file, true); + if (m_originalFile.Trim().ToLower() != file.Trim().ToLower()) + { + File.Copy(m_originalFile, file, true); + } CreatePackage(file); } - else if (loadSource == XLLoadSource.Stream) + else if (m_loadSource == XLLoadSource.Stream) { - originalStream.Position = 0; - + m_originalStream.Position = 0; + using (var fileStream = File.Create(file)) { - CopyStream(originalStream, fileStream); + CopyStream(m_originalStream, fileStream); //fileStream.Position = 0; CreatePackage(fileStream, false); fileStream.Close(); @@ -176,28 +322,30 @@ } } /// - /// Saves the current workbook to a stream. + /// Saves the current workbook to a stream. /// public void SaveAs(Stream stream) { - if (loadSource == XLLoadSource.New) + if (m_loadSource == XLLoadSource.New) { CreatePackage(stream, true); } - else if (loadSource == XLLoadSource.File) + else if (m_loadSource == XLLoadSource.File) { - using (var fileStream = new FileStream(originalFile, FileMode.Open)) + using (var fileStream = new FileStream(m_originalFile, FileMode.Open)) { CopyStream(fileStream, stream); fileStream.Close(); } CreatePackage(stream, false); } - else if (loadSource == XLLoadSource.Stream) + else if (m_loadSource == XLLoadSource.Stream) { - originalStream.Position = 0; - if (originalStream != stream) - CopyStream(originalStream, stream); + m_originalStream.Position = 0; + if (m_originalStream != stream) + { + CopyStream(m_originalStream, stream); + } CreatePackage(stream, false); } @@ -205,189 +353,74 @@ internal void CopyStream(Stream input, Stream output) { - byte[] buffer = new byte[8 * 1024]; + byte[] buffer = new byte[8*1024]; int len; while ((len = input.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, len); - } + } } - /// - /// Gets or sets the default style for the workbook. - /// All new worksheets will use this style. + /// Gets or sets the default style for the workbook. + /// All new worksheets will use this style. /// public IXLStyle Style { get; set; } /// - /// Gets or sets the default row height for the workbook. - /// All new worksheets will use this row height. + /// Gets or sets the default row height for the workbook. + /// All new worksheets will use this row height. /// public Double RowHeight { get; set; } /// - /// Gets or sets the default column width for the workbook. - /// All new worksheets will use this column width. + /// Gets or sets the default column width for the workbook. + /// All new worksheets will use this column width. /// public Double ColumnWidth { get; set; } /// - /// Gets or sets the default page options for the workbook. - /// All new worksheets will use these page options. + /// Gets or sets the default page options for the workbook. + /// All new worksheets will use these page options. /// public IXLPageSetup PageOptions { get; set; } /// - /// Gets or sets the default outline options for the workbook. - /// All new worksheets will use these outline options. + /// Gets or sets the default outline options for the workbook. + /// All new worksheets will use these outline options. /// public IXLOutline Outline { get; set; } /// - /// Gets or sets the workbook's properties. + /// Gets or sets the workbook's properties. /// public XLWorkbookProperties Properties { get; set; } /// - /// Gets or sets the workbook's calculation mode. + /// Gets or sets the workbook's calculation mode. /// public XLCalculateMode CalculateMode { get; set; } /// - /// Gets or sets the workbook's reference style. + /// Gets or sets the workbook's reference style. /// public XLReferenceStyle ReferenceStyle { get; set; } - #endregion - - #region Static - private static IXLStyle defaultStyle; - public static IXLStyle DefaultStyle - { - get - { - if (defaultStyle == null) - { - defaultStyle = new XLStyle(null, null) - { - Font = new XLFont(null, null) - { - Bold = false, - Italic = false, - Underline = XLFontUnderlineValues.None, - Strikethrough = false, - VerticalAlignment = XLFontVerticalTextAlignmentValues.Baseline, - FontSize = 11, - FontColor = XLColor.FromArgb(0, 0, 0), - FontName = "Calibri", - FontFamilyNumbering = XLFontFamilyNumberingValues.Swiss - }, - - Fill = new XLFill(null) - { - BackgroundColor = XLColor.FromIndex(64), - PatternType = XLFillPatternValues.None, - PatternColor = XLColor.FromIndex(64) - }, - - Border = new XLBorder(null, null) - { - BottomBorder = XLBorderStyleValues.None, - DiagonalBorder = XLBorderStyleValues.None, - DiagonalDown = false, - DiagonalUp = false, - LeftBorder = XLBorderStyleValues.None, - RightBorder = XLBorderStyleValues.None, - TopBorder = XLBorderStyleValues.None, - BottomBorderColor = XLColor.Black, - DiagonalBorderColor = XLColor.Black, - LeftBorderColor = XLColor.Black, - RightBorderColor = XLColor.Black, - TopBorderColor = XLColor.Black - }, - NumberFormat = new XLNumberFormat(null, null) { NumberFormatId = 0 }, - Alignment = new XLAlignment(null) - { - Horizontal = XLAlignmentHorizontalValues.General, - Indent = 0, - JustifyLastLine = false, - ReadingOrder = XLAlignmentReadingOrderValues.ContextDependent, - RelativeIndent = 0, - ShrinkToFit = false, - TextRotation = 0, - Vertical = XLAlignmentVerticalValues.Bottom, - WrapText = false - }, - Protection = new XLProtection(null) - { - Locked = true, - Hidden = false - } - }; - } - return defaultStyle; - } - } - - public static Double DefaultRowHeight { get; private set; } - public static Double DefaultColumnWidth { get; private set; } - - public static IXLPageSetup DefaultPageOptions - { - get - { - var defaultPageOptions = new XLPageSetup(null, null) - { - PageOrientation = XLPageOrientation.Default, - Scale = 100, - PaperSize = XLPaperSize.LetterPaper, - Margins = new XLMargins() - { - Top = 0.75, - Bottom = 0.5, - Left = 0.75, - Right = 0.75, - Header = 0.5, - Footer = 0.75 - }, - ScaleHFWithDocument = true, - AlignHFWithMargins = true, - PrintErrorValue = XLPrintErrorValues.Displayed, - ShowComments = XLShowCommentsValues.None - }; - return defaultPageOptions; - } - } - - public static IXLOutline DefaultOutline - { - get - { - return new XLOutline(null) { - SummaryHLocation = XLOutlineSummaryHLocation.Right, - SummaryVLocation= XLOutlineSummaryVLocation.Bottom }; - } - } - - - #endregion - public IXLWorksheet Worksheet(String name) { - return Worksheets.Worksheet(name); + return WorksheetsInternal.Worksheet(name); } public IXLWorksheet Worksheet(Int32 position) { - return Worksheets.Worksheet(position); + return WorksheetsInternal.Worksheet(position); } public HashSet GetSharedStrings() { HashSet modifiedStrings = new HashSet(); - foreach (var w in Worksheets.Cast()) + foreach (var w in WorksheetsInternal) { foreach (var c in w.Internals.CellsCollection.Values) { if ( - c.DataType == XLCellValues.Text - && !StringExtensions.IsNullOrWhiteSpace(c.InnerText) - && c.ShareString - && !modifiedStrings.Contains(c.Value.ToString()) - ) + c.DataType == XLCellValues.Text + && !StringExtensions.IsNullOrWhiteSpace(c.InnerText) + && c.ShareString + && !modifiedStrings.Contains(c.Value.ToString()) + ) { modifiedStrings.Add(c.Value.ToString()); } @@ -406,12 +439,14 @@ public IXLCells FindCells(Func predicate) { var cells = new XLCells(false, false, false); - foreach (var ws in Worksheets) + foreach (var ws in WorksheetsInternal) { foreach (var cell in ws.CellsUsed(true)) { if (predicate(cell)) + { cells.Add(cell); + } } } return cells; @@ -419,12 +454,14 @@ public IXLRows FindRows(Func predicate) { var rows = new XLRows(null); - foreach (var ws in Worksheets) + foreach (var ws in WorksheetsInternal) { foreach (var row in ws.Rows()) { if (predicate(row)) + { rows.Add(row as XLRow); + } } } return rows; @@ -432,12 +469,14 @@ public IXLColumns FindColumns(Func predicate) { var columns = new XLColumns(null); - foreach (var ws in Worksheets) + foreach (var ws in WorksheetsInternal) { foreach (var column in ws.Columns()) { if (predicate(column)) + { columns.Add(column as XLColumn); + } } } return columns; @@ -451,13 +490,43 @@ public Boolean ShowWhiteSpace { get; set; } public Boolean ShowZeros { get; set; } - public Boolean DefaultShowFormulas { get { return false; } } - public Boolean DefaultShowGridLines { get { return true; } } - public Boolean DefaultShowOutlineSymbols { get { return true; } } - public Boolean DefaultShowRowColHeaders { get { return true; } } - public Boolean DefaultShowRuler { get { return true; } } - public Boolean DefaultShowWhiteSpace { get { return true; } } - public Boolean DefaultShowZeros { get { return true; } } - } -} + public Boolean DefaultShowFormulas + { + get { return false; } + } + public Boolean DefaultShowGridLines + { + get { return true; } + } + public Boolean DefaultShowOutlineSymbols + { + get { return true; } + } + public Boolean DefaultShowRowColHeaders + { + get { return true; } + } + public Boolean DefaultShowRuler + { + get { return true; } + } + public Boolean DefaultShowWhiteSpace + { + get { return true; } + } + public Boolean DefaultShowZeros + { + get { return true; } + } + //-- + #region Nested Type: XLLoadSource + private enum XLLoadSource + { + New, + File, + Stream + }; + #endregion + } +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 8bef6fd..a8258e6 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -104,7 +104,7 @@ var sheetName = dSheet.Name; - var ws = (XLWorksheet)Worksheets.Add(sheetName); + var ws = (XLWorksheet)WorksheetsInternal.Add(sheetName); ws.RelId = dSheet.Id; ws.SheetId = (Int32)dSheet.SheetId.Value; @@ -209,7 +209,7 @@ var reference = dTable.Reference.Value; var xlTable = ws.Range(reference).CreateTable(dTable.Name); if (dTable.TotalsRowCount != null && dTable.TotalsRowCount.Value > 0) - ((XLTable)xlTable).showTotalsRow = true; + ((XLTable)xlTable).m_showTotalsRow = true; if (dTable.TableStyleInfo != null) { @@ -262,7 +262,7 @@ var sheetName = sections[0].Replace("\'", ""); var sheetArea = sections[1]; if (!sheetArea.Equals("#REF")) - Worksheets.Worksheet(sheetName).PageSetup.PrintAreas.Add(sheetArea); + WorksheetsInternal.Worksheet(sheetName).PageSetup.PrintAreas.Add(sheetArea); } } else if (name == "_xlnm.Print_Titles") @@ -273,13 +273,13 @@ var sheetNameCol = colSections[0].Replace("\'", ""); var sheetAreaCol = colSections[1]; if (!sheetAreaCol.Equals("#REF")) - Worksheets.Worksheet(sheetNameCol).PageSetup.SetColumnsToRepeatAtLeft(sheetAreaCol); + WorksheetsInternal.Worksheet(sheetNameCol).PageSetup.SetColumnsToRepeatAtLeft(sheetAreaCol); var rowSections = areas[1].Split('!'); var sheetNameRow = rowSections[0].Replace("\'", ""); var sheetAreaRow = rowSections[1]; if (!sheetAreaRow.Equals("#REF")) - Worksheets.Worksheet(sheetNameRow).PageSetup.SetRowsToRepeatAtTop(sheetAreaRow); + WorksheetsInternal.Worksheet(sheetNameRow).PageSetup.SetRowsToRepeatAtTop(sheetAreaRow); } else { @@ -357,8 +357,8 @@ { if (dCell.DataType == CellValues.InlineString) { - xlCell.cellValue = dCell.InlineString.Text.Text; - xlCell.dataType = XLCellValues.Text; + xlCell.m_cellValue = dCell.InlineString.Text.Text; + xlCell.m_dataType = XLCellValues.Text; xlCell.ShareString = false; } else if (dCell.DataType == CellValues.SharedString) @@ -366,41 +366,41 @@ if (dCell.CellValue != null) { if (!StringExtensions.IsNullOrWhiteSpace(dCell.CellValue.Text)) - xlCell.cellValue = sharedStrings[Int32.Parse(dCell.CellValue.Text)].InnerText; + xlCell.m_cellValue = sharedStrings[Int32.Parse(dCell.CellValue.Text)].InnerText; else - xlCell.cellValue = dCell.CellValue.Text; + xlCell.m_cellValue = dCell.CellValue.Text; } else { - xlCell.cellValue = String.Empty; + xlCell.m_cellValue = String.Empty; } - xlCell.dataType = XLCellValues.Text; + xlCell.m_dataType = XLCellValues.Text; } else if (dCell.DataType == CellValues.Date) { //xlCell.cellValue = DateTime.FromOADate(Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture)); - xlCell.cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); - xlCell.dataType = XLCellValues.DateTime; + xlCell.m_cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); + xlCell.m_dataType = XLCellValues.DateTime; } else if (dCell.DataType == CellValues.Boolean) { - xlCell.cellValue = dCell.CellValue.Text; - xlCell.dataType = XLCellValues.Boolean; + xlCell.m_cellValue = dCell.CellValue.Text; + xlCell.m_dataType = XLCellValues.Boolean; } else if (dCell.DataType == CellValues.Number) { - xlCell.cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); + xlCell.m_cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); var numberFormatId = ((CellFormat)((CellFormats)s.CellFormats).ElementAt(styleIndex)).NumberFormatId; if (numberFormatId == 46U) xlCell.DataType = XLCellValues.TimeSpan; else - xlCell.dataType = XLCellValues.Number; + xlCell.m_dataType = XLCellValues.Number; } } else if (dCell.CellValue != null) { var numberFormatId = ((CellFormat)((CellFormats)s.CellFormats).ElementAt(styleIndex)).NumberFormatId; - xlCell.cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); + xlCell.m_cellValue = Double.Parse(dCell.CellValue.Text, CultureInfo.InvariantCulture).ToString(); if (s.NumberingFormats != null && s.NumberingFormats.Any(nf => ((NumberingFormat)nf).NumberFormatId.Value == numberFormatId)) xlCell.Style.NumberFormat.Format = ((NumberingFormat)s.NumberingFormats.Where(nf => ((NumberingFormat)nf).NumberFormatId.Value == numberFormatId).Single()).FormatCode.Value; @@ -409,14 +409,14 @@ if (!StringExtensions.IsNullOrWhiteSpace(xlCell.Style.NumberFormat.Format)) - xlCell.dataType = GetDataTypeFromFormat(xlCell.Style.NumberFormat.Format); + xlCell.m_dataType = GetDataTypeFromFormat(xlCell.Style.NumberFormat.Format); else if ((numberFormatId >= 14 && numberFormatId <= 22) || (numberFormatId >= 45 && numberFormatId <= 47)) - xlCell.dataType = XLCellValues.DateTime; + xlCell.m_dataType = XLCellValues.DateTime; else if (numberFormatId == 49) - xlCell.dataType = XLCellValues.Text; + xlCell.m_dataType = XLCellValues.Text; else - xlCell.dataType = XLCellValues.Number; + xlCell.m_dataType = XLCellValues.Number; } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 4cabd79..7249194 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -4,11 +4,35 @@ using System.IO; using System.Linq; using DocumentFormat.OpenXml; +using DocumentFormat.OpenXml.CustomProperties; +using DocumentFormat.OpenXml.Drawing; +using DocumentFormat.OpenXml.ExtendedProperties; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.VariantTypes; using A = DocumentFormat.OpenXml.Drawing; using Ap = DocumentFormat.OpenXml.ExtendedProperties; +using BackgroundColor = DocumentFormat.OpenXml.Spreadsheet.BackgroundColor; +using BottomBorder = DocumentFormat.OpenXml.Spreadsheet.BottomBorder; +using Break = DocumentFormat.OpenXml.Spreadsheet.Break; +using Fill = DocumentFormat.OpenXml.Spreadsheet.Fill; +using FontScheme = DocumentFormat.OpenXml.Drawing.FontScheme; +using Fonts = DocumentFormat.OpenXml.Spreadsheet.Fonts; +using ForegroundColor = DocumentFormat.OpenXml.Spreadsheet.ForegroundColor; +using GradientFill = DocumentFormat.OpenXml.Drawing.GradientFill; +using GradientStop = DocumentFormat.OpenXml.Drawing.GradientStop; +using Hyperlink = DocumentFormat.OpenXml.Spreadsheet.Hyperlink; +using LeftBorder = DocumentFormat.OpenXml.Spreadsheet.LeftBorder; using Op = DocumentFormat.OpenXml.CustomProperties; +using Outline = DocumentFormat.OpenXml.Drawing.Outline; +using Path = System.IO.Path; +using PatternFill = DocumentFormat.OpenXml.Spreadsheet.PatternFill; +using Properties = DocumentFormat.OpenXml.ExtendedProperties.Properties; +using RightBorder = DocumentFormat.OpenXml.Spreadsheet.RightBorder; +using Table = DocumentFormat.OpenXml.Spreadsheet.Table; +using Text = DocumentFormat.OpenXml.Spreadsheet.Text; +using TopBorder = DocumentFormat.OpenXml.Spreadsheet.TopBorder; +using Underline = DocumentFormat.OpenXml.Spreadsheet.Underline; using Vt = DocumentFormat.OpenXml.VariantTypes; namespace ClosedXML.Excel @@ -17,15 +41,23 @@ { private const Double COLUMN_WIDTH_OFFSET = 0.71; - - private enum RelType { General, Workbook, Worksheet, Drawing } + private enum RelType + { + General, + Workbook, + Worksheet, + Drawing + } + private class RelIdGenerator { - private Dictionary> relIds = new Dictionary>(); + private readonly Dictionary> relIds = new Dictionary>(); public String GetNext(RelType relType) { if (!relIds.ContainsKey(relType)) + { relIds.Add(relType, new List()); + } Int32 id = 1; while (true) @@ -42,18 +74,39 @@ public void AddValues(List values, RelType relType) { if (!relIds.ContainsKey(relType)) + { relIds.Add(relType, new List()); + } relIds[relType].AddRange(values); } } private Dictionary sharedStrings; private Dictionary sharedStyles; - private struct FontInfo { public UInt32 FontId; public IXLFont Font; }; - private struct FillInfo { public UInt32 FillId; public IXLFill Fill; }; - private struct BorderInfo { public UInt32 BorderId; public IXLBorder Border; }; - private struct NumberFormatInfo { public Int32 NumberFormatId; public IXLNumberFormat NumberFormat; }; + private struct FontInfo + { + public UInt32 FontId; + public IXLFont Font; + }; + + private struct FillInfo + { + public UInt32 FillId; + public IXLFill Fill; + }; + + private struct BorderInfo + { + public UInt32 BorderId; + public IXLBorder Border; + }; + + private struct NumberFormatInfo + { + public Int32 NumberFormatId; + public IXLNumberFormat NumberFormat; + }; private struct StyleInfo { @@ -65,28 +118,30 @@ public IXLStyle Style; }; - private readonly EnumValue cvSharedString = new EnumValue(CellValues.SharedString); - private readonly EnumValue cvInlineString = new EnumValue(CellValues.InlineString); - private readonly EnumValue cvNumber = new EnumValue(CellValues.Number); - private readonly EnumValue cvDate = new EnumValue(CellValues.Date); - private readonly EnumValue cvBoolean = new EnumValue(CellValues.Boolean); - - private EnumValue GetCellValue(XLCell xlCell) + private static readonly EnumValue cvSharedString = new EnumValue(CellValues.SharedString); + private static readonly EnumValue cvInlineString = new EnumValue(CellValues.InlineString); + private static readonly EnumValue cvNumber = new EnumValue(CellValues.Number); + private static readonly EnumValue cvDate = new EnumValue(CellValues.Date); + private static readonly EnumValue cvBoolean = new EnumValue(CellValues.Boolean); + + private static EnumValue GetCellValue(XLCell xlCell) { switch (xlCell.DataType) { case XLCellValues.Text: - { - if (xlCell.ShareString) - return cvSharedString; - else - return cvInlineString; - } - case XLCellValues.Number: return cvNumber; - case XLCellValues.DateTime: return cvDate; - case XLCellValues.Boolean: return cvBoolean; - case XLCellValues.TimeSpan: return cvNumber; - default: throw new NotImplementedException(); + { + return xlCell.ShareString ? cvSharedString : cvInlineString; + } + case XLCellValues.Number: + return cvNumber; + case XLCellValues.DateTime: + return cvDate; + case XLCellValues.Boolean: + return cvBoolean; + case XLCellValues.TimeSpan: + return cvNumber; + default: + throw new NotImplementedException(); } } @@ -95,9 +150,13 @@ PathHelper.CreateDirectory(Path.GetDirectoryName(filePath)); SpreadsheetDocument package; if (File.Exists(filePath)) + { package = SpreadsheetDocument.Open(filePath, true); + } else + { package = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook); + } using (package) { @@ -110,9 +169,13 @@ { SpreadsheetDocument package; if (newStream) + { package = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook); + } else + { package = SpreadsheetDocument.Open(stream, true); + } using (package) { @@ -122,70 +185,61 @@ } // Adds child parts and generates content of the specified part. - private RelIdGenerator relId; + private RelIdGenerator m_relId; private void CreateParts(SpreadsheetDocument document) { - relId = new RelIdGenerator(); + m_relId = new RelIdGenerator(); sharedStrings = new Dictionary(); sharedStyles = new Dictionary(); tableNames = new HashSet(); tableId = 0; - WorkbookPart workbookPart; - if (document.WorkbookPart == null) - workbookPart = document.AddWorkbookPart(); - else - workbookPart = document.WorkbookPart; - - var worksheets = (XLWorksheets)Worksheets; + WorkbookPart workbookPart = document.WorkbookPart ?? document.AddWorkbookPart(); + + var worksheets = WorksheetsInternal; var partsToRemove = workbookPart.Parts.Where(s => worksheets.Deleted.Contains(s.RelationshipId)).ToList(); partsToRemove.ForEach(s => workbookPart.DeletePart(s.OpenXmlPart)); - relId.AddValues(workbookPart.Parts.Select(p=>p.RelationshipId).ToList(), RelType.Workbook); + m_relId.AddValues(workbookPart.Parts.Select(p => p.RelationshipId).ToList(), RelType.Workbook); - var modifiedSheetNames = Worksheets.Select(w => w.Name.ToLower()).ToList(); + var modifiedSheetNames = worksheets.Select(w => w.Name.ToLower()).ToList(); List existingSheetNames; if (workbookPart.Workbook != null && workbookPart.Workbook.Sheets != null) + { existingSheetNames = workbookPart.Workbook.Sheets.Elements().Select(s => s.Name.Value.ToLower()).ToList(); + } else + { existingSheetNames = new List(); + } var allSheetNames = existingSheetNames.Union(modifiedSheetNames); - ExtendedFilePropertiesPart extendedFilePropertiesPart; - if (document.ExtendedFilePropertiesPart == null) - extendedFilePropertiesPart = document.AddNewPart(relId.GetNext(RelType.Workbook)); - else - extendedFilePropertiesPart = document.ExtendedFilePropertiesPart; + ExtendedFilePropertiesPart extendedFilePropertiesPart = document.ExtendedFilePropertiesPart ?? + document.AddNewPart(m_relId.GetNext(RelType.Workbook)); GenerateExtendedFilePropertiesPartContent(extendedFilePropertiesPart, workbookPart); GenerateWorkbookPartContent(workbookPart); - - SharedStringTablePart sharedStringTablePart; - if (workbookPart.SharedStringTablePart == null) - sharedStringTablePart = workbookPart.AddNewPart(relId.GetNext(RelType.Workbook)); - else - sharedStringTablePart = workbookPart.SharedStringTablePart; - + + SharedStringTablePart sharedStringTablePart = workbookPart.SharedStringTablePart ?? + workbookPart.AddNewPart(m_relId.GetNext(RelType.Workbook)); + GenerateSharedStringTablePartContent(sharedStringTablePart); - WorkbookStylesPart workbookStylesPart; - if (workbookPart.WorkbookStylesPart == null) - workbookStylesPart = workbookPart.AddNewPart(relId.GetNext(RelType.Workbook)); - else - workbookStylesPart = workbookPart.WorkbookStylesPart; + WorkbookStylesPart workbookStylesPart = workbookPart.WorkbookStylesPart ?? + workbookPart.AddNewPart(m_relId.GetNext(RelType.Workbook)); GenerateWorkbookStylesPartContent(workbookStylesPart); - foreach (var worksheet in Worksheets.Cast().OrderBy(w=>w.Position)) + foreach (var worksheet in WorksheetsInternal.Cast().OrderBy(w => w.Position)) { WorksheetPart worksheetPart; if (workbookPart.Parts.Any(p => p.RelationshipId == worksheet.RelId)) { - worksheetPart = (WorksheetPart)workbookPart.GetPartById(worksheet.RelId); + worksheetPart = (WorksheetPart) workbookPart.GetPartById(worksheet.RelId); var wsPartsToRemove = worksheetPart.TableDefinitionParts.ToList(); - wsPartsToRemove.ForEach(tdp=>worksheetPart.DeletePart(tdp)); + wsPartsToRemove.ForEach(tdp => worksheetPart.DeletePart(tdp)); } else { @@ -204,20 +258,19 @@ //} } - GenerateCalculationChainPartContent(workbookPart); if (workbookPart.ThemePart == null) { - ThemePart themePart = workbookPart.AddNewPart(relId.GetNext(RelType.Workbook)); + ThemePart themePart = workbookPart.AddNewPart(m_relId.GetNext(RelType.Workbook)); GenerateThemePartContent(themePart); } if (CustomProperties.Any()) { document.GetPartsOfType().ToList().ForEach(p => document.DeletePart(p)); - CustomFilePropertiesPart customFilePropertiesPart = document.AddNewPart(relId.GetNext(RelType.Workbook)); - + CustomFilePropertiesPart customFilePropertiesPart = document.AddNewPart(m_relId.GetNext(RelType.Workbook)); + GenerateCustomFilePropertiesPartContent(customFilePropertiesPart); } SetPackageProperties(document); @@ -230,8 +283,8 @@ { foreach (var table in worksheet.Tables) { - String tableRelId = relId.GetNext(RelType.Workbook); - var xlTable = (XLTable)table; + String tableRelId = m_relId.GetNext(RelType.Workbook); + var xlTable = (XLTable) table; xlTable.RelId = tableRelId; TableDefinitionPart tableDefinitionPart = worksheetPart.AddNewPart(tableRelId); GenerateTableDefinitionPartContent(tableDefinitionPart, xlTable); @@ -242,41 +295,56 @@ private void GenerateExtendedFilePropertiesPartContent(ExtendedFilePropertiesPart extendedFilePropertiesPart, WorkbookPart workbookPart) { //if (extendedFilePropertiesPart.Properties.NamespaceDeclarations.Contains(new KeyValuePair( - Ap.Properties properties; + Properties properties; if (extendedFilePropertiesPart.Properties == null) - extendedFilePropertiesPart.Properties = new Ap.Properties(); + { + extendedFilePropertiesPart.Properties = new Properties(); + } properties = extendedFilePropertiesPart.Properties; - if (!properties.NamespaceDeclarations.Contains(new KeyValuePair("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"))) + if ( + !properties.NamespaceDeclarations.Contains(new KeyValuePair("vt", + "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"))) + { properties.AddNamespaceDeclaration("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"); + } if (properties.Application == null) - properties.Append(new Ap.Application() { Text = "Microsoft Excel" }); + { + properties.AppendChild(new Application {Text = "Microsoft Excel"}); + } if (properties.DocumentSecurity == null) - properties.Append(new Ap.DocumentSecurity() { Text = "0" }); + { + properties.AppendChild(new DocumentSecurity { Text = "0" }); + } if (properties.ScaleCrop == null) - properties.Append(new Ap.ScaleCrop() { Text = "false" }); + { + properties.AppendChild(new ScaleCrop { Text = "false" }); + } if (properties.HeadingPairs == null) - properties.HeadingPairs = new Ap.HeadingPairs(); + { + properties.HeadingPairs = new HeadingPairs(); + } if (properties.TitlesOfParts == null) - properties.TitlesOfParts = new Ap.TitlesOfParts(); + { + properties.TitlesOfParts = new TitlesOfParts(); + } - properties.HeadingPairs.VTVector = new Vt.VTVector() { BaseType = Vt.VectorBaseValues.Variant}; + properties.HeadingPairs.VTVector = new VTVector {BaseType = VectorBaseValues.Variant}; - properties.TitlesOfParts.VTVector = new Vt.VTVector() { BaseType = Vt.VectorBaseValues.Lpstr }; + properties.TitlesOfParts.VTVector = new VTVector {BaseType = VectorBaseValues.Lpstr}; - Vt.VTVector vTVector_One; + VTVector vTVector_One; vTVector_One = properties.HeadingPairs.VTVector; - Vt.VTVector vTVector_Two; + VTVector vTVector_Two; vTVector_Two = properties.TitlesOfParts.VTVector; - - var modifiedWorksheets = Worksheets.Select(w => new { w.Name, Order = w.Position }); + var modifiedWorksheets = ((IEnumerable) WorksheetsInternal).Select(w => new {w.Name, Order = w.Position}).ToList(); var modifiedNamedRanges = GetModifiedNamedRanges(); var modifiedWorksheetsCount = modifiedWorksheets.Count(); var modifiedNamedRangesCount = modifiedNamedRanges.Count(); @@ -284,17 +352,17 @@ InsertOnVTVector(vTVector_One, "Worksheets", 0, modifiedWorksheetsCount.ToString()); InsertOnVTVector(vTVector_One, "Named Ranges", 2, modifiedNamedRangesCount.ToString()); - vTVector_Two.Size = (UInt32)(modifiedNamedRangesCount + modifiedWorksheetsCount); + vTVector_Two.Size = (UInt32) (modifiedNamedRangesCount + modifiedWorksheetsCount); - foreach (var w in modifiedWorksheets.OrderBy(w=>w.Order)) + foreach (var w in modifiedWorksheets.OrderBy(w => w.Order)) { - Vt.VTLPSTR vTLPSTR3 = new Vt.VTLPSTR() { Text = w.Name }; + VTLPSTR vTLPSTR3 = new VTLPSTR {Text = w.Name}; vTVector_Two.Append(vTLPSTR3); } foreach (var nr in modifiedNamedRanges) { - Vt.VTLPSTR vTLPSTR7 = new Vt.VTLPSTR() { Text = nr }; + VTLPSTR vTLPSTR7 = new VTLPSTR {Text = nr}; vTVector_Two.Append(vTLPSTR7); } @@ -303,7 +371,9 @@ if (!StringExtensions.IsNullOrWhiteSpace(Properties.Manager)) { if (properties.Manager == null) - properties.Manager = new Ap.Manager(); + { + properties.Manager = new Manager(); + } properties.Manager.Text = Properties.Manager; } @@ -318,7 +388,9 @@ if (!StringExtensions.IsNullOrWhiteSpace(Properties.Company)) { if (properties.Company == null) - properties.Company = new Ap.Company(); + { + properties.Company = new Company(); + } properties.Company.Text = Properties.Company; } @@ -329,34 +401,36 @@ } } - private void InsertOnVTVector(Vt.VTVector vTVector, String property, Int32 index, String text) + private void InsertOnVTVector(VTVector vTVector, String property, Int32 index, String text) { - var m = from e1 in vTVector.Elements() - where e1.Elements().Any(e2 => e2.Text == property) + var m = from e1 in vTVector.Elements() + where e1.Elements().Any(e2 => e2.Text == property) select e1; if (!m.Any()) { if (vTVector.Size == null) + { vTVector.Size = new UInt32Value(0U); + } vTVector.Size += 2U; - Vt.Variant variant1 = new Vt.Variant(); - Vt.VTLPSTR vTLPSTR1 = new Vt.VTLPSTR() { Text = property }; + Variant variant1 = new Variant(); + VTLPSTR vTLPSTR1 = new VTLPSTR {Text = property}; variant1.Append(vTLPSTR1); - vTVector.InsertAt(variant1, index); + vTVector.InsertAt(variant1, index); - Vt.Variant variant2 = new Vt.Variant(); - Vt.VTInt32 vTInt321 = new Vt.VTInt32(); + Variant variant2 = new Variant(); + VTInt32 vTInt321 = new VTInt32(); variant2.Append(vTInt321); - vTVector.InsertAt(variant2, index + 1); + vTVector.InsertAt(variant2, index + 1); } Int32 targetIndex = 0; - foreach (var e in vTVector.Elements()) + foreach (var e in vTVector.Elements()) { - if (e.Elements().Any(e2 => e2.Text == property)) + if (e.Elements().Any(e2 => e2.Text == property)) { - vTVector.ElementAt(targetIndex + 1).GetFirstChild().Text = text; + vTVector.ElementAt(targetIndex + 1).GetFirstChild().Text = text; break; } targetIndex++; @@ -366,23 +440,31 @@ private List GetExistingWorksheets(WorkbookPart workbookPart) { if (workbookPart != null && workbookPart.Workbook != null && workbookPart.Workbook.Sheets != null) - return workbookPart.Workbook.Sheets.Select(s=>((Sheet)s).Name.Value).ToList(); + { + return workbookPart.Workbook.Sheets.Select(s => ((Sheet) s).Name.Value).ToList(); + } else + { return new List(); + } } - private List GetExistingNamedRanges(Vt.VTVector vTVector_Two) + private List GetExistingNamedRanges(VTVector vTVector_Two) { if (vTVector_Two.Any()) - return vTVector_Two.Elements().Select(e => e.Text).ToList(); + { + return vTVector_Two.Elements().Select(e => e.Text).ToList(); + } else + { return new List(); + } } private List GetModifiedNamedRanges() { var namedRanges = new List(); - foreach (var w in Worksheets) + foreach (var w in WorksheetsInternal) { foreach (var n in w.NamedRanges) { @@ -398,68 +480,86 @@ private void GenerateWorkbookPartContent(WorkbookPart workbookPart) { if (workbookPart.Workbook == null) + { workbookPart.Workbook = new Workbook(); + } var workbook = workbookPart.Workbook; - if (!workbook.NamespaceDeclarations.Contains(new KeyValuePair("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"))) + if ( + !workbook.NamespaceDeclarations.Contains(new KeyValuePair("r", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships"))) + { workbook.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); - + } #region WorkbookProperties if (workbook.WorkbookProperties == null) + { workbook.WorkbookProperties = new WorkbookProperties(); + } if (workbook.WorkbookProperties.CodeName == null) + { workbook.WorkbookProperties.CodeName = "ThisWorkbook"; + } if (workbook.WorkbookProperties.DefaultThemeVersion == null) - workbook.WorkbookProperties.DefaultThemeVersion = (UInt32Value)124226U; + { + workbook.WorkbookProperties.DefaultThemeVersion = 124226U; + } #endregion - if (workbook.BookViews == null) + { workbook.BookViews = new BookViews(); + } if (workbook.Sheets == null) + { workbook.Sheets = new Sheets(); + } - var worksheets = (XLWorksheets)Worksheets; + var worksheets = WorksheetsInternal; workbook.Sheets.Elements().Where(s => worksheets.Deleted.Contains(s.Id)).ForEach(s => s.Remove()); foreach (var sheet in workbook.Sheets.Elements()) { var sName = sheet.Name.Value; //if (Worksheets.Where(w => w.Name.ToLower() == sName.ToLower())) - if (Worksheets.Any(w => (w as XLWorksheet).SheetId == (Int32)sheet.SheetId.Value)) + if (WorksheetsInternal.Any(w => (w).SheetId == (Int32) sheet.SheetId.Value)) { - var wks = (XLWorksheet)Worksheets.Where(w => (w as XLWorksheet).SheetId == (Int32)sheet.SheetId.Value).Single(); + var wks = WorksheetsInternal.Where(w => (w).SheetId == (Int32) sheet.SheetId.Value).Single(); //wks.SheetId = (Int32)sheet.SheetId.Value; wks.RelId = sheet.Id; sheet.Name = wks.Name; } } - foreach (var xlSheet in Worksheets.Cast().Where(w => w.SheetId == 0).OrderBy(w => w.Position)) + foreach (var xlSheet in WorksheetsInternal.Cast().Where(w => w.SheetId == 0).OrderBy(w => w.Position)) { - String rId = relId.GetNext(RelType.Workbook); - while (Worksheets.Cast().Any(w => w.SheetId == Int32.Parse(rId.Substring(3)))) - rId = relId.GetNext(RelType.Workbook); + String rId = m_relId.GetNext(RelType.Workbook); + while (WorksheetsInternal.Cast().Any(w => w.SheetId == Int32.Parse(rId.Substring(3)))) + { + rId = m_relId.GetNext(RelType.Workbook); + } xlSheet.SheetId = Int32.Parse(rId.Substring(3)); xlSheet.RelId = rId; - var newSheet = new Sheet() - { - Name = xlSheet.Name, - Id = rId, - SheetId = (UInt32)xlSheet.SheetId - }; + var newSheet = new Sheet + { + Name = xlSheet.Name, + Id = rId, + SheetId = (UInt32) xlSheet.SheetId + }; if (xlSheet.Visibility != XLWorksheetVisibility.Visible) + { newSheet.State = xlSheet.Visibility.ToOpenXml(); + } workbook.Sheets.Append(newSheet); } var sheetElements = from sheet in workbook.Sheets.Elements() - join worksheet in Worksheets.Cast() on sheet.Id.Value equals worksheet.RelId + join worksheet in WorksheetsInternal.Cast() on sheet.Id.Value equals worksheet.RelId orderby worksheet.Position select sheet; @@ -471,10 +571,16 @@ workbook.Sheets.Append(sheet); if (!foundVisible) + { if (sheet.State == null || sheet.State == SheetStateValues.Visible) + { foundVisible = true; + } else + { firstSheetVisible++; + } + } } WorkbookView workbookView = workbook.BookViews.Elements().FirstOrDefault(); @@ -484,14 +590,14 @@ { if (ws.TabActive) { - activeTab = (UInt32)(ws.Position - 1); + activeTab = (UInt32) (ws.Position - 1); break; } } if (workbookView == null) { - workbookView = new WorkbookView() { ActiveTab = activeTab, FirstSheet = firstSheetVisible }; + workbookView = new WorkbookView {ActiveTab = activeTab, FirstSheet = firstSheetVisible}; workbook.BookViews.Append(workbookView); } else @@ -499,28 +605,29 @@ workbookView.ActiveTab = activeTab; workbookView.FirstSheet = firstSheetVisible; } - DefinedNames definedNames = new DefinedNames(); - foreach (var worksheet in Worksheets.Cast()) + foreach (var worksheet in WorksheetsInternal.Cast()) { UInt32 sheetId = 0; foreach (var s in workbook.Sheets.Elements()) { - if (s.SheetId == (UInt32)worksheet.SheetId) + if (s.SheetId == (UInt32) worksheet.SheetId) + { break; + } sheetId++; } if (worksheet.PageSetup.PrintAreas.Any()) { - DefinedName definedName = new DefinedName() { Name = "_xlnm.Print_Area", LocalSheetId = sheetId}; + DefinedName definedName = new DefinedName {Name = "_xlnm.Print_Area", LocalSheetId = sheetId}; var definedNameText = String.Empty; foreach (var printArea in worksheet.PageSetup.PrintAreas) { definedNameText += "'" + worksheet.Name + "'!" - + printArea.RangeAddress.FirstAddress.ToStringFixed() - + ":" + printArea.RangeAddress.LastAddress.ToStringFixed() + ","; + + printArea.RangeAddress.FirstAddress.ToStringFixed() + + ":" + printArea.RangeAddress.LastAddress.ToStringFixed() + ","; } definedName.Text = definedNameText.Substring(0, definedNameText.Length - 1); definedNames.Append(definedName); @@ -528,45 +635,51 @@ foreach (var nr in worksheet.NamedRanges) { - DefinedName definedName = new DefinedName() { - Name = nr.Name, - LocalSheetId = sheetId, - Text = nr.ToString() - }; - if (!StringExtensions.IsNullOrWhiteSpace(nr.Comment)) definedName.Comment = nr.Comment; + DefinedName definedName = new DefinedName + { + Name = nr.Name, + LocalSheetId = sheetId, + Text = nr.ToString() + }; + if (!StringExtensions.IsNullOrWhiteSpace(nr.Comment)) + { + definedName.Comment = nr.Comment; + } definedNames.Append(definedName); } - + var titles = String.Empty; var definedNameTextRow = String.Empty; var definedNameTextColumn = String.Empty; if (worksheet.PageSetup.FirstRowToRepeatAtTop > 0) { definedNameTextRow = "'" + worksheet.Name + "'!" + worksheet.PageSetup.FirstRowToRepeatAtTop.ToString() - + ":" + worksheet.PageSetup.LastRowToRepeatAtTop.ToString(); + + ":" + worksheet.PageSetup.LastRowToRepeatAtTop.ToString(); } if (worksheet.PageSetup.FirstColumnToRepeatAtLeft > 0) { var minColumn = worksheet.PageSetup.FirstColumnToRepeatAtLeft; var maxColumn = worksheet.PageSetup.LastColumnToRepeatAtLeft; definedNameTextColumn = "'" + worksheet.Name + "'!" + XLAddress.GetColumnLetterFromNumber(minColumn) - + ":" + XLAddress.GetColumnLetterFromNumber(maxColumn); + + ":" + XLAddress.GetColumnLetterFromNumber(maxColumn); } if (definedNameTextColumn.Length > 0) { titles = definedNameTextColumn; if (definedNameTextRow.Length > 0) + { titles += "," + definedNameTextRow; + } } else { titles = definedNameTextRow; } - + if (titles.Length > 0) { - DefinedName definedName = new DefinedName() { Name = "_xlnm.Print_Titles", LocalSheetId = sheetId }; + DefinedName definedName = new DefinedName {Name = "_xlnm.Print_Titles", LocalSheetId = sheetId}; definedName.Text = titles; definedNames.Append(definedName); } @@ -574,33 +687,44 @@ foreach (var nr in NamedRanges) { - DefinedName definedName = new DefinedName() + DefinedName definedName = new DefinedName + { + Name = nr.Name, + Text = nr.ToString() + }; + if (!StringExtensions.IsNullOrWhiteSpace(nr.Comment)) { - Name = nr.Name, - Text = nr.ToString() - }; - if (!StringExtensions.IsNullOrWhiteSpace(nr.Comment)) definedName.Comment = nr.Comment; + definedName.Comment = nr.Comment; + } definedNames.Append(definedName); } if (workbook.DefinedNames == null) + { workbook.DefinedNames = new DefinedNames(); + } foreach (DefinedName dn in definedNames) { if (workbook.DefinedNames.Elements().Any(d => - d.Name.Value.ToLower() == dn.Name.Value.ToLower() - && ( - (d.LocalSheetId != null && dn.LocalSheetId != null && d.LocalSheetId.InnerText == dn.LocalSheetId.InnerText) - || d.LocalSheetId == null || dn.LocalSheetId == null) - )) + d.Name.Value.ToLower() == dn.Name.Value.ToLower() + && ( + (d.LocalSheetId != null && dn.LocalSheetId != null && + d.LocalSheetId.InnerText == dn.LocalSheetId.InnerText) + || d.LocalSheetId == null || dn.LocalSheetId == null) + )) { - DefinedName existingDefinedName = (DefinedName)workbook.DefinedNames.Where(d => - ((DefinedName)d).Name.Value.ToLower() == dn.Name.Value.ToLower() - && ( - (((DefinedName)d).LocalSheetId != null && dn.LocalSheetId != null && ((DefinedName)d).LocalSheetId.InnerText == dn.LocalSheetId.InnerText) - || ((DefinedName)d).LocalSheetId == null || dn.LocalSheetId == null) - ).First(); + DefinedName existingDefinedName = (DefinedName) workbook.DefinedNames.Where(d => + ((DefinedName) d).Name.Value.ToLower() == + dn.Name.Value.ToLower() + && ( + (((DefinedName) d).LocalSheetId != null && + dn.LocalSheetId != null && + ((DefinedName) d).LocalSheetId.InnerText == + dn.LocalSheetId.InnerText) + || ((DefinedName) d).LocalSheetId == null || + dn.LocalSheetId == null) + ).First(); existingDefinedName.Text = dn.Text; existingDefinedName.LocalSheetId = dn.LocalSheetId; existingDefinedName.Comment = dn.Comment; @@ -612,28 +736,36 @@ } if (workbook.CalculationProperties == null) - workbook.CalculationProperties = new CalculationProperties() { CalculationId = (UInt32Value)125725U }; + { + workbook.CalculationProperties = new CalculationProperties {CalculationId = 125725U}; + } if (CalculateMode == XLCalculateMode.Default) + { workbook.CalculationProperties.CalculationMode = null; + } else + { workbook.CalculationProperties.CalculationMode = CalculateMode.ToOpenXml(); - + } if (ReferenceStyle == XLReferenceStyle.Default) + { workbook.CalculationProperties.ReferenceMode = null; + } else + { workbook.CalculationProperties.ReferenceMode = ReferenceStyle.ToOpenXml(); - + } } private void GenerateSharedStringTablePartContent(SharedStringTablePart sharedStringTablePart) { HashSet modifiedStrings = GetSharedStrings(); - sharedStringTablePart.SharedStringTable = new SharedStringTable() { Count = 0, UniqueCount = 0 }; + sharedStringTablePart.SharedStringTable = new SharedStringTable {Count = 0, UniqueCount = 0}; - UInt32 stringCount = (UInt32)modifiedStrings.Count(); + UInt32 stringCount = (UInt32) modifiedStrings.Count(); Int32 stringId = 0; foreach (var s in modifiedStrings) @@ -642,63 +774,74 @@ Text text = new Text(); text.Text = s; if (s.StartsWith(" ") || s.EndsWith(" ")) + { text.Space = SpaceProcessingModeValues.Preserve; + } sharedStringItem.Append(text); sharedStringTablePart.SharedStringTable.Append(sharedStringItem); sharedStringTablePart.SharedStringTable.Count += 1; sharedStringTablePart.SharedStringTable.UniqueCount += 1; - sharedStrings.Add(s, (UInt32)stringId); + sharedStrings.Add(s, (UInt32) stringId); stringId++; } } - #region GenerateWorkbookStylesPartContent private void GenerateWorkbookStylesPartContent(WorkbookStylesPart workbookStylesPart) { var defaultStyle = new XLStyle(null, DefaultStyle); Dictionary sharedFonts = new Dictionary(); - sharedFonts.Add(defaultStyle.Font, new FontInfo() { FontId = 0, Font = defaultStyle.Font }); + sharedFonts.Add(defaultStyle.Font, new FontInfo {FontId = 0, Font = defaultStyle.Font}); Dictionary sharedFills = new Dictionary(); - sharedFills.Add(defaultStyle.Fill, new FillInfo() { FillId = 2, Fill = defaultStyle.Fill }); + sharedFills.Add(defaultStyle.Fill, new FillInfo {FillId = 2, Fill = defaultStyle.Fill}); Dictionary sharedBorders = new Dictionary(); - sharedBorders.Add(defaultStyle.Border, new BorderInfo() { BorderId = 0, Border = defaultStyle.Border }); + sharedBorders.Add(defaultStyle.Border, new BorderInfo {BorderId = 0, Border = defaultStyle.Border}); Dictionary sharedNumberFormats = new Dictionary(); - sharedNumberFormats.Add(defaultStyle.NumberFormat, new NumberFormatInfo() { NumberFormatId = 0, NumberFormat = defaultStyle.NumberFormat }); + sharedNumberFormats.Add(defaultStyle.NumberFormat, new NumberFormatInfo {NumberFormatId = 0, NumberFormat = defaultStyle.NumberFormat}); //Dictionary sharedAlignments = new Dictionary(); //sharedAlignments.Add(defaultStyle.Alignment.ToString(), new AlignmentInfo() { AlignmentId = 0, Alignment = defaultStyle.Alignment }); if (workbookStylesPart.Stylesheet == null) + { workbookStylesPart.Stylesheet = new Stylesheet(); + } // Cell styles = Named styles if (workbookStylesPart.Stylesheet.CellStyles == null) + { workbookStylesPart.Stylesheet.CellStyles = new CellStyles(); + } UInt32 defaultFormatId; if (workbookStylesPart.Stylesheet.CellStyles.Elements().Any(c => c.Name == "Normal")) - defaultFormatId = workbookStylesPart.Stylesheet.CellStyles.Elements().Where(c => c.Name == "Normal").Single().FormatId.Value; + { + defaultFormatId = + workbookStylesPart.Stylesheet.CellStyles.Elements().Where(c => c.Name == "Normal").Single().FormatId.Value; + } + else if (workbookStylesPart.Stylesheet.CellStyles.Elements().Any()) + { + defaultFormatId = workbookStylesPart.Stylesheet.CellStyles.Elements().Max(c => c.FormatId.Value) + 1; + } else - if (workbookStylesPart.Stylesheet.CellStyles.Elements().Any()) - defaultFormatId = workbookStylesPart.Stylesheet.CellStyles.Elements().Max(c => c.FormatId.Value) + 1; - else - defaultFormatId = 0; + { + defaultFormatId = 0; + } sharedStyles.Add(defaultStyle, - new StyleInfo() - { - StyleId = defaultFormatId, - Style = defaultStyle, - FontId = 0, - FillId = 0, - BorderId = 0, - NumberFormatId = 0 - //AlignmentId = 0 - }); + new StyleInfo + { + StyleId = defaultFormatId, + Style = defaultStyle, + FontId = 0, + FillId = 0, + BorderId = 0, + NumberFormatId = 0 + //AlignmentId = 0 + }); UInt32 styleCount = 1; UInt32 fontCount = 1; @@ -707,52 +850,61 @@ Int32 numberFormatCount = 1; var xlStyles = new HashSet(); - - foreach (var worksheet in Worksheets.Cast()) + foreach (var worksheet in WorksheetsInternal.Cast()) { foreach (var s in worksheet.Styles) + { if (!xlStyles.Contains(s)) + { xlStyles.Add(s); + } + } - foreach (var s in worksheet.Internals.ColumnsCollection.Select(kp=>kp.Value.Style)) + foreach (var s in worksheet.Internals.ColumnsCollection.Select(kp => kp.Value.Style)) + { if (!xlStyles.Contains(s)) + { xlStyles.Add(s); + } + } foreach (var s in worksheet.Internals.RowsCollection.Select(kp => kp.Value.Style)) + { if (!xlStyles.Contains(s)) + { xlStyles.Add(s); + } + } //xlStyles.AddRange(worksheet.Styles); //worksheet.Internals.ColumnsCollection.Values.ForEach(c => xlStyles.Add(c.Style)); //worksheet.Internals.RowsCollection.Values.ForEach(c => xlStyles.Add(c.Style)); } - - foreach (var xlStyle in xlStyles) { if (!sharedFonts.ContainsKey(xlStyle.Font)) { - sharedFonts.Add(xlStyle.Font, new FontInfo() { FontId = fontCount++, Font = xlStyle.Font }); + sharedFonts.Add(xlStyle.Font, new FontInfo {FontId = fontCount++, Font = xlStyle.Font}); } if (!sharedFills.ContainsKey(xlStyle.Fill)) { - sharedFills.Add(xlStyle.Fill, new FillInfo() { FillId = fillCount++, Fill = xlStyle.Fill }); + sharedFills.Add(xlStyle.Fill, new FillInfo {FillId = fillCount++, Fill = xlStyle.Fill}); } if (!sharedBorders.ContainsKey(xlStyle.Border)) { - sharedBorders.Add(xlStyle.Border, new BorderInfo() { BorderId = borderCount++, Border = xlStyle.Border }); + sharedBorders.Add(xlStyle.Border, new BorderInfo {BorderId = borderCount++, Border = xlStyle.Border}); } if (xlStyle.NumberFormat.NumberFormatId == -1 && !sharedNumberFormats.ContainsKey(xlStyle.NumberFormat)) { - sharedNumberFormats.Add(xlStyle.NumberFormat, new NumberFormatInfo() { NumberFormatId = numberFormatCount + 164, NumberFormat = xlStyle.NumberFormat }); + sharedNumberFormats.Add(xlStyle.NumberFormat, + new NumberFormatInfo {NumberFormatId = numberFormatCount + 164, NumberFormat = xlStyle.NumberFormat}); numberFormatCount++; } } - var allSharedNumberFormats = ResolveNumberFormats(workbookStylesPart, sharedNumberFormats); var allSharedFonts = ResolveFonts(workbookStylesPart, sharedFonts); @@ -765,35 +917,38 @@ { Int32 numberFormatId; if (xlStyle.NumberFormat.NumberFormatId >= 0) + { numberFormatId = xlStyle.NumberFormat.NumberFormatId; + } else + { numberFormatId = allSharedNumberFormats[xlStyle.NumberFormat].NumberFormatId; + } sharedStyles.Add(xlStyle, - new StyleInfo() - { - StyleId = styleCount++, - Style = xlStyle, - FontId = allSharedFonts[xlStyle.Font].FontId, - FillId = allSharedFills[xlStyle.Fill].FillId, - BorderId = allSharedBorders[xlStyle.Border].BorderId, - NumberFormatId = numberFormatId - }); + new StyleInfo + { + StyleId = styleCount++, + Style = xlStyle, + FontId = allSharedFonts[xlStyle.Font].FontId, + FillId = allSharedFills[xlStyle.Fill].FillId, + BorderId = allSharedBorders[xlStyle.Border].BorderId, + NumberFormatId = numberFormatId + }); } } var allCellStyleFormats = ResolveCellStyleFormats(workbookStylesPart); ResolveRest(workbookStylesPart); - if (!workbookStylesPart.Stylesheet.CellStyles.Elements().Any(c => c.Name == "Normal")) { //var defaultFormatId = sharedStyles.Values.Where(s => s.Style.Equals(DefaultStyle)).Single().StyleId; - CellStyle cellStyle1 = new CellStyle() { Name = "Normal", FormatId = (UInt32Value)defaultFormatId, BuiltinId = (UInt32Value)0U }; + CellStyle cellStyle1 = new CellStyle {Name = "Normal", FormatId = defaultFormatId, BuiltinId = 0U}; workbookStylesPart.Stylesheet.CellStyles.Append(cellStyle1); } - workbookStylesPart.Stylesheet.CellStyles.Count = (UInt32)workbookStylesPart.Stylesheet.CellStyles.Count(); + workbookStylesPart.Stylesheet.CellStyles.Count = (UInt32) workbookStylesPart.Stylesheet.CellStyles.Count(); var newSharedStyles = new Dictionary(); foreach (var ss in sharedStyles) @@ -803,11 +958,16 @@ { styleId++; if (CellFormatsAreEqual(f, ss.Value)) + { break; + } } - if (styleId == -1) styleId = 0; + if (styleId == -1) + { + styleId = 0; + } var si = ss.Value; - si.StyleId = (UInt32)styleId; + si.StyleId = (UInt32) styleId; newSharedStyles.Add(ss.Key, si); } sharedStyles.Clear(); @@ -820,7 +980,9 @@ private void ResolveRest(WorkbookStylesPart workbookStylesPart) { if (workbookStylesPart.Stylesheet.CellFormats == null) + { workbookStylesPart.Stylesheet.CellFormats = new CellFormats(); + } foreach (var styleInfo in sharedStyles.Values) { @@ -841,40 +1003,46 @@ foreach (CellFormat f in workbookStylesPart.Stylesheet.CellStyleFormats) { if (CellFormatsAreEqual(f, styleInfo)) + { break; + } styleId++; } //CellFormat cellFormat = new CellFormat() { NumberFormatId = (UInt32)styleInfo.NumberFormatId, FontId = (UInt32)styleInfo.FontId, FillId = (UInt32)styleInfo.FillId, BorderId = (UInt32)styleInfo.BorderId, ApplyNumberFormat = false, ApplyFill = ApplyFill(styleInfo), ApplyBorder = ApplyBorder(styleInfo), ApplyAlignment = false, ApplyProtection = false, FormatId = (UInt32)formatId }; CellFormat cellFormat = GetCellFormat(styleInfo); - cellFormat.FormatId = (UInt32)formatId; - Alignment alignment = new Alignment() - { - Horizontal = styleInfo.Style.Alignment.Horizontal.ToOpenXml(), - Vertical = styleInfo.Style.Alignment.Vertical.ToOpenXml(), - Indent = (UInt32)styleInfo.Style.Alignment.Indent, - ReadingOrder = (UInt32)styleInfo.Style.Alignment.ReadingOrder, - WrapText = styleInfo.Style.Alignment.WrapText, - TextRotation = (UInt32)styleInfo.Style.Alignment.TextRotation, - ShrinkToFit = styleInfo.Style.Alignment.ShrinkToFit, - RelativeIndent = styleInfo.Style.Alignment.RelativeIndent, - JustifyLastLine = styleInfo.Style.Alignment.JustifyLastLine - }; + cellFormat.FormatId = (UInt32) formatId; + Alignment alignment = new Alignment + { + Horizontal = styleInfo.Style.Alignment.Horizontal.ToOpenXml(), + Vertical = styleInfo.Style.Alignment.Vertical.ToOpenXml(), + Indent = (UInt32) styleInfo.Style.Alignment.Indent, + ReadingOrder = (UInt32) styleInfo.Style.Alignment.ReadingOrder, + WrapText = styleInfo.Style.Alignment.WrapText, + TextRotation = (UInt32) styleInfo.Style.Alignment.TextRotation, + ShrinkToFit = styleInfo.Style.Alignment.ShrinkToFit, + RelativeIndent = styleInfo.Style.Alignment.RelativeIndent, + JustifyLastLine = styleInfo.Style.Alignment.JustifyLastLine + }; cellFormat.Append(alignment); if (cellFormat.ApplyProtection.Value) + { cellFormat.Append(GetProtection(styleInfo)); + } workbookStylesPart.Stylesheet.CellFormats.Append(cellFormat); } } - workbookStylesPart.Stylesheet.CellFormats.Count = (UInt32)workbookStylesPart.Stylesheet.CellFormats.Count(); + workbookStylesPart.Stylesheet.CellFormats.Count = (UInt32) workbookStylesPart.Stylesheet.CellFormats.Count(); } private Dictionary ResolveCellStyleFormats(WorkbookStylesPart workbookStylesPart) { if (workbookStylesPart.Stylesheet.CellStyleFormats == null) + { workbookStylesPart.Stylesheet.CellStyleFormats = new CellStyleFormats(); + } var allSharedStyles = new Dictionary(); foreach (var styleInfo in sharedStyles.Values) @@ -896,13 +1064,15 @@ CellFormat cellStyleFormat = GetCellFormat(styleInfo); if (cellStyleFormat.ApplyProtection.Value) + { cellStyleFormat.Append(GetProtection(styleInfo)); + } workbookStylesPart.Stylesheet.CellStyleFormats.Append(cellStyleFormat); } - allSharedStyles.Add(styleInfo.Style, new StyleInfo() { Style = styleInfo.Style, StyleId = (UInt32)styleId }); + allSharedStyles.Add(styleInfo.Style, new StyleInfo {Style = styleInfo.Style, StyleId = (UInt32) styleId}); } - workbookStylesPart.Stylesheet.CellStyleFormats.Count = (UInt32)workbookStylesPart.Stylesheet.CellStyleFormats.Count(); + workbookStylesPart.Stylesheet.CellStyleFormats.Count = (UInt32) workbookStylesPart.Stylesheet.CellStyleFormats.Count(); return allSharedStyles; } @@ -916,11 +1086,11 @@ { IXLBorder opBorder = styleInfo.Style.Border; return ( - opBorder.BottomBorder.ToOpenXml() != BorderStyleValues.None - || opBorder.DiagonalBorder.ToOpenXml() != BorderStyleValues.None - || opBorder.RightBorder.ToOpenXml() != BorderStyleValues.None - || opBorder.LeftBorder.ToOpenXml() != BorderStyleValues.None - || opBorder.TopBorder.ToOpenXml() != BorderStyleValues.None); + opBorder.BottomBorder.ToOpenXml() != BorderStyleValues.None + || opBorder.DiagonalBorder.ToOpenXml() != BorderStyleValues.None + || opBorder.RightBorder.ToOpenXml() != BorderStyleValues.None + || opBorder.LeftBorder.ToOpenXml() != BorderStyleValues.None + || opBorder.TopBorder.ToOpenXml() != BorderStyleValues.None); } private Boolean ApplyProtection(StyleInfo styleInfo) @@ -930,33 +1100,44 @@ private CellFormat GetCellFormat(StyleInfo styleInfo) { - var cellFormat = new CellFormat() { NumberFormatId = (UInt32)styleInfo.NumberFormatId, FontId = (UInt32)styleInfo.FontId, FillId = (UInt32)styleInfo.FillId, BorderId = (UInt32)styleInfo.BorderId, ApplyNumberFormat = false, ApplyFill = ApplyFill(styleInfo), ApplyBorder = ApplyBorder(styleInfo), ApplyAlignment = false, ApplyProtection = ApplyProtection(styleInfo) }; + var cellFormat = new CellFormat + { + NumberFormatId = (UInt32) styleInfo.NumberFormatId, + FontId = styleInfo.FontId, + FillId = styleInfo.FillId, + BorderId = styleInfo.BorderId, + ApplyNumberFormat = false, + ApplyFill = ApplyFill(styleInfo), + ApplyBorder = ApplyBorder(styleInfo), + ApplyAlignment = false, + ApplyProtection = ApplyProtection(styleInfo) + }; return cellFormat; } private static Protection GetProtection(StyleInfo styleInfo) { - return new Protection() - { - Locked = styleInfo.Style.Protection.Locked, - Hidden = styleInfo.Style.Protection.Hidden - }; + return new Protection + { + Locked = styleInfo.Style.Protection.Locked, + Hidden = styleInfo.Style.Protection.Hidden + }; } private bool CellFormatsAreEqual(CellFormat f, StyleInfo styleInfo) { return - styleInfo.BorderId == f.BorderId - && styleInfo.FillId == f.FillId - && styleInfo.FontId == f.FontId - && styleInfo.NumberFormatId == f.NumberFormatId - && f.ApplyNumberFormat != null && f.ApplyNumberFormat == false - && f.ApplyAlignment != null && f.ApplyAlignment == false - && f.ApplyFill != null && f.ApplyFill == ApplyFill(styleInfo) - && f.ApplyBorder != null && f.ApplyBorder == ApplyBorder(styleInfo) - && AlignmentsAreEqual(f.Alignment, styleInfo.Style.Alignment) - && ProtectionsAreEqual(f.Protection, styleInfo.Style.Protection) - ; + styleInfo.BorderId == f.BorderId + && styleInfo.FillId == f.FillId + && styleInfo.FontId == f.FontId + && styleInfo.NumberFormatId == f.NumberFormatId + && f.ApplyNumberFormat != null && f.ApplyNumberFormat == false + && f.ApplyAlignment != null && f.ApplyAlignment == false + && f.ApplyFill != null && f.ApplyFill == ApplyFill(styleInfo) + && f.ApplyBorder != null && f.ApplyBorder == ApplyBorder(styleInfo) + && AlignmentsAreEqual(f.Alignment, styleInfo.Style.Alignment) + && ProtectionsAreEqual(f.Protection, styleInfo.Style.Protection) + ; } private bool ProtectionsAreEqual(Protection protection, IXLProtection xlProtection) @@ -965,45 +1146,69 @@ if (protection != null) { if (protection.Locked != null) + { p.Locked = protection.Locked.Value; + } if (protection.Hidden != null) + { p.Hidden = protection.Hidden.Value; + } } return p.Equals(xlProtection); } - private bool AlignmentsAreEqual(Alignment alignment, IXLAlignment xlAlignment) { var a = new XLAlignment(); if (alignment != null) { if (alignment.Horizontal != null) + { a.Horizontal = alignment.Horizontal.Value.ToClosedXml(); + } if (alignment.Vertical != null) + { a.Vertical = alignment.Vertical.Value.ToClosedXml(); + } if (alignment.Indent != null) - a.Indent = (Int32)alignment.Indent.Value; + { + a.Indent = (Int32) alignment.Indent.Value; + } if (alignment.ReadingOrder != null) + { a.ReadingOrder = alignment.ReadingOrder.Value.ToClosedXml(); + } if (alignment.WrapText != null) + { a.WrapText = alignment.WrapText.Value; + } if (alignment.TextRotation != null) - a.TextRotation = (Int32)alignment.TextRotation.Value; + { + a.TextRotation = (Int32) alignment.TextRotation.Value; + } if (alignment.ShrinkToFit != null) + { a.ShrinkToFit = alignment.ShrinkToFit.Value; + } if (alignment.RelativeIndent != null) + { a.RelativeIndent = alignment.RelativeIndent.Value; + } if (alignment.JustifyLastLine != null) + { a.JustifyLastLine = alignment.JustifyLastLine.Value; + } } return a.Equals(xlAlignment); } - private Dictionary ResolveBorders(WorkbookStylesPart workbookStylesPart, Dictionary sharedBorders) + private Dictionary ResolveBorders(WorkbookStylesPart workbookStylesPart, + Dictionary sharedBorders) { if (workbookStylesPart.Stylesheet.Borders == null) + { workbookStylesPart.Stylesheet.Borders = new Borders(); + } var allSharedBorders = new Dictionary(); foreach (var borderInfo in sharedBorders.Values) @@ -1024,37 +1229,37 @@ Border border = GetNewBorder(borderInfo); workbookStylesPart.Stylesheet.Borders.Append(border); } - allSharedBorders.Add(borderInfo.Border, new BorderInfo() { Border = borderInfo.Border, BorderId = (UInt32)borderId }); + allSharedBorders.Add(borderInfo.Border, new BorderInfo {Border = borderInfo.Border, BorderId = (UInt32) borderId}); } - workbookStylesPart.Stylesheet.Borders.Count = (UInt32)workbookStylesPart.Stylesheet.Borders.Count(); + workbookStylesPart.Stylesheet.Borders.Count = (UInt32) workbookStylesPart.Stylesheet.Borders.Count(); return allSharedBorders; } private Border GetNewBorder(BorderInfo borderInfo) { - Border border = new Border() { DiagonalUp = borderInfo.Border.DiagonalUp, DiagonalDown = borderInfo.Border.DiagonalDown }; + Border border = new Border {DiagonalUp = borderInfo.Border.DiagonalUp, DiagonalDown = borderInfo.Border.DiagonalDown}; - LeftBorder leftBorder = new LeftBorder() { Style = borderInfo.Border.LeftBorder.ToOpenXml() }; + LeftBorder leftBorder = new LeftBorder {Style = borderInfo.Border.LeftBorder.ToOpenXml()}; Color leftBorderColor = GetNewColor(borderInfo.Border.LeftBorderColor); leftBorder.Append(leftBorderColor); border.Append(leftBorder); - RightBorder rightBorder = new RightBorder() { Style = borderInfo.Border.RightBorder.ToOpenXml() }; + RightBorder rightBorder = new RightBorder {Style = borderInfo.Border.RightBorder.ToOpenXml()}; Color rightBorderColor = GetNewColor(borderInfo.Border.RightBorderColor); rightBorder.Append(rightBorderColor); border.Append(rightBorder); - TopBorder topBorder = new TopBorder() { Style = borderInfo.Border.TopBorder.ToOpenXml() }; + TopBorder topBorder = new TopBorder {Style = borderInfo.Border.TopBorder.ToOpenXml()}; Color topBorderColor = GetNewColor(borderInfo.Border.TopBorderColor); topBorder.Append(topBorderColor); border.Append(topBorder); - BottomBorder bottomBorder = new BottomBorder() { Style = borderInfo.Border.BottomBorder.ToOpenXml() }; + BottomBorder bottomBorder = new BottomBorder {Style = borderInfo.Border.BottomBorder.ToOpenXml()}; Color bottomBorderColor = GetNewColor(borderInfo.Border.BottomBorderColor); bottomBorder.Append(bottomBorderColor); border.Append(bottomBorder); - DiagonalBorder diagonalBorder = new DiagonalBorder() { Style = borderInfo.Border.DiagonalBorder.ToOpenXml() }; + DiagonalBorder diagonalBorder = new DiagonalBorder {Style = borderInfo.Border.DiagonalBorder.ToOpenXml()}; Color diagonalBorderColor = GetNewColor(borderInfo.Border.DiagonalBorderColor); diagonalBorder.Append(diagonalBorderColor); border.Append(diagonalBorder); @@ -1066,45 +1271,65 @@ { var nb = new XLBorder(); if (b.DiagonalUp != null) + { nb.DiagonalUp = b.DiagonalUp.Value; - + } + if (b.DiagonalDown != null) + { nb.DiagonalDown = b.DiagonalDown.Value; + } if (b.LeftBorder != null) { if (b.LeftBorder.Style != null) + { nb.LeftBorder = b.LeftBorder.Style.Value.ToClosedXml(); + } var bColor = GetColor(b.LeftBorder.Color); if (bColor.HasValue) + { nb.LeftBorderColor = bColor; + } } if (b.RightBorder != null) { if (b.RightBorder.Style != null) + { nb.RightBorder = b.RightBorder.Style.Value.ToClosedXml(); + } var bColor = GetColor(b.RightBorder.Color); if (bColor.HasValue) + { nb.RightBorderColor = bColor; + } } if (b.TopBorder != null) { if (b.TopBorder.Style != null) + { nb.TopBorder = b.TopBorder.Style.Value.ToClosedXml(); + } var bColor = GetColor(b.TopBorder.Color); if (bColor.HasValue) + { nb.TopBorderColor = bColor; + } } if (b.BottomBorder != null) { if (b.BottomBorder.Style != null) + { nb.BottomBorder = b.BottomBorder.Style.Value.ToClosedXml(); + } var bColor = GetColor(b.BottomBorder.Color); if (bColor.HasValue) + { nb.BottomBorderColor = bColor; + } } return nb.Equals(xlBorder); @@ -1113,7 +1338,9 @@ private Dictionary ResolveFills(WorkbookStylesPart workbookStylesPart, Dictionary sharedFills) { if (workbookStylesPart.Stylesheet.Fills == null) + { workbookStylesPart.Stylesheet.Fills = new Fills(); + } ResolveFillWithPattern(workbookStylesPart.Stylesheet.Fills, PatternValues.None); ResolveFillWithPattern(workbookStylesPart.Stylesheet.Fills, PatternValues.Gray125); @@ -1137,55 +1364,66 @@ Fill fill = GetNewFill(fillInfo); workbookStylesPart.Stylesheet.Fills.Append(fill); } - allSharedFills.Add(fillInfo.Fill, new FillInfo() { Fill = fillInfo.Fill, FillId = (UInt32)fillId }); + allSharedFills.Add(fillInfo.Fill, new FillInfo {Fill = fillInfo.Fill, FillId = (UInt32) fillId}); } - - workbookStylesPart.Stylesheet.Fills.Count = (UInt32)workbookStylesPart.Stylesheet.Fills.Count(); + + workbookStylesPart.Stylesheet.Fills.Count = (UInt32) workbookStylesPart.Stylesheet.Fills.Count(); return allSharedFills; } private void ResolveFillWithPattern(Fills fills, PatternValues patternValues) { - if (!fills.Elements().Any(f => - f.PatternFill.PatternType == patternValues - && f.PatternFill.ForegroundColor == null - && f.PatternFill.BackgroundColor == null - )) + if (!fills.Elements().Any(f => + f.PatternFill.PatternType == patternValues + && f.PatternFill.ForegroundColor == null + && f.PatternFill.BackgroundColor == null + )) { Fill fill1 = new Fill(); - PatternFill patternFill1 = new PatternFill() { PatternType = patternValues }; + PatternFill patternFill1 = new PatternFill {PatternType = patternValues}; fill1.Append(patternFill1); fills.Append(fill1); } - } private Fill GetNewFill(FillInfo fillInfo) { Fill fill = new Fill(); - PatternFill patternFill = new PatternFill() { PatternType = fillInfo.Fill.PatternType.ToOpenXml() }; + PatternFill patternFill = new PatternFill {PatternType = fillInfo.Fill.PatternType.ToOpenXml()}; ForegroundColor foregroundColor = new ForegroundColor(); if (fillInfo.Fill.PatternColor.ColorType == XLColorType.Color) + { foregroundColor.Rgb = fillInfo.Fill.PatternColor.Color.ToHex(); + } else if (fillInfo.Fill.PatternColor.ColorType == XLColorType.Indexed) - foregroundColor.Indexed = (UInt32)fillInfo.Fill.PatternColor.Indexed; + { + foregroundColor.Indexed = (UInt32) fillInfo.Fill.PatternColor.Indexed; + } else { - foregroundColor.Theme = (UInt32)fillInfo.Fill.PatternColor.ThemeColor; + foregroundColor.Theme = (UInt32) fillInfo.Fill.PatternColor.ThemeColor; if (fillInfo.Fill.PatternColor.ThemeTint != 1) + { foregroundColor.Tint = fillInfo.Fill.PatternColor.ThemeTint; + } } BackgroundColor backgroundColor = new BackgroundColor(); if (fillInfo.Fill.PatternBackgroundColor.ColorType == XLColorType.Color) + { backgroundColor.Rgb = fillInfo.Fill.PatternBackgroundColor.Color.ToHex(); + } else if (fillInfo.Fill.PatternBackgroundColor.ColorType == XLColorType.Indexed) - backgroundColor.Indexed = (UInt32)fillInfo.Fill.PatternBackgroundColor.Indexed; + { + backgroundColor.Indexed = (UInt32) fillInfo.Fill.PatternBackgroundColor.Indexed; + } else { - backgroundColor.Theme = (UInt32)fillInfo.Fill.PatternBackgroundColor.ThemeColor; + backgroundColor.Theme = (UInt32) fillInfo.Fill.PatternBackgroundColor.ThemeColor; if (fillInfo.Fill.PatternBackgroundColor.ThemeTint != 1) + { backgroundColor.Tint = fillInfo.Fill.PatternBackgroundColor.ThemeTint; + } } patternFill.Append(foregroundColor); @@ -1202,15 +1440,21 @@ if (f.PatternFill != null) { if (f.PatternFill.PatternType != null) + { nF.PatternType = f.PatternFill.PatternType.Value.ToClosedXml(); + } var fColor = GetColor(f.PatternFill.ForegroundColor); if (fColor.HasValue) + { nF.PatternColor = fColor; + } var bColor = GetColor(f.PatternFill.BackgroundColor); if (bColor.HasValue) + { nF.PatternBackgroundColor = bColor; + } } return nF.Equals(xlFill); } @@ -1218,7 +1462,9 @@ private Dictionary ResolveFonts(WorkbookStylesPart workbookStylesPart, Dictionary sharedFonts) { if (workbookStylesPart.Stylesheet.Fonts == null) + { workbookStylesPart.Stylesheet.Fonts = new Fonts(); + } var allSharedFonts = new Dictionary(); foreach (var fontInfo in sharedFonts.Values) @@ -1239,9 +1485,9 @@ Font font = GetNewFont(fontInfo); workbookStylesPart.Stylesheet.Fonts.Append(font); } - allSharedFonts.Add(fontInfo.Font, new FontInfo() { Font = fontInfo.Font, FontId = (UInt32)fontId }); + allSharedFonts.Add(fontInfo.Font, new FontInfo {Font = fontInfo.Font, FontId = (UInt32) fontId}); } - workbookStylesPart.Stylesheet.Fonts.Count = (UInt32)workbookStylesPart.Stylesheet.Fonts.Count(); + workbookStylesPart.Stylesheet.Fonts.Count = (UInt32) workbookStylesPart.Stylesheet.Fonts.Count(); return allSharedFonts; } @@ -1250,22 +1496,39 @@ Font font = new Font(); Bold bold = fontInfo.Font.Bold ? new Bold() : null; Italic italic = fontInfo.Font.Italic ? new Italic() : null; - Underline underline = fontInfo.Font.Underline != XLFontUnderlineValues.None ? new Underline() { Val = fontInfo.Font.Underline.ToOpenXml() } : null; + Underline underline = fontInfo.Font.Underline != XLFontUnderlineValues.None + ? new Underline {Val = fontInfo.Font.Underline.ToOpenXml()} + : null; Strike strike = fontInfo.Font.Strikethrough ? new Strike() : null; - VerticalTextAlignment verticalAlignment = new VerticalTextAlignment() { Val = fontInfo.Font.VerticalAlignment.ToOpenXml() }; + VerticalTextAlignment verticalAlignment = new VerticalTextAlignment {Val = fontInfo.Font.VerticalAlignment.ToOpenXml()}; Shadow shadow = fontInfo.Font.Shadow ? new Shadow() : null; - FontSize fontSize = new FontSize() { Val = fontInfo.Font.FontSize }; + FontSize fontSize = new FontSize {Val = fontInfo.Font.FontSize}; Color color = GetNewColor(fontInfo.Font.FontColor); - - FontName fontName = new FontName() { Val = fontInfo.Font.FontName }; - FontFamilyNumbering fontFamilyNumbering = new FontFamilyNumbering() { Val = (Int32)fontInfo.Font.FontFamilyNumbering }; - if (bold != null) font.Append(bold); - if (italic != null) font.Append(italic); - if (underline != null) font.Append(underline); - if (strike != null) font.Append(strike); + FontName fontName = new FontName {Val = fontInfo.Font.FontName}; + FontFamilyNumbering fontFamilyNumbering = new FontFamilyNumbering {Val = (Int32) fontInfo.Font.FontFamilyNumbering}; + + if (bold != null) + { + font.Append(bold); + } + if (italic != null) + { + font.Append(italic); + } + if (underline != null) + { + font.Append(underline); + } + if (strike != null) + { + font.Append(strike); + } font.Append(verticalAlignment); - if (shadow != null) font.Append(shadow); + if (shadow != null) + { + font.Append(shadow); + } font.Append(fontSize); font.Append(color); font.Append(fontName); @@ -1278,14 +1541,20 @@ { Color color = new Color(); if (xlColor.ColorType == XLColorType.Color) + { color.Rgb = xlColor.Color.ToHex(); + } else if (xlColor.ColorType == XLColorType.Indexed) - color.Indexed = (UInt32)xlColor.Indexed; + { + color.Indexed = (UInt32) xlColor.Indexed; + } else { - color.Theme = (UInt32)xlColor.ThemeColor; + color.Theme = (UInt32) xlColor.ThemeColor; if (xlColor.ThemeTint != 1) + { color.Tint = xlColor.ThemeTint; + } } return color; } @@ -1294,14 +1563,20 @@ { TabColor color = new TabColor(); if (xlColor.ColorType == XLColorType.Color) + { color.Rgb = xlColor.Color.ToHex(); + } else if (xlColor.ColorType == XLColorType.Indexed) - color.Indexed = (UInt32)xlColor.Indexed; + { + color.Indexed = (UInt32) xlColor.Indexed; + } else { - color.Theme = (UInt32)xlColor.ThemeColor; + color.Theme = (UInt32) xlColor.ThemeColor; if (xlColor.ThemeTint != 1) + { color.Tint = xlColor.ThemeTint; + } } return color; } @@ -1312,34 +1587,57 @@ nf.Bold = f.Bold != null; nf.Italic = f.Italic != null; if (f.Underline != null) + { if (f.Underline.Val != null) + { nf.Underline = f.Underline.Val.Value.ToClosedXml(); + } else + { nf.Underline = XLFontUnderlineValues.Single; + } + } nf.Strikethrough = f.Strike != null; if (f.VerticalTextAlignment != null) + { if (f.VerticalTextAlignment.Val != null) + { nf.VerticalAlignment = f.VerticalTextAlignment.Val.Value.ToClosedXml(); + } else + { nf.VerticalAlignment = XLFontVerticalTextAlignmentValues.Baseline; + } + } nf.Shadow = f.Shadow != null; if (f.FontSize != null) + { nf.FontSize = f.FontSize.Val; + } var fColor = GetColor(f.Color); if (fColor.HasValue) + { nf.FontColor = fColor; + } if (f.FontName != null) + { nf.FontName = f.FontName.Val; + } if (f.FontFamilyNumbering != null) - nf.FontFamilyNumbering = (XLFontFamilyNumberingValues)f.FontFamilyNumbering.Val.Value; + { + nf.FontFamilyNumbering = (XLFontFamilyNumberingValues) f.FontFamilyNumbering.Val.Value; + } return nf.Equals(xlFont); } - private Dictionary ResolveNumberFormats(WorkbookStylesPart workbookStylesPart, Dictionary sharedNumberFormats) + private Dictionary ResolveNumberFormats(WorkbookStylesPart workbookStylesPart, + Dictionary sharedNumberFormats) { if (workbookStylesPart.Stylesheet.NumberingFormats == null) + { workbookStylesPart.Stylesheet.NumberingFormats = new NumberingFormats(); + } var allSharedNumberFormats = new Dictionary(); foreach (var numberFormatInfo in sharedNumberFormats.Values) @@ -1351,156 +1649,214 @@ if (NumberFormatsAreEqual(nf, numberFormatInfo.NumberFormat)) { foundOne = true; - numberingFormatId = (Int32)nf.NumberFormatId.Value; + numberingFormatId = (Int32) nf.NumberFormatId.Value; break; } numberingFormatId++; } if (!foundOne) { - NumberingFormat numberingFormat = new NumberingFormat() { NumberFormatId = (UInt32)numberingFormatId, FormatCode = numberFormatInfo.NumberFormat.Format }; + NumberingFormat numberingFormat = new NumberingFormat + { + NumberFormatId = (UInt32) numberingFormatId, + FormatCode = numberFormatInfo.NumberFormat.Format + }; workbookStylesPart.Stylesheet.NumberingFormats.Append(numberingFormat); } - allSharedNumberFormats.Add(numberFormatInfo.NumberFormat, new NumberFormatInfo() { NumberFormat = numberFormatInfo.NumberFormat, NumberFormatId = numberingFormatId }); + allSharedNumberFormats.Add(numberFormatInfo.NumberFormat, + new NumberFormatInfo {NumberFormat = numberFormatInfo.NumberFormat, NumberFormatId = numberingFormatId}); } - workbookStylesPart.Stylesheet.NumberingFormats.Count = (UInt32)workbookStylesPart.Stylesheet.NumberingFormats.Count(); + workbookStylesPart.Stylesheet.NumberingFormats.Count = (UInt32) workbookStylesPart.Stylesheet.NumberingFormats.Count(); return allSharedNumberFormats; } private bool NumberFormatsAreEqual(NumberingFormat nf, IXLNumberFormat xlNumberFormat) { var newXLNumberFormat = new XLNumberFormat(); - + if (nf.FormatCode != null && !StringExtensions.IsNullOrWhiteSpace(nf.FormatCode.Value)) + { newXLNumberFormat.Format = nf.FormatCode.Value; + } else if (nf.NumberFormatId != null) - newXLNumberFormat.NumberFormatId = (Int32)nf.NumberFormatId.Value; + { + newXLNumberFormat.NumberFormatId = (Int32) nf.NumberFormatId.Value; + } return newXLNumberFormat.Equals(xlNumberFormat); } -#endregion - + #endregion #region GenerateWorksheetPartContent private void GenerateWorksheetPartContent(WorksheetPart worksheetPart, XLWorksheet xlWorksheet) { - #region Worksheet if (worksheetPart.Worksheet == null) + { worksheetPart.Worksheet = new Worksheet(); + } GenerateTables(xlWorksheet, worksheetPart); - if (!worksheetPart.Worksheet.NamespaceDeclarations.Contains(new KeyValuePair("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"))) + if ( + !worksheetPart.Worksheet.NamespaceDeclarations.Contains(new KeyValuePair("r", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships"))) + { worksheetPart.Worksheet.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); + } #endregion - var cm = new XLWSContentManager(worksheetPart.Worksheet); - #region SheetProperties if (worksheetPart.Worksheet.SheetProperties == null) + { worksheetPart.Worksheet.SheetProperties = new SheetProperties(); + } if (xlWorksheet.TabColor.HasValue) + { worksheetPart.Worksheet.SheetProperties.TabColor = GetTabColor(xlWorksheet.TabColor); + } else + { worksheetPart.Worksheet.SheetProperties.TabColor = null; - + } cm.SetElement(XLWSContentManager.XLWSContents.SheetProperties, worksheetPart.Worksheet.SheetProperties); if (worksheetPart.Worksheet.SheetProperties.OutlineProperties == null) + { worksheetPart.Worksheet.SheetProperties.OutlineProperties = new OutlineProperties(); + } - worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryBelow = (xlWorksheet.Outline.SummaryVLocation == XLOutlineSummaryVLocation.Bottom); - worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryRight = (xlWorksheet.Outline.SummaryHLocation == XLOutlineSummaryHLocation.Right); + worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryBelow = (xlWorksheet.Outline.SummaryVLocation == + XLOutlineSummaryVLocation.Bottom); + worksheetPart.Worksheet.SheetProperties.OutlineProperties.SummaryRight = (xlWorksheet.Outline.SummaryHLocation == + XLOutlineSummaryHLocation.Right); - if (worksheetPart.Worksheet.SheetProperties.PageSetupProperties == null && (xlWorksheet.PageSetup.PagesTall > 0 || xlWorksheet.PageSetup.PagesWide > 0)) + if (worksheetPart.Worksheet.SheetProperties.PageSetupProperties == null && + (xlWorksheet.PageSetup.PagesTall > 0 || xlWorksheet.PageSetup.PagesWide > 0)) + { worksheetPart.Worksheet.SheetProperties.PageSetupProperties = new PageSetupProperties(); + } if (xlWorksheet.PageSetup.PagesTall > 0 || xlWorksheet.PageSetup.PagesWide > 0) + { worksheetPart.Worksheet.SheetProperties.PageSetupProperties.FitToPage = true; - + } #endregion - UInt32 maxColumn = 0; UInt32 maxRow = 0; String sheetDimensionReference = "A1"; if ((xlWorksheet as XLWorksheet).Internals.CellsCollection.Count > 0) { - maxColumn = (UInt32)(xlWorksheet as XLWorksheet).Internals.CellsCollection.Select(c => c.Key.ColumnNumber).Max(); - maxRow = (UInt32)(xlWorksheet as XLWorksheet).Internals.CellsCollection.Select(c => c.Key.RowNumber).Max(); - sheetDimensionReference = "A1:" + XLAddress.GetColumnLetterFromNumber((Int32)maxColumn) + ((Int32)maxRow).ToStringLookup(); + maxColumn = (UInt32) (xlWorksheet as XLWorksheet).Internals.CellsCollection.Select(c => c.Key.ColumnNumber).Max(); + maxRow = (UInt32) (xlWorksheet as XLWorksheet).Internals.CellsCollection.Select(c => c.Key.RowNumber).Max(); + sheetDimensionReference = "A1:" + XLAddress.GetColumnLetterFromNumber((Int32) maxColumn) + ((Int32) maxRow).ToStringLookup(); } if ((xlWorksheet as XLWorksheet).Internals.ColumnsCollection.Count > 0) { - UInt32 maxColCollection = (UInt32)(xlWorksheet as XLWorksheet).Internals.ColumnsCollection.Keys.Max(); - if (maxColCollection > maxColumn) maxColumn = maxColCollection; + UInt32 maxColCollection = (UInt32) (xlWorksheet as XLWorksheet).Internals.ColumnsCollection.Keys.Max(); + if (maxColCollection > maxColumn) + { + maxColumn = maxColCollection; + } } if ((xlWorksheet as XLWorksheet).Internals.RowsCollection.Count > 0) { - UInt32 maxRowCollection = (UInt32)(xlWorksheet as XLWorksheet).Internals.RowsCollection.Keys.Max(); - if (maxRowCollection > maxRow) maxRow = maxRowCollection; + UInt32 maxRowCollection = (UInt32) (xlWorksheet as XLWorksheet).Internals.RowsCollection.Keys.Max(); + if (maxRowCollection > maxRow) + { + maxRow = maxRowCollection; + } } - #region SheetViews if (worksheetPart.Worksheet.SheetDimension == null) - worksheetPart.Worksheet.SheetDimension = new SheetDimension() { Reference = sheetDimensionReference }; + { + worksheetPart.Worksheet.SheetDimension = new SheetDimension() {Reference = sheetDimensionReference}; + } cm.SetElement(XLWSContentManager.XLWSContents.SheetDimension, worksheetPart.Worksheet.SheetDimension); if (worksheetPart.Worksheet.SheetViews == null) + { worksheetPart.Worksheet.SheetViews = new SheetViews(); + } cm.SetElement(XLWSContentManager.XLWSContents.SheetViews, worksheetPart.Worksheet.SheetViews); - SheetView sheetView = (SheetView)worksheetPart.Worksheet.SheetViews.FirstOrDefault(); + SheetView sheetView = (SheetView) worksheetPart.Worksheet.SheetViews.FirstOrDefault(); if (sheetView == null) { - sheetView = new SheetView() { WorkbookViewId = (UInt32Value)0U }; + sheetView = new SheetView() {WorkbookViewId = (UInt32Value) 0U}; worksheetPart.Worksheet.SheetViews.Append(sheetView); } sheetView.TabSelected = xlWorksheet.TabSelected; - if (xlWorksheet.ShowFormulas) + { sheetView.ShowFormulas = true; + } else + { sheetView.ShowFormulas = null; + } if (xlWorksheet.ShowGridLines) + { sheetView.ShowGridLines = null; + } else + { sheetView.ShowGridLines = false; + } if (xlWorksheet.ShowOutlineSymbols) + { sheetView.ShowOutlineSymbols = null; + } else + { sheetView.ShowOutlineSymbols = false; + } if (xlWorksheet.ShowRowColHeaders) + { sheetView.ShowRowColHeaders = null; + } else + { sheetView.ShowRowColHeaders = false; + } if (xlWorksheet.ShowRuler) + { sheetView.ShowRuler = null; + } else + { sheetView.ShowRuler = false; + } if (xlWorksheet.ShowWhiteSpace) + { sheetView.ShowWhiteSpace = null; + } else + { sheetView.ShowWhiteSpace = false; + } if (xlWorksheet.ShowZeros) + { sheetView.ShowZeros = null; + } else + { sheetView.ShowZeros = false; - + } var pane = sheetView.Elements().FirstOrDefault(); if (pane == null) @@ -1534,47 +1890,61 @@ pane.VerticalSplit = ySplit; pane.TopLeftCell = XLAddress.GetColumnLetterFromNumber(xlWorksheet.SheetView.SplitColumn + 1) - + (xlWorksheet.SheetView.SplitRow + 1).ToString(); + + (xlWorksheet.SheetView.SplitRow + 1).ToString(); if (hSplit == 0 && ySplit == 0) + { sheetView.RemoveAllChildren(); - + } #endregion - var maxOutlineColumn = 0; if (xlWorksheet.ColumnCount() > 0) + { maxOutlineColumn = xlWorksheet.GetMaxColumnOutline(); + } var maxOutlineRow = 0; if (xlWorksheet.RowCount() > 0) + { maxOutlineRow = xlWorksheet.GetMaxRowOutline(); - + } #region SheetFormatProperties if (worksheetPart.Worksheet.SheetFormatProperties == null) + { worksheetPart.Worksheet.SheetFormatProperties = new SheetFormatProperties(); + } cm.SetElement(XLWSContentManager.XLWSContents.SheetFormatProperties, worksheetPart.Worksheet.SheetFormatProperties); worksheetPart.Worksheet.SheetFormatProperties.DefaultRowHeight = xlWorksheet.RowHeight; worksheetPart.Worksheet.SheetFormatProperties.DefaultColumnWidth = xlWorksheet.ColumnWidth; if (xlWorksheet.RowHeightChanged) + { worksheetPart.Worksheet.SheetFormatProperties.CustomHeight = true; - + } if (maxOutlineColumn > 0) - worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelColumn = (byte)maxOutlineColumn; + { + worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelColumn = (byte) maxOutlineColumn; + } else + { worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelColumn = null; + } if (maxOutlineRow > 0) - worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelRow = (byte)maxOutlineRow; + { + worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelRow = (byte) maxOutlineRow; + } else + { worksheetPart.Worksheet.SheetFormatProperties.OutlineLevelRow = null; + } #endregion - #region Columns Columns columns = null; - if ((xlWorksheet as XLWorksheet).Internals.CellsCollection.Count == 0 && (xlWorksheet as XLWorksheet).Internals.ColumnsCollection.Count == 0) + if ((xlWorksheet as XLWorksheet).Internals.CellsCollection.Count == 0 && + (xlWorksheet as XLWorksheet).Internals.ColumnsCollection.Count == 0) { worksheetPart.Worksheet.RemoveAllChildren(); } @@ -1610,19 +1980,19 @@ if (minInColumnsCollection > 1) { UInt32Value min = 1; - UInt32Value max = (UInt32)(minInColumnsCollection - 1); + UInt32Value max = (UInt32) (minInColumnsCollection - 1); var styleId = sharedStyles[xlWorksheet.Style].StyleId; for (var co = min; co <= max; co++) { Column column = new Column() - { - Min = co, - Max = co, - Style = styleId, - Width = worksheetColumnWidth, - CustomWidth = true - }; + { + Min = co, + Max = co, + Style = styleId, + Width = worksheetColumnWidth, + CustomWidth = true + }; UpdateColumn(column, columns, sheetColumnsByMin); //, sheetColumnsByMax); } @@ -1650,46 +2020,56 @@ } Column column = new Column() + { + Min = (UInt32) co, + Max = (UInt32) co, + Style = styleId, + Width = columnWidth, + CustomWidth = true + }; + if (isHidden) { - Min = (UInt32)co, - Max = (UInt32)co, - Style = styleId, - Width = columnWidth, - CustomWidth = true - }; - if (isHidden) column.Hidden = true; - if (collapsed) column.Collapsed = true; - if (outlineLevel > 0) column.OutlineLevel = (byte)outlineLevel; + column.Hidden = true; + } + if (collapsed) + { + column.Collapsed = true; + } + if (outlineLevel > 0) + { + column.OutlineLevel = (byte) outlineLevel; + } UpdateColumn(column, columns, sheetColumnsByMin); //, sheetColumnsByMax); } - foreach (var col in columns.Elements().Where(c => c.Min > (UInt32)(maxInColumnsCollection)).OrderBy(c => c.Min.Value)) + foreach (var col in columns.Elements().Where(c => c.Min > (UInt32) (maxInColumnsCollection)).OrderBy(c => c.Min.Value)) { col.Style = sharedStyles[xlWorksheet.Style].StyleId; col.Width = worksheetColumnWidth; col.CustomWidth = true; - if ((Int32)col.Max.Value > maxInColumnsCollection) - maxInColumnsCollection = (Int32)col.Max.Value; + if ((Int32) col.Max.Value > maxInColumnsCollection) + { + maxInColumnsCollection = (Int32) col.Max.Value; + } } if (maxInColumnsCollection < XLWorksheet.MaxNumberOfColumns) { Column column = new Column() - { - Min = (UInt32)(maxInColumnsCollection + 1), - Max = (UInt32)(XLWorksheet.MaxNumberOfColumns), - Style = sharedStyles[xlWorksheet.Style].StyleId, - Width = worksheetColumnWidth, - CustomWidth = true - }; + { + Min = (UInt32) (maxInColumnsCollection + 1), + Max = (UInt32) (XLWorksheet.MaxNumberOfColumns), + Style = sharedStyles[xlWorksheet.Style].StyleId, + Width = worksheetColumnWidth, + CustomWidth = true + }; columns.Append(column); } CollapseColumns(columns, sheetColumnsByMin); } #endregion - #region SheetData SheetData sheetData; if (!worksheetPart.Worksheet.Elements().Any()) @@ -1706,14 +2086,14 @@ { Int32 rowNum = c.Address.RowNumber; if (!cellsByRow.ContainsKey(rowNum)) + { cellsByRow.Add(rowNum, new List()); + } cellsByRow[rowNum].Add(c); } - - - var sheetDataRows = sheetData.Elements().ToDictionary(r => (Int32)r.RowIndex.Value, r => r); + var sheetDataRows = sheetData.Elements().ToDictionary(r => (Int32) r.RowIndex.Value, r => r); foreach (var r in xlWorksheet.Internals.RowsCollection.Deleted) { if (sheetDataRows.ContainsKey(r.Key)) @@ -1734,7 +2114,7 @@ } else { - row = new Row() { RowIndex = (UInt32)distinctRow }; + row = new Row() {RowIndex = (UInt32) distinctRow}; if (noRows) { sheetData.Append(row); @@ -1744,7 +2124,7 @@ { if (sheetDataRows.Any(r => r.Key > row.RowIndex.Value)) { - var minRow = sheetDataRows.Where(r => r.Key > (Int32)row.RowIndex.Value).Min(r=>r.Key); + var minRow = sheetDataRows.Where(r => r.Key > (Int32) row.RowIndex.Value).Min(r => r.Key); Row rowBeforeInsert = sheetDataRows[minRow]; sheetData.InsertBefore(row, rowBeforeInsert); } @@ -1756,14 +2136,16 @@ } if (maxColumn > 0) - row.Spans = new ListValue() { InnerText = "1:" + maxColumn.ToString() }; + { + row.Spans = new ListValue() {InnerText = "1:" + maxColumn.ToString()}; + } row.Height = null; row.CustomHeight = null; row.Hidden = null; row.StyleIndex = null; row.CustomFormat = null; - row.Collapsed = null; + row.Collapsed = null; if ((xlWorksheet as XLWorksheet).Internals.RowsCollection.ContainsKey(distinctRow)) { var thisRow = (xlWorksheet as XLWorksheet).Internals.RowsCollection[distinctRow]; @@ -1777,9 +2159,18 @@ row.StyleIndex = sharedStyles[thisRow.Style].StyleId; row.CustomFormat = true; } - if (thisRow.IsHidden) row.Hidden = true; - if (thisRow.Collapsed) row.Collapsed = true; - if (thisRow.OutlineLevel > 0) row.OutlineLevel = (byte)thisRow.OutlineLevel; + if (thisRow.IsHidden) + { + row.Hidden = true; + } + if (thisRow.Collapsed) + { + row.Collapsed = true; + } + if (thisRow.OutlineLevel > 0) + { + row.OutlineLevel = (byte) thisRow.OutlineLevel; + } } else { @@ -1793,7 +2184,9 @@ foreach (var c in xlWorksheet.Internals.CellsCollection.Deleted) { if (cellsByReference.ContainsKey(c.Key.ToStringRelative())) + { row.RemoveChild(cellsByReference[c.Key.ToStringRelative()]); + } } //List cellsToRemove = new List(); @@ -1805,22 +2198,20 @@ //} //cellsToRemove.ForEach(cell => row.RemoveChild(cell)); - if (cellsByRow.ContainsKey(distinctRow)) { - Boolean isNewRow = !row.Elements().Any(); foreach (var opCell in cellsByRow[distinctRow] - .OrderBy(c => c.Address.ColumnNumber) - .Select(c => (XLCell)c)) + .OrderBy(c => c.Address.ColumnNumber) + .Select(c => (XLCell) c)) { var styleId = sharedStyles[opCell.Style].StyleId; var dataType = opCell.DataType; - var cellReference = ((XLAddress)opCell.Address).GetTrimmedAddress(); + var cellReference = ((XLAddress) opCell.Address).GetTrimmedAddress(); //Boolean isNewCell = false; - + Cell cell; if (cellsByReference.ContainsKey(cellReference)) { @@ -1829,7 +2220,7 @@ else { //isNewCell = true; - cell = new Cell() { CellReference = new StringValue(cellReference) }; + cell = new Cell() {CellReference = new StringValue(cellReference)}; if (isNewRow) { row.Append(cell); @@ -1840,7 +2231,10 @@ Cell cellBeforeInsert = null; Int32 lastCo = Int32.MaxValue; - foreach (var c in row.Elements().Where(c => XLAddress.GetColumnNumberFromAddress1(c.CellReference.Value) > newColumn)) + foreach ( + var c in + row.Elements().Where( + c => XLAddress.GetColumnNumberFromAddress1(c.CellReference.Value) > newColumn)) { var thidCo = XLAddress.GetColumnNumberFromAddress1(c.CellReference.Value); if (lastCo > thidCo) @@ -1850,9 +2244,13 @@ } } if (cellBeforeInsert == null) + { row.Append(cell); + } else + { row.InsertBefore(cell, cellBeforeInsert); + } } } @@ -1878,10 +2276,14 @@ cell.CellFormula = null; if (opCell.DataType == XLCellValues.DateTime) + { cell.DataType = null; + } else + { cell.DataType = GetCellValue(opCell); - + } + CellValue cellValue = new CellValue(); if (dataType == XLCellValues.Text) { @@ -1898,14 +2300,14 @@ } else { - cell.InlineString = new InlineString() { Text = new Text(opCell.GetString()) }; + cell.InlineString = new InlineString() {Text = new Text(opCell.GetString())}; } } } else if (dataType == XLCellValues.TimeSpan) { TimeSpan timeSpan = opCell.GetTimeSpan(); - cellValue.Text = XLCell.baseDate.Add(timeSpan).ToOADate().ToString(CultureInfo.InvariantCulture); + cellValue.Text = XLCell.BaseDate.Add(timeSpan).ToOADate().ToString(CultureInfo.InvariantCulture); cell.CellValue = cellValue; } else if (dataType == XLCellValues.DateTime || dataType == XLCellValues.Number) @@ -1923,7 +2325,6 @@ } } #endregion - #region SheetProtection SheetProtection sheetProtection = null; if (xlWorksheet.Protection.Protected) @@ -1937,10 +2338,12 @@ sheetProtection = worksheetPart.Worksheet.Elements().First(); cm.SetElement(XLWSContentManager.XLWSContents.SheetProtection, sheetProtection); - var protection = (XLSheetProtection)xlWorksheet.Protection; + var protection = (XLSheetProtection) xlWorksheet.Protection; sheetProtection.Sheet = protection.Protected; if (!StringExtensions.IsNullOrWhiteSpace(protection.PasswordHash)) + { sheetProtection.Password = protection.PasswordHash; + } sheetProtection.FormatCells = GetBooleanValue(!protection.FormatCells, true); sheetProtection.FormatColumns = GetBooleanValue(!protection.FormatColumns, true); sheetProtection.FormatRows = GetBooleanValue(!protection.FormatRows, true); @@ -1961,7 +2364,6 @@ cm.SetElement(XLWSContentManager.XLWSContents.SheetProtection, null); } #endregion - #region AutoFilter if (xlWorksheet.AutoFilterRange != null) { @@ -1982,7 +2384,6 @@ cm.SetElement(XLWSContentManager.XLWSContents.AutoFilter, null); } #endregion - #region MergeCells MergeCells mergeCells = null; if ((xlWorksheet as XLWorksheet).Internals.MergedRanges.Any()) @@ -1997,13 +2398,16 @@ cm.SetElement(XLWSContentManager.XLWSContents.MergeCells, mergeCells); mergeCells.RemoveAllChildren(); - foreach (var merged in (xlWorksheet as XLWorksheet).Internals.MergedRanges.Select(m => m.RangeAddress.FirstAddress.ToString() + ":" + m.RangeAddress.LastAddress.ToString())) + foreach ( + var merged in + (xlWorksheet as XLWorksheet).Internals.MergedRanges.Select( + m => m.RangeAddress.FirstAddress.ToString() + ":" + m.RangeAddress.LastAddress.ToString())) { - MergeCell mergeCell = new MergeCell() { Reference = merged }; + MergeCell mergeCell = new MergeCell() {Reference = merged}; mergeCells.Append(mergeCell); } - mergeCells.Count = (UInt32)mergeCells.Count(); + mergeCells.Count = (UInt32) mergeCells.Count(); } else { @@ -2011,10 +2415,9 @@ cm.SetElement(XLWSContentManager.XLWSContents.MergeCells, null); } #endregion - #region DataValidations DataValidations dataValidations = null; - + if (!xlWorksheet.DataValidations.Any()) { worksheetPart.Worksheet.RemoveAllChildren(); @@ -2041,34 +2444,33 @@ } if (sequence.Length > 0) + { sequence = sequence.Substring(0, sequence.Length - 1); + } DataValidation dataValidation = new DataValidation() - { - AllowBlank = dv.IgnoreBlanks, - Formula1 = new Formula1(dv.MinValue), - Formula2 = new Formula2(dv.MaxValue), - Type = dv.AllowedValues.ToOpenXml(), - ShowErrorMessage = dv.ShowErrorMessage, - Prompt = dv.InputMessage, - PromptTitle = dv.InputTitle, - ErrorTitle = dv.ErrorTitle, - Error = dv.ErrorMessage, - ShowDropDown = !dv.InCellDropdown, - ShowInputMessage = dv.ShowInputMessage, - ErrorStyle = dv.ErrorStyle.ToOpenXml(), - Operator = dv.Operator.ToOpenXml(), - SequenceOfReferences = new ListValue() { InnerText = sequence } - }; - + { + AllowBlank = dv.IgnoreBlanks, + Formula1 = new Formula1(dv.MinValue), + Formula2 = new Formula2(dv.MaxValue), + Type = dv.AllowedValues.ToOpenXml(), + ShowErrorMessage = dv.ShowErrorMessage, + Prompt = dv.InputMessage, + PromptTitle = dv.InputTitle, + ErrorTitle = dv.ErrorTitle, + Error = dv.ErrorMessage, + ShowDropDown = !dv.InCellDropdown, + ShowInputMessage = dv.ShowInputMessage, + ErrorStyle = dv.ErrorStyle.ToOpenXml(), + Operator = dv.Operator.ToOpenXml(), + SequenceOfReferences = new ListValue() {InnerText = sequence} + }; + dataValidations.Append(dataValidation); } - dataValidations.Count = (UInt32)xlWorksheet.DataValidations.Count(); + dataValidations.Count = (UInt32) xlWorksheet.DataValidations.Count(); } - - #endregion - #region Hyperlinks Hyperlinks hyperlinks = null; var relToRemove = worksheetPart.HyperlinkRelationships.ToList(); @@ -2095,26 +2497,27 @@ Hyperlink hyperlink; if (hl.IsExternal) { - String rId = relId.GetNext(RelType.Workbook); - hyperlink = new Hyperlink() { Reference = hl.Cell.Address.ToString(), Id = rId }; + String rId = m_relId.GetNext(RelType.Workbook); + hyperlink = new Hyperlink() {Reference = hl.Cell.Address.ToString(), Id = rId}; worksheetPart.AddHyperlinkRelationship(hl.ExternalAddress, true, rId); } else { hyperlink = new Hyperlink() - { - Reference = hl.Cell.Address.ToString(), - Location = hl.InternalAddress, - Display = hl.Cell.GetFormattedString() - }; + { + Reference = hl.Cell.Address.ToString(), + Location = hl.InternalAddress, + Display = hl.Cell.GetFormattedString() + }; } if (!StringExtensions.IsNullOrWhiteSpace(hl.Tooltip)) + { hyperlink.Tooltip = hl.Tooltip; + } hyperlinks.Append(hyperlink); } } #endregion - #region PrintOptions PrintOptions printOptions = null; if (!worksheetPart.Worksheet.Elements().Any()) @@ -2131,7 +2534,6 @@ printOptions.Headings = xlWorksheet.PageSetup.ShowRowAndColumnHeadings; printOptions.GridLines = xlWorksheet.PageSetup.ShowGridlines; #endregion - #region PageMargins if (!worksheetPart.Worksheet.Elements().Any()) { @@ -2148,7 +2550,6 @@ pageMargins.Header = xlWorksheet.PageSetup.Margins.Header; pageMargins.Footer = xlWorksheet.PageSetup.Margins.Footer; #endregion - #region PageSetup if (!worksheetPart.Worksheet.Elements().Any()) { @@ -2160,7 +2561,7 @@ cm.SetElement(XLWSContentManager.XLWSContents.PageSetup, pageSetup); pageSetup.Orientation = xlWorksheet.PageSetup.PageOrientation.ToOpenXml(); - pageSetup.PaperSize = (UInt32)xlWorksheet.PageSetup.PaperSize; + pageSetup.PaperSize = (UInt32) xlWorksheet.PageSetup.PaperSize; pageSetup.BlackAndWhite = xlWorksheet.PageSetup.BlackAndWhite; pageSetup.Draft = xlWorksheet.PageSetup.DraftQuality; pageSetup.PageOrder = xlWorksheet.PageSetup.PageOrder.ToOpenXml(); @@ -2169,7 +2570,7 @@ if (xlWorksheet.PageSetup.FirstPageNumber > 0) { - pageSetup.FirstPageNumber = (UInt32)xlWorksheet.PageSetup.FirstPageNumber; + pageSetup.FirstPageNumber = (UInt32) xlWorksheet.PageSetup.FirstPageNumber; pageSetup.UseFirstPageNumber = true; } else @@ -2179,18 +2580,26 @@ } if (xlWorksheet.PageSetup.HorizontalDpi > 0) - pageSetup.HorizontalDpi = (UInt32)xlWorksheet.PageSetup.HorizontalDpi; + { + pageSetup.HorizontalDpi = (UInt32) xlWorksheet.PageSetup.HorizontalDpi; + } else + { pageSetup.HorizontalDpi = null; + } if (xlWorksheet.PageSetup.VerticalDpi > 0) - pageSetup.VerticalDpi = (UInt32)xlWorksheet.PageSetup.VerticalDpi; + { + pageSetup.VerticalDpi = (UInt32) xlWorksheet.PageSetup.VerticalDpi; + } else + { pageSetup.VerticalDpi = null; + } if (xlWorksheet.PageSetup.Scale > 0) { - pageSetup.Scale = (UInt32)xlWorksheet.PageSetup.Scale; + pageSetup.Scale = (UInt32) xlWorksheet.PageSetup.Scale; pageSetup.FitToWidth = null; pageSetup.FitToHeight = null; } @@ -2199,17 +2608,24 @@ pageSetup.Scale = null; if (xlWorksheet.PageSetup.PagesWide > 0) - pageSetup.FitToWidth = (UInt32)xlWorksheet.PageSetup.PagesWide; + { + pageSetup.FitToWidth = (UInt32) xlWorksheet.PageSetup.PagesWide; + } else + { pageSetup.FitToWidth = 0; + } if (xlWorksheet.PageSetup.PagesTall > 0) - pageSetup.FitToHeight = (UInt32)xlWorksheet.PageSetup.PagesTall; + { + pageSetup.FitToHeight = (UInt32) xlWorksheet.PageSetup.PagesTall; + } else + { pageSetup.FitToHeight = 0; + } } #endregion - #region HeaderFooter if (!worksheetPart.Worksheet.Elements().Any()) { @@ -2244,7 +2660,6 @@ //if (!headerFooter.Any(hf => hf.InnerText.Length > 0)) // worksheetPart.Worksheet.RemoveAllChildren(); #endregion - #region RowBreaks if (!worksheetPart.Worksheet.Elements().Any()) { @@ -2253,15 +2668,16 @@ } RowBreaks rowBreaks = worksheetPart.Worksheet.Elements().First(); - + var rowBreakCount = xlWorksheet.PageSetup.RowBreaks.Count; if (rowBreakCount > 0) { - rowBreaks.Count = (UInt32)rowBreakCount; - rowBreaks.ManualBreakCount = (UInt32)rowBreakCount; + rowBreaks.Count = (UInt32) rowBreakCount; + rowBreaks.ManualBreakCount = (UInt32) rowBreakCount; foreach (var rb in xlWorksheet.PageSetup.RowBreaks) { - Break break1 = new Break() { Id = (UInt32)rb, Max = (UInt32)xlWorksheet.RangeAddress.LastAddress.RowNumber, ManualPageBreak = true }; + Break break1 = new Break() + {Id = (UInt32) rb, Max = (UInt32) xlWorksheet.RangeAddress.LastAddress.RowNumber, ManualPageBreak = true}; rowBreaks.Append(break1); } cm.SetElement(XLWSContentManager.XLWSContents.RowBreaks, rowBreaks); @@ -2272,9 +2688,7 @@ cm.SetElement(XLWSContentManager.XLWSContents.RowBreaks, null); } #endregion - #region ColumnBreaks - if (!worksheetPart.Worksheet.Elements().Any()) { OpenXmlElement previousElement = cm.GetPreviousElementFor(XLWSContentManager.XLWSContents.ColumnBreaks); @@ -2286,11 +2700,12 @@ var columnBreakCount = xlWorksheet.PageSetup.ColumnBreaks.Count; if (columnBreakCount > 0) { - columnBreaks.Count = (UInt32)columnBreakCount; - columnBreaks.ManualBreakCount = (UInt32)columnBreakCount; + columnBreaks.Count = (UInt32) columnBreakCount; + columnBreaks.ManualBreakCount = (UInt32) columnBreakCount; foreach (var cb in xlWorksheet.PageSetup.ColumnBreaks) { - Break break1 = new Break() { Id = (UInt32)cb, Max = (UInt32)xlWorksheet.RangeAddress.LastAddress.ColumnNumber, ManualPageBreak = true }; + Break break1 = new Break() + {Id = (UInt32) cb, Max = (UInt32) xlWorksheet.RangeAddress.LastAddress.ColumnNumber, ManualPageBreak = true}; columnBreaks.Append(break1); } cm.SetElement(XLWSContentManager.XLWSContents.ColumnBreaks, columnBreaks); @@ -2301,7 +2716,6 @@ cm.SetElement(XLWSContentManager.XLWSContents.ColumnBreaks, null); } #endregion - #region Drawings //worksheetPart.Worksheet.RemoveAllChildren(); //{ @@ -2312,7 +2726,6 @@ //Drawing drawing = worksheetPart.Worksheet.Elements().First(); //cm.SetElement(XLWSContentManager.XLWSContents.Drawing, drawing); #endregion - #region Tables worksheetPart.Worksheet.RemoveAllChildren(); { @@ -2323,23 +2736,26 @@ TableParts tableParts = worksheetPart.Worksheet.Elements().First(); cm.SetElement(XLWSContentManager.XLWSContents.TableParts, tableParts); - tableParts.Count = (UInt32)xlWorksheet.Tables.Count(); + tableParts.Count = (UInt32) xlWorksheet.Tables.Count(); foreach (var table in xlWorksheet.Tables) { - var xlTable = (XLTable)table; - TablePart tablePart = new TablePart() { Id = xlTable.RelId }; + var xlTable = (XLTable) table; + TablePart tablePart = new TablePart() {Id = xlTable.RelId}; tableParts.Append(tablePart); } - #endregion } private BooleanValue GetBooleanValue(bool value, bool defaultValue) { if (value == defaultValue) + { return null; + } else + { return new BooleanValue(value); + } } private void CollapseColumns(Columns columns, Dictionary sheetColumns) @@ -2355,7 +2771,7 @@ } else { - var newColumn = (Column)kp.Value.CloneNode(true); + var newColumn = (Column) kp.Value.CloneNode(true); newColumn.Min = lastMin; var columnsToRemove = new List(); foreach (var c in columns.Elements().Where(co => co.Min >= newColumn.Min && co.Max <= newColumn.Max).Select(co => co)) @@ -2365,22 +2781,26 @@ columnsToRemove.ForEach(c => columns.RemoveChild(c)); columns.Append(newColumn); - + lastMin = kp.Key + 1; } - } } private Double GetColumnWidth(Double columnWidth) { if (columnWidth > 0) + { return columnWidth + COLUMN_WIDTH_OFFSET; + } else + { return columnWidth; + } } - private void UpdateColumn(Column column, Columns columns, Dictionary sheetColumnsByMin)//, Dictionary sheetColumnsByMax) + private void UpdateColumn(Column column, Columns columns, Dictionary sheetColumnsByMin) + //, Dictionary sheetColumnsByMax) { UInt32 co = column.Min.Value; Column newColumn; @@ -2403,7 +2823,7 @@ //} //else //{ - newColumn = (Column)column.CloneNode(true); + newColumn = (Column) column.CloneNode(true); columns.Append(newColumn); sheetColumnsByMin.Add(co, newColumn); // sheetColumnsByMax.Add(co, newColumn); @@ -2412,7 +2832,7 @@ else { existingColumn = sheetColumnsByMin[column.Min.Value]; - newColumn = (Column)existingColumn.CloneNode(true); + newColumn = (Column) existingColumn.CloneNode(true); //newColumn = new Column() { InnerXml = existingColumn.InnerXml }; newColumn.Min = column.Min; newColumn.Max = column.Max; @@ -2421,19 +2841,31 @@ newColumn.CustomWidth = column.CustomWidth; if (column.Hidden != null) + { newColumn.Hidden = true; + } else + { newColumn.Hidden = null; + } if (column.Collapsed != null) + { newColumn.Collapsed = true; + } else + { newColumn.Collapsed = null; + } if (column.OutlineLevel != null && column.OutlineLevel > 0) - newColumn.OutlineLevel = (byte)column.OutlineLevel; + { + newColumn.OutlineLevel = (byte) column.OutlineLevel; + } else + { newColumn.OutlineLevel = null; + } sheetColumnsByMin.Remove(column.Min.Value); if (existingColumn.Min + 1 > existingColumn.Max) @@ -2454,33 +2886,35 @@ sheetColumnsByMin.Add(existingColumn.Min.Value, existingColumn); } } - } private bool ColumnsAreEqual(Column column, Column column_2) { return - column.Style.Value == column_2.Style.Value - && column.Width.Value == column_2.Width.Value - && ((column.Hidden == null && column_2.Hidden == null) - || (column.Hidden != null && column_2.Hidden != null && column.Hidden.Value == column_2.Hidden.Value)) - && ((column.Collapsed == null && column_2.Collapsed == null) - || (column.Collapsed != null && column_2.Collapsed != null && column.Collapsed.Value == column_2.Collapsed.Value)) - && ((column.OutlineLevel == null && column_2.OutlineLevel == null) - || (column.OutlineLevel != null && column_2.OutlineLevel != null && column.OutlineLevel.Value == column_2.OutlineLevel.Value)); + column.Style.Value == column_2.Style.Value + && column.Width.Value == column_2.Width.Value + && ((column.Hidden == null && column_2.Hidden == null) + || (column.Hidden != null && column_2.Hidden != null && column.Hidden.Value == column_2.Hidden.Value)) + && ((column.Collapsed == null && column_2.Collapsed == null) + || (column.Collapsed != null && column_2.Collapsed != null && column.Collapsed.Value == column_2.Collapsed.Value)) + && ((column.OutlineLevel == null && column_2.OutlineLevel == null) + || (column.OutlineLevel != null && column_2.OutlineLevel != null && column.OutlineLevel.Value == column_2.OutlineLevel.Value)); } #endregion - private void GenerateCalculationChainPartContent(WorkbookPart workbookPart) { - var thisRelId = relId.GetNext(RelType.Workbook); + var thisRelId = m_relId.GetNext(RelType.Workbook); if (workbookPart.CalculationChainPart == null) + { workbookPart.AddNewPart(thisRelId); + } if (workbookPart.CalculationChainPart.CalculationChain == null) + { workbookPart.CalculationChainPart.CalculationChain = new CalculationChain(); + } - CalculationChain calculationChain = workbookPart.CalculationChainPart.CalculationChain; + CalculationChain calculationChain = workbookPart.CalculationChainPart.CalculationChain; calculationChain.RemoveAllChildren(); //var calculationCells = new Dictionary>(); //foreach(var calculationCell in calculationChain.Elements().Where(cc => cc.CellReference != null)) @@ -2491,8 +2925,8 @@ // calculationCell. // calculationCells[cellReference].Add(calculationCell); //} - - foreach (var worksheet in Worksheets.Cast()) + + foreach (var worksheet in WorksheetsInternal.Cast()) { var cellsWithoutFormulas = new HashSet(); foreach (var c in worksheet.Internals.CellsCollection.Values) @@ -2508,15 +2942,15 @@ //calculationCells.ForEach(cc => calculationChain.RemoveChild(cc)); - if (c.FormulaA1.StartsWith("{")) { - calculationChain.Append(new CalculationCell() { CellReference = c.Address.ToString(), SheetId = worksheet.SheetId, Array = true }); - calculationChain.Append(new CalculationCell() { CellReference = c.Address.ToString(), InChildChain = true }); + calculationChain.Append(new CalculationCell + {CellReference = c.Address.ToString(), SheetId = worksheet.SheetId, Array = true}); + calculationChain.Append(new CalculationCell {CellReference = c.Address.ToString(), InChildChain = true}); } else { - calculationChain.Append(new CalculationCell() { CellReference = c.Address.ToString(), SheetId = worksheet.SheetId }); + calculationChain.Append(new CalculationCell {CellReference = c.Address.ToString(), SheetId = worksheet.SheetId}); } } } @@ -2524,14 +2958,14 @@ //var cCellsToRemove = new List(); var m = from cc in calculationChain.Elements() where !(cc.SheetId != null || cc.InChildChain != null) - && calculationChain.Elements() - .Where(c1 => c1.SheetId != null) - .Select(c1 => c1.CellReference.Value) - .Contains(cc.CellReference.Value) - || cellsWithoutFormulas.Contains(cc.CellReference.Value) + && calculationChain.Elements() + .Where(c1 => c1.SheetId != null) + .Select(c1 => c1.CellReference.Value) + .Contains(cc.CellReference.Value) + || cellsWithoutFormulas.Contains(cc.CellReference.Value) select cc; //m.ToList().ForEach(cc => cCellsToRemove.Add(cc)); - m.ToList().ForEach(cc=>calculationChain.RemoveChild(cc)); + m.ToList().ForEach(cc => calculationChain.RemoveChild(cc)); } if (!calculationChain.Any()) @@ -2542,70 +2976,70 @@ private void GenerateThemePartContent(ThemePart themePart) { - A.Theme theme1 = new A.Theme() { Name = "Office Theme" }; + Theme theme1 = new Theme {Name = "Office Theme"}; theme1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); - A.ThemeElements themeElements1 = new A.ThemeElements(); + ThemeElements themeElements1 = new ThemeElements(); - A.ColorScheme colorScheme1 = new A.ColorScheme() { Name = "Office" }; + ColorScheme colorScheme1 = new ColorScheme {Name = "Office"}; - A.Dark1Color dark1Color1 = new A.Dark1Color(); - A.SystemColor systemColor1 = new A.SystemColor() { Val = A.SystemColorValues.WindowText, LastColor = Theme.Text1.Color.ToHex().Substring(2)}; + Dark1Color dark1Color1 = new Dark1Color(); + SystemColor systemColor1 = new SystemColor {Val = SystemColorValues.WindowText, LastColor = Theme.Text1.Color.ToHex().Substring(2)}; dark1Color1.Append(systemColor1); - A.Light1Color light1Color1 = new A.Light1Color(); - A.SystemColor systemColor2 = new A.SystemColor() { Val = A.SystemColorValues.Window, LastColor = Theme.Background1.Color.ToHex().Substring(2) }; + Light1Color light1Color1 = new Light1Color(); + SystemColor systemColor2 = new SystemColor {Val = SystemColorValues.Window, LastColor = Theme.Background1.Color.ToHex().Substring(2)}; light1Color1.Append(systemColor2); - A.Dark2Color dark2Color1 = new A.Dark2Color(); - A.RgbColorModelHex rgbColorModelHex1 = new A.RgbColorModelHex() { Val = Theme.Text2.Color.ToHex().Substring(2) }; + Dark2Color dark2Color1 = new Dark2Color(); + RgbColorModelHex rgbColorModelHex1 = new RgbColorModelHex {Val = Theme.Text2.Color.ToHex().Substring(2)}; dark2Color1.Append(rgbColorModelHex1); - A.Light2Color light2Color1 = new A.Light2Color(); - A.RgbColorModelHex rgbColorModelHex2 = new A.RgbColorModelHex() { Val = Theme.Background2.Color.ToHex().Substring(2) }; + Light2Color light2Color1 = new Light2Color(); + RgbColorModelHex rgbColorModelHex2 = new RgbColorModelHex {Val = Theme.Background2.Color.ToHex().Substring(2)}; light2Color1.Append(rgbColorModelHex2); - A.Accent1Color accent1Color1 = new A.Accent1Color(); - A.RgbColorModelHex rgbColorModelHex3 = new A.RgbColorModelHex() { Val = Theme.Accent1.Color.ToHex().Substring(2) }; + Accent1Color accent1Color1 = new Accent1Color(); + RgbColorModelHex rgbColorModelHex3 = new RgbColorModelHex {Val = Theme.Accent1.Color.ToHex().Substring(2)}; accent1Color1.Append(rgbColorModelHex3); - A.Accent2Color accent2Color1 = new A.Accent2Color(); - A.RgbColorModelHex rgbColorModelHex4 = new A.RgbColorModelHex() { Val = Theme.Accent2.Color.ToHex().Substring(2) }; + Accent2Color accent2Color1 = new Accent2Color(); + RgbColorModelHex rgbColorModelHex4 = new RgbColorModelHex {Val = Theme.Accent2.Color.ToHex().Substring(2)}; accent2Color1.Append(rgbColorModelHex4); - A.Accent3Color accent3Color1 = new A.Accent3Color(); - A.RgbColorModelHex rgbColorModelHex5 = new A.RgbColorModelHex() { Val = Theme.Accent3.Color.ToHex().Substring(2) }; + Accent3Color accent3Color1 = new Accent3Color(); + RgbColorModelHex rgbColorModelHex5 = new RgbColorModelHex {Val = Theme.Accent3.Color.ToHex().Substring(2)}; accent3Color1.Append(rgbColorModelHex5); - A.Accent4Color accent4Color1 = new A.Accent4Color(); - A.RgbColorModelHex rgbColorModelHex6 = new A.RgbColorModelHex() { Val = Theme.Accent4.Color.ToHex().Substring(2) }; + Accent4Color accent4Color1 = new Accent4Color(); + RgbColorModelHex rgbColorModelHex6 = new RgbColorModelHex {Val = Theme.Accent4.Color.ToHex().Substring(2)}; accent4Color1.Append(rgbColorModelHex6); - A.Accent5Color accent5Color1 = new A.Accent5Color(); - A.RgbColorModelHex rgbColorModelHex7 = new A.RgbColorModelHex() { Val = Theme.Accent5.Color.ToHex().Substring(2) }; + Accent5Color accent5Color1 = new Accent5Color(); + RgbColorModelHex rgbColorModelHex7 = new RgbColorModelHex {Val = Theme.Accent5.Color.ToHex().Substring(2)}; accent5Color1.Append(rgbColorModelHex7); - A.Accent6Color accent6Color1 = new A.Accent6Color(); - A.RgbColorModelHex rgbColorModelHex8 = new A.RgbColorModelHex() { Val = Theme.Accent6.Color.ToHex().Substring(2) }; + Accent6Color accent6Color1 = new Accent6Color(); + RgbColorModelHex rgbColorModelHex8 = new RgbColorModelHex {Val = Theme.Accent6.Color.ToHex().Substring(2)}; accent6Color1.Append(rgbColorModelHex8); - A.Hyperlink hyperlink1 = new A.Hyperlink(); - A.RgbColorModelHex rgbColorModelHex9 = new A.RgbColorModelHex() { Val = Theme.Hyperlink.Color.ToHex().Substring(2) }; + DocumentFormat.OpenXml.Drawing.Hyperlink hyperlink1 = new DocumentFormat.OpenXml.Drawing.Hyperlink(); + RgbColorModelHex rgbColorModelHex9 = new RgbColorModelHex {Val = Theme.Hyperlink.Color.ToHex().Substring(2)}; hyperlink1.Append(rgbColorModelHex9); - A.FollowedHyperlinkColor followedHyperlinkColor1 = new A.FollowedHyperlinkColor(); - A.RgbColorModelHex rgbColorModelHex10 = new A.RgbColorModelHex() { Val = Theme.FollowedHyperlink.Color.ToHex().Substring(2) }; + FollowedHyperlinkColor followedHyperlinkColor1 = new FollowedHyperlinkColor(); + RgbColorModelHex rgbColorModelHex10 = new RgbColorModelHex {Val = Theme.FollowedHyperlink.Color.ToHex().Substring(2)}; followedHyperlinkColor1.Append(rgbColorModelHex10); @@ -2622,41 +3056,41 @@ colorScheme1.Append(hyperlink1); colorScheme1.Append(followedHyperlinkColor1); - A.FontScheme fontScheme2 = new A.FontScheme() { Name = "Office" }; + FontScheme fontScheme2 = new FontScheme {Name = "Office"}; - A.MajorFont majorFont1 = new A.MajorFont(); - A.LatinFont latinFont1 = new A.LatinFont() { Typeface = "Cambria" }; - A.EastAsianFont eastAsianFont1 = new A.EastAsianFont() { Typeface = "" }; - A.ComplexScriptFont complexScriptFont1 = new A.ComplexScriptFont() { Typeface = "" }; - A.SupplementalFont supplementalFont1 = new A.SupplementalFont() { Script = "Jpan", Typeface = "MS Pゴシック" }; - A.SupplementalFont supplementalFont2 = new A.SupplementalFont() { Script = "Hang", Typeface = "맑은 고딕" }; - A.SupplementalFont supplementalFont3 = new A.SupplementalFont() { Script = "Hans", Typeface = "宋体" }; - A.SupplementalFont supplementalFont4 = new A.SupplementalFont() { Script = "Hant", Typeface = "新細明體" }; - A.SupplementalFont supplementalFont5 = new A.SupplementalFont() { Script = "Arab", Typeface = "Times New Roman" }; - A.SupplementalFont supplementalFont6 = new A.SupplementalFont() { Script = "Hebr", Typeface = "Times New Roman" }; - A.SupplementalFont supplementalFont7 = new A.SupplementalFont() { Script = "Thai", Typeface = "Tahoma" }; - A.SupplementalFont supplementalFont8 = new A.SupplementalFont() { Script = "Ethi", Typeface = "Nyala" }; - A.SupplementalFont supplementalFont9 = new A.SupplementalFont() { Script = "Beng", Typeface = "Vrinda" }; - A.SupplementalFont supplementalFont10 = new A.SupplementalFont() { Script = "Gujr", Typeface = "Shruti" }; - A.SupplementalFont supplementalFont11 = new A.SupplementalFont() { Script = "Khmr", Typeface = "MoolBoran" }; - A.SupplementalFont supplementalFont12 = new A.SupplementalFont() { Script = "Knda", Typeface = "Tunga" }; - A.SupplementalFont supplementalFont13 = new A.SupplementalFont() { Script = "Guru", Typeface = "Raavi" }; - A.SupplementalFont supplementalFont14 = new A.SupplementalFont() { Script = "Cans", Typeface = "Euphemia" }; - A.SupplementalFont supplementalFont15 = new A.SupplementalFont() { Script = "Cher", Typeface = "Plantagenet Cherokee" }; - A.SupplementalFont supplementalFont16 = new A.SupplementalFont() { Script = "Yiii", Typeface = "Microsoft Yi Baiti" }; - A.SupplementalFont supplementalFont17 = new A.SupplementalFont() { Script = "Tibt", Typeface = "Microsoft Himalaya" }; - A.SupplementalFont supplementalFont18 = new A.SupplementalFont() { Script = "Thaa", Typeface = "MV Boli" }; - A.SupplementalFont supplementalFont19 = new A.SupplementalFont() { Script = "Deva", Typeface = "Mangal" }; - A.SupplementalFont supplementalFont20 = new A.SupplementalFont() { Script = "Telu", Typeface = "Gautami" }; - A.SupplementalFont supplementalFont21 = new A.SupplementalFont() { Script = "Taml", Typeface = "Latha" }; - A.SupplementalFont supplementalFont22 = new A.SupplementalFont() { Script = "Syrc", Typeface = "Estrangelo Edessa" }; - A.SupplementalFont supplementalFont23 = new A.SupplementalFont() { Script = "Orya", Typeface = "Kalinga" }; - A.SupplementalFont supplementalFont24 = new A.SupplementalFont() { Script = "Mlym", Typeface = "Kartika" }; - A.SupplementalFont supplementalFont25 = new A.SupplementalFont() { Script = "Laoo", Typeface = "DokChampa" }; - A.SupplementalFont supplementalFont26 = new A.SupplementalFont() { Script = "Sinh", Typeface = "Iskoola Pota" }; - A.SupplementalFont supplementalFont27 = new A.SupplementalFont() { Script = "Mong", Typeface = "Mongolian Baiti" }; - A.SupplementalFont supplementalFont28 = new A.SupplementalFont() { Script = "Viet", Typeface = "Times New Roman" }; - A.SupplementalFont supplementalFont29 = new A.SupplementalFont() { Script = "Uigh", Typeface = "Microsoft Uighur" }; + MajorFont majorFont1 = new MajorFont(); + LatinFont latinFont1 = new LatinFont {Typeface = "Cambria"}; + EastAsianFont eastAsianFont1 = new EastAsianFont {Typeface = ""}; + ComplexScriptFont complexScriptFont1 = new ComplexScriptFont {Typeface = ""}; + SupplementalFont supplementalFont1 = new SupplementalFont {Script = "Jpan", Typeface = "MS Pゴシック"}; + SupplementalFont supplementalFont2 = new SupplementalFont {Script = "Hang", Typeface = "맑은 고딕"}; + SupplementalFont supplementalFont3 = new SupplementalFont {Script = "Hans", Typeface = "宋体"}; + SupplementalFont supplementalFont4 = new SupplementalFont {Script = "Hant", Typeface = "新細明體"}; + SupplementalFont supplementalFont5 = new SupplementalFont {Script = "Arab", Typeface = "Times New Roman"}; + SupplementalFont supplementalFont6 = new SupplementalFont {Script = "Hebr", Typeface = "Times New Roman"}; + SupplementalFont supplementalFont7 = new SupplementalFont {Script = "Thai", Typeface = "Tahoma"}; + SupplementalFont supplementalFont8 = new SupplementalFont {Script = "Ethi", Typeface = "Nyala"}; + SupplementalFont supplementalFont9 = new SupplementalFont {Script = "Beng", Typeface = "Vrinda"}; + SupplementalFont supplementalFont10 = new SupplementalFont {Script = "Gujr", Typeface = "Shruti"}; + SupplementalFont supplementalFont11 = new SupplementalFont {Script = "Khmr", Typeface = "MoolBoran"}; + SupplementalFont supplementalFont12 = new SupplementalFont {Script = "Knda", Typeface = "Tunga"}; + SupplementalFont supplementalFont13 = new SupplementalFont {Script = "Guru", Typeface = "Raavi"}; + SupplementalFont supplementalFont14 = new SupplementalFont {Script = "Cans", Typeface = "Euphemia"}; + SupplementalFont supplementalFont15 = new SupplementalFont {Script = "Cher", Typeface = "Plantagenet Cherokee"}; + SupplementalFont supplementalFont16 = new SupplementalFont {Script = "Yiii", Typeface = "Microsoft Yi Baiti"}; + SupplementalFont supplementalFont17 = new SupplementalFont {Script = "Tibt", Typeface = "Microsoft Himalaya"}; + SupplementalFont supplementalFont18 = new SupplementalFont {Script = "Thaa", Typeface = "MV Boli"}; + SupplementalFont supplementalFont19 = new SupplementalFont {Script = "Deva", Typeface = "Mangal"}; + SupplementalFont supplementalFont20 = new SupplementalFont {Script = "Telu", Typeface = "Gautami"}; + SupplementalFont supplementalFont21 = new SupplementalFont {Script = "Taml", Typeface = "Latha"}; + SupplementalFont supplementalFont22 = new SupplementalFont {Script = "Syrc", Typeface = "Estrangelo Edessa"}; + SupplementalFont supplementalFont23 = new SupplementalFont {Script = "Orya", Typeface = "Kalinga"}; + SupplementalFont supplementalFont24 = new SupplementalFont {Script = "Mlym", Typeface = "Kartika"}; + SupplementalFont supplementalFont25 = new SupplementalFont {Script = "Laoo", Typeface = "DokChampa"}; + SupplementalFont supplementalFont26 = new SupplementalFont {Script = "Sinh", Typeface = "Iskoola Pota"}; + SupplementalFont supplementalFont27 = new SupplementalFont {Script = "Mong", Typeface = "Mongolian Baiti"}; + SupplementalFont supplementalFont28 = new SupplementalFont {Script = "Viet", Typeface = "Times New Roman"}; + SupplementalFont supplementalFont29 = new SupplementalFont {Script = "Uigh", Typeface = "Microsoft Uighur"}; majorFont1.Append(latinFont1); majorFont1.Append(eastAsianFont1); @@ -2691,39 +3125,39 @@ majorFont1.Append(supplementalFont28); majorFont1.Append(supplementalFont29); - A.MinorFont minorFont1 = new A.MinorFont(); - A.LatinFont latinFont2 = new A.LatinFont() { Typeface = "Calibri" }; - A.EastAsianFont eastAsianFont2 = new A.EastAsianFont() { Typeface = "" }; - A.ComplexScriptFont complexScriptFont2 = new A.ComplexScriptFont() { Typeface = "" }; - A.SupplementalFont supplementalFont30 = new A.SupplementalFont() { Script = "Jpan", Typeface = "MS Pゴシック" }; - A.SupplementalFont supplementalFont31 = new A.SupplementalFont() { Script = "Hang", Typeface = "맑은 고딕" }; - A.SupplementalFont supplementalFont32 = new A.SupplementalFont() { Script = "Hans", Typeface = "宋体" }; - A.SupplementalFont supplementalFont33 = new A.SupplementalFont() { Script = "Hant", Typeface = "新細明體" }; - A.SupplementalFont supplementalFont34 = new A.SupplementalFont() { Script = "Arab", Typeface = "Arial" }; - A.SupplementalFont supplementalFont35 = new A.SupplementalFont() { Script = "Hebr", Typeface = "Arial" }; - A.SupplementalFont supplementalFont36 = new A.SupplementalFont() { Script = "Thai", Typeface = "Tahoma" }; - A.SupplementalFont supplementalFont37 = new A.SupplementalFont() { Script = "Ethi", Typeface = "Nyala" }; - A.SupplementalFont supplementalFont38 = new A.SupplementalFont() { Script = "Beng", Typeface = "Vrinda" }; - A.SupplementalFont supplementalFont39 = new A.SupplementalFont() { Script = "Gujr", Typeface = "Shruti" }; - A.SupplementalFont supplementalFont40 = new A.SupplementalFont() { Script = "Khmr", Typeface = "DaunPenh" }; - A.SupplementalFont supplementalFont41 = new A.SupplementalFont() { Script = "Knda", Typeface = "Tunga" }; - A.SupplementalFont supplementalFont42 = new A.SupplementalFont() { Script = "Guru", Typeface = "Raavi" }; - A.SupplementalFont supplementalFont43 = new A.SupplementalFont() { Script = "Cans", Typeface = "Euphemia" }; - A.SupplementalFont supplementalFont44 = new A.SupplementalFont() { Script = "Cher", Typeface = "Plantagenet Cherokee" }; - A.SupplementalFont supplementalFont45 = new A.SupplementalFont() { Script = "Yiii", Typeface = "Microsoft Yi Baiti" }; - A.SupplementalFont supplementalFont46 = new A.SupplementalFont() { Script = "Tibt", Typeface = "Microsoft Himalaya" }; - A.SupplementalFont supplementalFont47 = new A.SupplementalFont() { Script = "Thaa", Typeface = "MV Boli" }; - A.SupplementalFont supplementalFont48 = new A.SupplementalFont() { Script = "Deva", Typeface = "Mangal" }; - A.SupplementalFont supplementalFont49 = new A.SupplementalFont() { Script = "Telu", Typeface = "Gautami" }; - A.SupplementalFont supplementalFont50 = new A.SupplementalFont() { Script = "Taml", Typeface = "Latha" }; - A.SupplementalFont supplementalFont51 = new A.SupplementalFont() { Script = "Syrc", Typeface = "Estrangelo Edessa" }; - A.SupplementalFont supplementalFont52 = new A.SupplementalFont() { Script = "Orya", Typeface = "Kalinga" }; - A.SupplementalFont supplementalFont53 = new A.SupplementalFont() { Script = "Mlym", Typeface = "Kartika" }; - A.SupplementalFont supplementalFont54 = new A.SupplementalFont() { Script = "Laoo", Typeface = "DokChampa" }; - A.SupplementalFont supplementalFont55 = new A.SupplementalFont() { Script = "Sinh", Typeface = "Iskoola Pota" }; - A.SupplementalFont supplementalFont56 = new A.SupplementalFont() { Script = "Mong", Typeface = "Mongolian Baiti" }; - A.SupplementalFont supplementalFont57 = new A.SupplementalFont() { Script = "Viet", Typeface = "Arial" }; - A.SupplementalFont supplementalFont58 = new A.SupplementalFont() { Script = "Uigh", Typeface = "Microsoft Uighur" }; + MinorFont minorFont1 = new MinorFont(); + LatinFont latinFont2 = new LatinFont {Typeface = "Calibri"}; + EastAsianFont eastAsianFont2 = new EastAsianFont {Typeface = ""}; + ComplexScriptFont complexScriptFont2 = new ComplexScriptFont {Typeface = ""}; + SupplementalFont supplementalFont30 = new SupplementalFont {Script = "Jpan", Typeface = "MS Pゴシック"}; + SupplementalFont supplementalFont31 = new SupplementalFont {Script = "Hang", Typeface = "맑은 고딕"}; + SupplementalFont supplementalFont32 = new SupplementalFont {Script = "Hans", Typeface = "宋体"}; + SupplementalFont supplementalFont33 = new SupplementalFont {Script = "Hant", Typeface = "新細明體"}; + SupplementalFont supplementalFont34 = new SupplementalFont {Script = "Arab", Typeface = "Arial"}; + SupplementalFont supplementalFont35 = new SupplementalFont {Script = "Hebr", Typeface = "Arial"}; + SupplementalFont supplementalFont36 = new SupplementalFont {Script = "Thai", Typeface = "Tahoma"}; + SupplementalFont supplementalFont37 = new SupplementalFont {Script = "Ethi", Typeface = "Nyala"}; + SupplementalFont supplementalFont38 = new SupplementalFont {Script = "Beng", Typeface = "Vrinda"}; + SupplementalFont supplementalFont39 = new SupplementalFont {Script = "Gujr", Typeface = "Shruti"}; + SupplementalFont supplementalFont40 = new SupplementalFont {Script = "Khmr", Typeface = "DaunPenh"}; + SupplementalFont supplementalFont41 = new SupplementalFont {Script = "Knda", Typeface = "Tunga"}; + SupplementalFont supplementalFont42 = new SupplementalFont {Script = "Guru", Typeface = "Raavi"}; + SupplementalFont supplementalFont43 = new SupplementalFont {Script = "Cans", Typeface = "Euphemia"}; + SupplementalFont supplementalFont44 = new SupplementalFont {Script = "Cher", Typeface = "Plantagenet Cherokee"}; + SupplementalFont supplementalFont45 = new SupplementalFont {Script = "Yiii", Typeface = "Microsoft Yi Baiti"}; + SupplementalFont supplementalFont46 = new SupplementalFont {Script = "Tibt", Typeface = "Microsoft Himalaya"}; + SupplementalFont supplementalFont47 = new SupplementalFont {Script = "Thaa", Typeface = "MV Boli"}; + SupplementalFont supplementalFont48 = new SupplementalFont {Script = "Deva", Typeface = "Mangal"}; + SupplementalFont supplementalFont49 = new SupplementalFont {Script = "Telu", Typeface = "Gautami"}; + SupplementalFont supplementalFont50 = new SupplementalFont {Script = "Taml", Typeface = "Latha"}; + SupplementalFont supplementalFont51 = new SupplementalFont {Script = "Syrc", Typeface = "Estrangelo Edessa"}; + SupplementalFont supplementalFont52 = new SupplementalFont {Script = "Orya", Typeface = "Kalinga"}; + SupplementalFont supplementalFont53 = new SupplementalFont {Script = "Mlym", Typeface = "Kartika"}; + SupplementalFont supplementalFont54 = new SupplementalFont {Script = "Laoo", Typeface = "DokChampa"}; + SupplementalFont supplementalFont55 = new SupplementalFont {Script = "Sinh", Typeface = "Iskoola Pota"}; + SupplementalFont supplementalFont56 = new SupplementalFont {Script = "Mong", Typeface = "Mongolian Baiti"}; + SupplementalFont supplementalFont57 = new SupplementalFont {Script = "Viet", Typeface = "Arial"}; + SupplementalFont supplementalFont58 = new SupplementalFont {Script = "Uigh", Typeface = "Microsoft Uighur"}; minorFont1.Append(latinFont2); minorFont1.Append(eastAsianFont2); @@ -2761,46 +3195,46 @@ fontScheme2.Append(majorFont1); fontScheme2.Append(minorFont1); - A.FormatScheme formatScheme1 = new A.FormatScheme() { Name = "Office" }; + FormatScheme formatScheme1 = new FormatScheme {Name = "Office"}; - A.FillStyleList fillStyleList1 = new A.FillStyleList(); + FillStyleList fillStyleList1 = new FillStyleList(); - A.SolidFill solidFill1 = new A.SolidFill(); - A.SchemeColor schemeColor1 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; + SolidFill solidFill1 = new SolidFill(); + SchemeColor schemeColor1 = new SchemeColor {Val = SchemeColorValues.PhColor}; solidFill1.Append(schemeColor1); - A.GradientFill gradientFill1 = new A.GradientFill() { RotateWithShape = true }; + GradientFill gradientFill1 = new GradientFill {RotateWithShape = true}; - A.GradientStopList gradientStopList1 = new A.GradientStopList(); + GradientStopList gradientStopList1 = new GradientStopList(); - A.GradientStop gradientStop1 = new A.GradientStop() { Position = 0 }; + GradientStop gradientStop1 = new GradientStop {Position = 0}; - A.SchemeColor schemeColor2 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint1 = new A.Tint() { Val = 50000 }; - A.SaturationModulation saturationModulation1 = new A.SaturationModulation() { Val = 300000 }; + SchemeColor schemeColor2 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint1 = new Tint {Val = 50000}; + SaturationModulation saturationModulation1 = new SaturationModulation {Val = 300000}; schemeColor2.Append(tint1); schemeColor2.Append(saturationModulation1); gradientStop1.Append(schemeColor2); - A.GradientStop gradientStop2 = new A.GradientStop() { Position = 35000 }; + GradientStop gradientStop2 = new GradientStop {Position = 35000}; - A.SchemeColor schemeColor3 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint2 = new A.Tint() { Val = 37000 }; - A.SaturationModulation saturationModulation2 = new A.SaturationModulation() { Val = 300000 }; + SchemeColor schemeColor3 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint2 = new Tint {Val = 37000}; + SaturationModulation saturationModulation2 = new SaturationModulation {Val = 300000}; schemeColor3.Append(tint2); schemeColor3.Append(saturationModulation2); gradientStop2.Append(schemeColor3); - A.GradientStop gradientStop3 = new A.GradientStop() { Position = 100000 }; + GradientStop gradientStop3 = new GradientStop {Position = 100000}; - A.SchemeColor schemeColor4 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint3 = new A.Tint() { Val = 15000 }; - A.SaturationModulation saturationModulation3 = new A.SaturationModulation() { Val = 350000 }; + SchemeColor schemeColor4 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint3 = new Tint {Val = 15000}; + SaturationModulation saturationModulation3 = new SaturationModulation {Val = 350000}; schemeColor4.Append(tint3); schemeColor4.Append(saturationModulation3); @@ -2810,42 +3244,42 @@ gradientStopList1.Append(gradientStop1); gradientStopList1.Append(gradientStop2); gradientStopList1.Append(gradientStop3); - A.LinearGradientFill linearGradientFill1 = new A.LinearGradientFill() { Angle = 16200000, Scaled = true }; + LinearGradientFill linearGradientFill1 = new LinearGradientFill {Angle = 16200000, Scaled = true}; gradientFill1.Append(gradientStopList1); gradientFill1.Append(linearGradientFill1); - A.GradientFill gradientFill2 = new A.GradientFill() { RotateWithShape = true }; + GradientFill gradientFill2 = new GradientFill {RotateWithShape = true}; - A.GradientStopList gradientStopList2 = new A.GradientStopList(); + GradientStopList gradientStopList2 = new GradientStopList(); - A.GradientStop gradientStop4 = new A.GradientStop() { Position = 0 }; + GradientStop gradientStop4 = new GradientStop {Position = 0}; - A.SchemeColor schemeColor5 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade1 = new A.Shade() { Val = 51000 }; - A.SaturationModulation saturationModulation4 = new A.SaturationModulation() { Val = 130000 }; + SchemeColor schemeColor5 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade1 = new Shade {Val = 51000}; + SaturationModulation saturationModulation4 = new SaturationModulation {Val = 130000}; schemeColor5.Append(shade1); schemeColor5.Append(saturationModulation4); gradientStop4.Append(schemeColor5); - A.GradientStop gradientStop5 = new A.GradientStop() { Position = 80000 }; + GradientStop gradientStop5 = new GradientStop {Position = 80000}; - A.SchemeColor schemeColor6 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade2 = new A.Shade() { Val = 93000 }; - A.SaturationModulation saturationModulation5 = new A.SaturationModulation() { Val = 130000 }; + SchemeColor schemeColor6 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade2 = new Shade {Val = 93000}; + SaturationModulation saturationModulation5 = new SaturationModulation {Val = 130000}; schemeColor6.Append(shade2); schemeColor6.Append(saturationModulation5); gradientStop5.Append(schemeColor6); - A.GradientStop gradientStop6 = new A.GradientStop() { Position = 100000 }; + GradientStop gradientStop6 = new GradientStop {Position = 100000}; - A.SchemeColor schemeColor7 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade3 = new A.Shade() { Val = 94000 }; - A.SaturationModulation saturationModulation6 = new A.SaturationModulation() { Val = 135000 }; + SchemeColor schemeColor7 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade3 = new Shade {Val = 94000}; + SaturationModulation saturationModulation6 = new SaturationModulation {Val = 135000}; schemeColor7.Append(shade3); schemeColor7.Append(saturationModulation6); @@ -2855,7 +3289,7 @@ gradientStopList2.Append(gradientStop4); gradientStopList2.Append(gradientStop5); gradientStopList2.Append(gradientStop6); - A.LinearGradientFill linearGradientFill2 = new A.LinearGradientFill() { Angle = 16200000, Scaled = false }; + LinearGradientFill linearGradientFill2 = new LinearGradientFill {Angle = 16200000, Scaled = false}; gradientFill2.Append(gradientStopList2); gradientFill2.Append(linearGradientFill2); @@ -2864,43 +3298,61 @@ fillStyleList1.Append(gradientFill1); fillStyleList1.Append(gradientFill2); - A.LineStyleList lineStyleList1 = new A.LineStyleList(); + LineStyleList lineStyleList1 = new LineStyleList(); - A.Outline outline1 = new A.Outline() { Width = 9525, CapType = A.LineCapValues.Flat, CompoundLineType = A.CompoundLineValues.Single, Alignment = A.PenAlignmentValues.Center }; + Outline outline1 = new Outline + { + Width = 9525, + CapType = LineCapValues.Flat, + CompoundLineType = CompoundLineValues.Single, + Alignment = PenAlignmentValues.Center + }; - A.SolidFill solidFill2 = new A.SolidFill(); + SolidFill solidFill2 = new SolidFill(); - A.SchemeColor schemeColor8 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade4 = new A.Shade() { Val = 95000 }; - A.SaturationModulation saturationModulation7 = new A.SaturationModulation() { Val = 105000 }; + SchemeColor schemeColor8 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade4 = new Shade {Val = 95000}; + SaturationModulation saturationModulation7 = new SaturationModulation {Val = 105000}; schemeColor8.Append(shade4); schemeColor8.Append(saturationModulation7); solidFill2.Append(schemeColor8); - A.PresetDash presetDash1 = new A.PresetDash() { Val = A.PresetLineDashValues.Solid }; + PresetDash presetDash1 = new PresetDash {Val = PresetLineDashValues.Solid}; outline1.Append(solidFill2); outline1.Append(presetDash1); - A.Outline outline2 = new A.Outline() { Width = 25400, CapType = A.LineCapValues.Flat, CompoundLineType = A.CompoundLineValues.Single, Alignment = A.PenAlignmentValues.Center }; + Outline outline2 = new Outline + { + Width = 25400, + CapType = LineCapValues.Flat, + CompoundLineType = CompoundLineValues.Single, + Alignment = PenAlignmentValues.Center + }; - A.SolidFill solidFill3 = new A.SolidFill(); - A.SchemeColor schemeColor9 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; + SolidFill solidFill3 = new SolidFill(); + SchemeColor schemeColor9 = new SchemeColor {Val = SchemeColorValues.PhColor}; solidFill3.Append(schemeColor9); - A.PresetDash presetDash2 = new A.PresetDash() { Val = A.PresetLineDashValues.Solid }; + PresetDash presetDash2 = new PresetDash {Val = PresetLineDashValues.Solid}; outline2.Append(solidFill3); outline2.Append(presetDash2); - A.Outline outline3 = new A.Outline() { Width = 38100, CapType = A.LineCapValues.Flat, CompoundLineType = A.CompoundLineValues.Single, Alignment = A.PenAlignmentValues.Center }; + Outline outline3 = new Outline + { + Width = 38100, + CapType = LineCapValues.Flat, + CompoundLineType = CompoundLineValues.Single, + Alignment = PenAlignmentValues.Center + }; - A.SolidFill solidFill4 = new A.SolidFill(); - A.SchemeColor schemeColor10 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; + SolidFill solidFill4 = new SolidFill(); + SchemeColor schemeColor10 = new SchemeColor {Val = SchemeColorValues.PhColor}; solidFill4.Append(schemeColor10); - A.PresetDash presetDash3 = new A.PresetDash() { Val = A.PresetLineDashValues.Solid }; + PresetDash presetDash3 = new PresetDash {Val = PresetLineDashValues.Solid}; outline3.Append(solidFill4); outline3.Append(presetDash3); @@ -2909,16 +3361,16 @@ lineStyleList1.Append(outline2); lineStyleList1.Append(outline3); - A.EffectStyleList effectStyleList1 = new A.EffectStyleList(); + EffectStyleList effectStyleList1 = new EffectStyleList(); - A.EffectStyle effectStyle1 = new A.EffectStyle(); + EffectStyle effectStyle1 = new EffectStyle(); - A.EffectList effectList1 = new A.EffectList(); + EffectList effectList1 = new EffectList(); - A.OuterShadow outerShadow1 = new A.OuterShadow() { BlurRadius = 40000L, Distance = 20000L, Direction = 5400000, RotateWithShape = false }; + OuterShadow outerShadow1 = new OuterShadow {BlurRadius = 40000L, Distance = 20000L, Direction = 5400000, RotateWithShape = false}; - A.RgbColorModelHex rgbColorModelHex11 = new A.RgbColorModelHex() { Val = "000000" }; - A.Alpha alpha1 = new A.Alpha() { Val = 38000 }; + RgbColorModelHex rgbColorModelHex11 = new RgbColorModelHex {Val = "000000"}; + Alpha alpha1 = new Alpha {Val = 38000}; rgbColorModelHex11.Append(alpha1); @@ -2928,14 +3380,14 @@ effectStyle1.Append(effectList1); - A.EffectStyle effectStyle2 = new A.EffectStyle(); + EffectStyle effectStyle2 = new EffectStyle(); - A.EffectList effectList2 = new A.EffectList(); + EffectList effectList2 = new EffectList(); - A.OuterShadow outerShadow2 = new A.OuterShadow() { BlurRadius = 40000L, Distance = 23000L, Direction = 5400000, RotateWithShape = false }; + OuterShadow outerShadow2 = new OuterShadow {BlurRadius = 40000L, Distance = 23000L, Direction = 5400000, RotateWithShape = false}; - A.RgbColorModelHex rgbColorModelHex12 = new A.RgbColorModelHex() { Val = "000000" }; - A.Alpha alpha2 = new A.Alpha() { Val = 35000 }; + RgbColorModelHex rgbColorModelHex12 = new RgbColorModelHex {Val = "000000"}; + Alpha alpha2 = new Alpha {Val = 35000}; rgbColorModelHex12.Append(alpha2); @@ -2945,14 +3397,14 @@ effectStyle2.Append(effectList2); - A.EffectStyle effectStyle3 = new A.EffectStyle(); + EffectStyle effectStyle3 = new EffectStyle(); - A.EffectList effectList3 = new A.EffectList(); + EffectList effectList3 = new EffectList(); - A.OuterShadow outerShadow3 = new A.OuterShadow() { BlurRadius = 40000L, Distance = 23000L, Direction = 5400000, RotateWithShape = false }; + OuterShadow outerShadow3 = new OuterShadow {BlurRadius = 40000L, Distance = 23000L, Direction = 5400000, RotateWithShape = false}; - A.RgbColorModelHex rgbColorModelHex13 = new A.RgbColorModelHex() { Val = "000000" }; - A.Alpha alpha3 = new A.Alpha() { Val = 35000 }; + RgbColorModelHex rgbColorModelHex13 = new RgbColorModelHex {Val = "000000"}; + Alpha alpha3 = new Alpha {Val = 35000}; rgbColorModelHex13.Append(alpha3); @@ -2960,23 +3412,23 @@ effectList3.Append(outerShadow3); - A.Scene3DType scene3DType1 = new A.Scene3DType(); + Scene3DType scene3DType1 = new Scene3DType(); - A.Camera camera1 = new A.Camera() { Preset = A.PresetCameraValues.OrthographicFront }; - A.Rotation rotation1 = new A.Rotation() { Latitude = 0, Longitude = 0, Revolution = 0 }; + Camera camera1 = new Camera {Preset = PresetCameraValues.OrthographicFront}; + Rotation rotation1 = new Rotation {Latitude = 0, Longitude = 0, Revolution = 0}; camera1.Append(rotation1); - A.LightRig lightRig1 = new A.LightRig() { Rig = A.LightRigValues.ThreePoints, Direction = A.LightRigDirectionValues.Top }; - A.Rotation rotation2 = new A.Rotation() { Latitude = 0, Longitude = 0, Revolution = 1200000 }; + LightRig lightRig1 = new LightRig {Rig = LightRigValues.ThreePoints, Direction = LightRigDirectionValues.Top}; + Rotation rotation2 = new Rotation {Latitude = 0, Longitude = 0, Revolution = 1200000}; lightRig1.Append(rotation2); scene3DType1.Append(camera1); scene3DType1.Append(lightRig1); - A.Shape3DType shape3DType1 = new A.Shape3DType(); - A.BevelTop bevelTop1 = new A.BevelTop() { Width = 63500L, Height = 25400L }; + Shape3DType shape3DType1 = new Shape3DType(); + BevelTop bevelTop1 = new BevelTop {Width = 63500L, Height = 25400L}; shape3DType1.Append(bevelTop1); @@ -2988,34 +3440,34 @@ effectStyleList1.Append(effectStyle2); effectStyleList1.Append(effectStyle3); - A.BackgroundFillStyleList backgroundFillStyleList1 = new A.BackgroundFillStyleList(); + BackgroundFillStyleList backgroundFillStyleList1 = new BackgroundFillStyleList(); - A.SolidFill solidFill5 = new A.SolidFill(); - A.SchemeColor schemeColor11 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; + SolidFill solidFill5 = new SolidFill(); + SchemeColor schemeColor11 = new SchemeColor {Val = SchemeColorValues.PhColor}; solidFill5.Append(schemeColor11); - A.GradientFill gradientFill3 = new A.GradientFill() { RotateWithShape = true }; + GradientFill gradientFill3 = new GradientFill {RotateWithShape = true}; - A.GradientStopList gradientStopList3 = new A.GradientStopList(); + GradientStopList gradientStopList3 = new GradientStopList(); - A.GradientStop gradientStop7 = new A.GradientStop() { Position = 0 }; + GradientStop gradientStop7 = new GradientStop {Position = 0}; - A.SchemeColor schemeColor12 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint4 = new A.Tint() { Val = 40000 }; - A.SaturationModulation saturationModulation8 = new A.SaturationModulation() { Val = 350000 }; + SchemeColor schemeColor12 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint4 = new Tint {Val = 40000}; + SaturationModulation saturationModulation8 = new SaturationModulation {Val = 350000}; schemeColor12.Append(tint4); schemeColor12.Append(saturationModulation8); gradientStop7.Append(schemeColor12); - A.GradientStop gradientStop8 = new A.GradientStop() { Position = 40000 }; + GradientStop gradientStop8 = new GradientStop {Position = 40000}; - A.SchemeColor schemeColor13 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint5 = new A.Tint() { Val = 45000 }; - A.Shade shade5 = new A.Shade() { Val = 99000 }; - A.SaturationModulation saturationModulation9 = new A.SaturationModulation() { Val = 350000 }; + SchemeColor schemeColor13 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint5 = new Tint {Val = 45000}; + Shade shade5 = new Shade {Val = 99000}; + SaturationModulation saturationModulation9 = new SaturationModulation {Val = 350000}; schemeColor13.Append(tint5); schemeColor13.Append(shade5); @@ -3023,11 +3475,11 @@ gradientStop8.Append(schemeColor13); - A.GradientStop gradientStop9 = new A.GradientStop() { Position = 100000 }; + GradientStop gradientStop9 = new GradientStop {Position = 100000}; - A.SchemeColor schemeColor14 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade6 = new A.Shade() { Val = 20000 }; - A.SaturationModulation saturationModulation10 = new A.SaturationModulation() { Val = 255000 }; + SchemeColor schemeColor14 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade6 = new Shade {Val = 20000}; + SaturationModulation saturationModulation10 = new SaturationModulation {Val = 255000}; schemeColor14.Append(shade6); schemeColor14.Append(saturationModulation10); @@ -3038,34 +3490,34 @@ gradientStopList3.Append(gradientStop8); gradientStopList3.Append(gradientStop9); - A.PathGradientFill pathGradientFill1 = new A.PathGradientFill() { Path = A.PathShadeValues.Circle }; - A.FillToRectangle fillToRectangle1 = new A.FillToRectangle() { Left = 50000, Top = -80000, Right = 50000, Bottom = 180000 }; + PathGradientFill pathGradientFill1 = new PathGradientFill {Path = PathShadeValues.Circle}; + FillToRectangle fillToRectangle1 = new FillToRectangle {Left = 50000, Top = -80000, Right = 50000, Bottom = 180000}; pathGradientFill1.Append(fillToRectangle1); gradientFill3.Append(gradientStopList3); gradientFill3.Append(pathGradientFill1); - A.GradientFill gradientFill4 = new A.GradientFill() { RotateWithShape = true }; + GradientFill gradientFill4 = new GradientFill {RotateWithShape = true}; - A.GradientStopList gradientStopList4 = new A.GradientStopList(); + GradientStopList gradientStopList4 = new GradientStopList(); - A.GradientStop gradientStop10 = new A.GradientStop() { Position = 0 }; + GradientStop gradientStop10 = new GradientStop {Position = 0}; - A.SchemeColor schemeColor15 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Tint tint6 = new A.Tint() { Val = 80000 }; - A.SaturationModulation saturationModulation11 = new A.SaturationModulation() { Val = 300000 }; + SchemeColor schemeColor15 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Tint tint6 = new Tint {Val = 80000}; + SaturationModulation saturationModulation11 = new SaturationModulation {Val = 300000}; schemeColor15.Append(tint6); schemeColor15.Append(saturationModulation11); gradientStop10.Append(schemeColor15); - A.GradientStop gradientStop11 = new A.GradientStop() { Position = 100000 }; + GradientStop gradientStop11 = new GradientStop {Position = 100000}; - A.SchemeColor schemeColor16 = new A.SchemeColor() { Val = A.SchemeColorValues.PhColor }; - A.Shade shade7 = new A.Shade() { Val = 30000 }; - A.SaturationModulation saturationModulation12 = new A.SaturationModulation() { Val = 200000 }; + SchemeColor schemeColor16 = new SchemeColor {Val = SchemeColorValues.PhColor}; + Shade shade7 = new Shade {Val = 30000}; + SaturationModulation saturationModulation12 = new SaturationModulation {Val = 200000}; schemeColor16.Append(shade7); schemeColor16.Append(saturationModulation12); @@ -3075,8 +3527,8 @@ gradientStopList4.Append(gradientStop10); gradientStopList4.Append(gradientStop11); - A.PathGradientFill pathGradientFill2 = new A.PathGradientFill() { Path = A.PathShadeValues.Circle }; - A.FillToRectangle fillToRectangle2 = new A.FillToRectangle() { Left = 50000, Top = 50000, Right = 50000, Bottom = 50000 }; + PathGradientFill pathGradientFill2 = new PathGradientFill {Path = PathShadeValues.Circle}; + FillToRectangle fillToRectangle2 = new FillToRectangle {Left = 50000, Top = 50000, Right = 50000, Bottom = 50000}; pathGradientFill2.Append(fillToRectangle2); @@ -3095,8 +3547,8 @@ themeElements1.Append(colorScheme1); themeElements1.Append(fontScheme2); themeElements1.Append(formatScheme1); - A.ObjectDefaults objectDefaults1 = new A.ObjectDefaults(); - A.ExtraColorSchemeList extraColorSchemeList1 = new A.ExtraColorSchemeList(); + ObjectDefaults objectDefaults1 = new ObjectDefaults(); + ExtraColorSchemeList extraColorSchemeList1 = new ExtraColorSchemeList(); theme1.Append(themeElements1); theme1.Append(objectDefaults1); @@ -3107,34 +3559,39 @@ private void GenerateCustomFilePropertiesPartContent(CustomFilePropertiesPart customFilePropertiesPart1) { - Op.Properties properties2 = new Op.Properties(); + DocumentFormat.OpenXml.CustomProperties.Properties properties2 = new DocumentFormat.OpenXml.CustomProperties.Properties(); properties2.AddNamespaceDeclaration("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"); Int32 propertyId = 1; foreach (var p in CustomProperties) { propertyId++; - Op.CustomDocumentProperty customDocumentProperty = new Op.CustomDocumentProperty() { FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}", PropertyId = propertyId, Name = p.Name }; + CustomDocumentProperty customDocumentProperty = new CustomDocumentProperty + { + FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}", + PropertyId = propertyId, + Name = p.Name + }; if (p.Type == XLCustomPropertyType.Text) { - Vt.VTLPWSTR vTLPWSTR1 = new Vt.VTLPWSTR(); + VTLPWSTR vTLPWSTR1 = new VTLPWSTR(); vTLPWSTR1.Text = p.GetValue(); customDocumentProperty.Append(vTLPWSTR1); } else if (p.Type == XLCustomPropertyType.Date) { - Vt.VTFileTime vTFileTime1 = new Vt.VTFileTime(); + VTFileTime vTFileTime1 = new VTFileTime(); vTFileTime1.Text = p.GetValue().ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"); customDocumentProperty.Append(vTFileTime1); } else if (p.Type == XLCustomPropertyType.Number) { - Vt.VTDouble vTDouble1 = new Vt.VTDouble(); + VTDouble vTDouble1 = new VTDouble(); vTDouble1.Text = p.GetValue().ToString(CultureInfo.InvariantCulture); customDocumentProperty.Append(vTDouble1); } else { - Vt.VTBool vTBool1 = new Vt.VTBool(); + VTBool vTBool1 = new VTBool(); vTBool1.Text = p.GetValue().ToString().ToLower(); customDocumentProperty.Append(vTBool1); } @@ -3161,8 +3618,8 @@ document.PackageProperties.ContentStatus = Properties.Status; } - UInt32 tableId = 0; - HashSet tableNames; + private UInt32 tableId; + private HashSet tableNames; private String GetTableName(String originalTableName) { String tableName = originalTableName.RemoveSpecialCharacters(); @@ -3186,30 +3643,37 @@ { tableId++; String reference; - reference = xlTable.RangeAddress.FirstAddress.ToString() + ":" + xlTable.RangeAddress.LastAddress.ToString(); + reference = xlTable.RangeAddress.FirstAddress + ":" + xlTable.RangeAddress.LastAddress; String tableName = GetTableName(xlTable.Name); - Table table = new Table() { - Id = tableId, - Name = tableName, - DisplayName = tableName, - Reference = reference }; - - if (xlTable.ShowTotalsRow) - table.TotalsRowCount = 1; - else - table.TotalsRowShown = false; + Table table = new Table + { + Id = tableId, + Name = tableName, + DisplayName = tableName, + Reference = reference + }; - TableColumns tableColumns1 = new TableColumns() { Count = (UInt32)xlTable.ColumnCount() }; + if (xlTable.ShowTotalsRow) + { + table.TotalsRowCount = 1; + } + else + { + table.TotalsRowShown = false; + } + + TableColumns tableColumns1 = new TableColumns {Count = (UInt32) xlTable.ColumnCount()}; UInt32 columnId = 0; foreach (var cell in xlTable.HeadersRow().Cells()) { columnId++; String fieldName = cell.GetString(); var xlField = xlTable.Field(fieldName); - TableColumn tableColumn1 = new TableColumn() { - Id = (UInt32)columnId, - Name = fieldName - }; + TableColumn tableColumn1 = new TableColumn + { + Id = columnId, + Name = fieldName + }; if (xlTable.ShowTotalsRow) { if (xlField.TotalsRowFunction != XLTotalsRowFunction.None) @@ -3217,32 +3681,42 @@ tableColumn1.TotalsRowFunction = xlField.TotalsRowFunction.ToOpenXml(); if (xlField.TotalsRowFunction == XLTotalsRowFunction.Custom) + { tableColumn1.TotalsRowFormula = new TotalsRowFormula(xlField.TotalsRowFormulaA1); + } } if (!StringExtensions.IsNullOrWhiteSpace(xlField.TotalsRowLabel)) + { tableColumn1.TotalsRowLabel = xlField.TotalsRowLabel; + } } tableColumns1.Append(tableColumn1); } - TableStyleInfo tableStyleInfo1 = new TableStyleInfo() { - Name = Enum.GetName(typeof(XLTableTheme), xlTable.Theme), - ShowFirstColumn = xlTable.EmphasizeFirstColumn, - ShowLastColumn = xlTable.EmphasizeLastColumn, - ShowRowStripes = xlTable.ShowRowStripes, - ShowColumnStripes = xlTable.ShowColumnStripes - }; + TableStyleInfo tableStyleInfo1 = new TableStyleInfo + { + Name = Enum.GetName(typeof (XLTableTheme), xlTable.Theme), + ShowFirstColumn = xlTable.EmphasizeFirstColumn, + ShowLastColumn = xlTable.EmphasizeLastColumn, + ShowRowStripes = xlTable.ShowRowStripes, + ShowColumnStripes = xlTable.ShowColumnStripes + }; if (xlTable.ShowAutoFilter) { AutoFilter autoFilter1 = new AutoFilter(); if (xlTable.ShowTotalsRow) - autoFilter1.Reference = xlTable.RangeAddress.FirstAddress.ToString() + ":" + - XLAddress.GetColumnLetterFromNumber(xlTable.RangeAddress.LastAddress.ColumnNumber) + (xlTable.RangeAddress.LastAddress.RowNumber - 1).ToStringLookup(); + { + autoFilter1.Reference = xlTable.RangeAddress.FirstAddress + ":" + + XLAddress.GetColumnLetterFromNumber(xlTable.RangeAddress.LastAddress.ColumnNumber) + + (xlTable.RangeAddress.LastAddress.RowNumber - 1).ToStringLookup(); + } else + { autoFilter1.Reference = reference; + } table.Append(autoFilter1); } @@ -3265,7 +3739,6 @@ // if (!worksheetDrawing.NamespaceDeclarations.Contains(new KeyValuePair("a", "http://schemas.openxmlformats.org/drawingml/2006/main"))) // worksheetDrawing.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); - // foreach (var chart in worksheet.Charts.OrderBy(c => c.ZOrder).Select(c => c)) // { // Xdr.TwoCellAnchor twoCellAnchor = new Xdr.TwoCellAnchor(); @@ -3291,8 +3764,6 @@ // twoCellAnchor.ToMarker.ColumnId = new Xdr.ColumnId((chart.LastColumn - 1).ToString()); // twoCellAnchor.ToMarker.ColumnOffset = new Xdr.ColumnOffset(chart.LastColumnOffset.ToString()); - - // Xdr.GraphicFrame graphicFrame = new Xdr.GraphicFrame(); // twoCellAnchor.Append(graphicFrame); @@ -3400,8 +3871,6 @@ // chart.PlotArea.Append(chartElement); - - // C.CategoryAxis categoryAxis1 = new C.CategoryAxis(); // C.AxisId axisId4 = new C.AxisId() { Val = (UInt32Value)71429120U }; @@ -3452,7 +3921,6 @@ // valueAxis1.Append(crosses2); // valueAxis1.Append(crossBetween1); - // plotArea.Append(bar3DChart1); // plotArea.Append(categoryAxis1); // plotArea.Append(valueAxis1); @@ -3465,8 +3933,6 @@ // legend1.Append(layout3); // C.PlotVisibleOnly plotVisibleOnly1 = new C.PlotVisibleOnly() { Val = true }; - - // chart.Append(legend1); // chart.Append(plotVisibleOnly1); @@ -3479,8 +3945,6 @@ // printSettings1.Append(pageMargins4); // printSettings1.Append(pageSetup1); - - // chartSpace.Append(printSettings1); //} @@ -3509,9 +3973,9 @@ // C.StringReference stringReference1 = new C.StringReference(); // C.Formula formula1 = new C.Formula(); // formula1.Text = "Sheet1!$B$1"; - + // stringReference1.Append(formula1); - + // seriesText1.Append(stringReference1); // C.CategoryAxisData categoryAxisData1 = new C.CategoryAxisData(); @@ -3587,7 +4051,6 @@ // C.AxisId axisId2 = new C.AxisId() { Val = (UInt32Value)71432064U }; // C.AxisId axisId3 = new C.AxisId() { Val = (UInt32Value)0U }; - // bar3DChart.Append(barChartSeries); // bar3DChart.Append(shape1); // bar3DChart.Append(axisId1); @@ -3616,7 +4079,5 @@ // else // return C.BarDirectionValues.Bar; //} - - } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index f8684ca..e1d71b1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -4,29 +4,41 @@ namespace ClosedXML.Excel { - internal delegate void RangeShiftedRowsDelegate(XLRange range, Int32 rowsShifted); + internal delegate void RangeShiftedColumnsDelegate(XLRange range, Int32 columnsShifted); + internal class XLWorksheet : XLRangeBase, IXLWorksheet { - public event RangeShiftedRowsDelegate RangeShiftedRows; - public event RangeShiftedColumnsDelegate RangeShiftedColumns; - #region Constants - public const Int32 MaxNumberOfRows = 1048576; public const Int32 MaxNumberOfColumns = 16384; - #endregion + #region Events + public event RangeShiftedRowsDelegate RangeShiftedRows; + public event RangeShiftedColumnsDelegate RangeShiftedColumns; + #endregion + #region Fields + internal Int32 m_position; + private Double m_rowHeight; + private String m_name; - public XLWorkbook Workbook { get; private set; } + private IXLSortElements m_sortRows; + private IXLSortElements m_sortColumns; + private Boolean m_tabActive; + + private readonly Dictionary m_columnOutlineCount = new Dictionary(); + private readonly Dictionary m_rowOutlineCount = new Dictionary(); + #endregion + #region Constructor public XLWorksheet(String sheetName, XLWorkbook workbook) - : base((IXLRangeAddress)new XLRangeAddress(new XLAddress(null, 1, 1, false, false), new XLAddress(null, MaxNumberOfRows, MaxNumberOfColumns, false, false))) + : base(new XLRangeAddress(new XLAddress(null, 1, 1, false, false), + new XLAddress(null, MaxNumberOfRows, MaxNumberOfColumns, false, false))) { - (RangeAddress as XLRangeAddress).Worksheet = this; - (RangeAddress.FirstAddress as XLAddress).Worksheet = this; - (RangeAddress.LastAddress as XLAddress).Worksheet = this; + RangeAddress.Worksheet = this; + RangeAddress.FirstAddress.Worksheet = this; + RangeAddress.LastAddress.Worksheet = this; NamedRanges = new XLNamedRanges(workbook); SheetView = new XLSheetView(); @@ -34,17 +46,17 @@ Hyperlinks = new XLHyperlinks(); DataValidations = new XLDataValidations(); Protection = new XLSheetProtection(); - this.Workbook = workbook; + Workbook = workbook; style = new XLStyle(this, workbook.Style); - Internals = new XLWorksheetInternals(new XLCellCollection(), new XLColumnsCollection(), new XLRowsCollection(), new XLRanges() , workbook); + Internals = new XLWorksheetInternals(new XLCellCollection(), new XLColumnsCollection(), new XLRowsCollection(), new XLRanges(), workbook); PageSetup = new XLPageSetup(workbook.PageOptions, this); Outline = new XLOutline(workbook.Outline); ColumnWidth = workbook.ColumnWidth; - rowHeight = workbook.RowHeight; + m_rowHeight = workbook.RowHeight; RowHeightChanged = workbook.RowHeight != XLWorkbook.DefaultRowHeight; - this.Name = sheetName; - RangeShiftedRows += new RangeShiftedRowsDelegate(XLWorksheet_RangeShiftedRows); - RangeShiftedColumns += new RangeShiftedColumnsDelegate(XLWorksheet_RangeShiftedColumns); + Name = sheetName; + RangeShiftedRows += XLWorksheet_RangeShiftedRows; + RangeShiftedColumns += XLWorksheet_RangeShiftedColumns; Charts = new XLCharts(); ShowFormulas = workbook.ShowFormulas; ShowGridLines = workbook.ShowGridLines; @@ -55,8 +67,10 @@ ShowZeros = workbook.ShowZeros; TabColor = new XLColor(); } + #endregion + public XLWorkbook Workbook { get; private set; } - void XLWorksheet_RangeShiftedColumns(XLRange range, int columnsShifted) + private void XLWorksheet_RangeShiftedColumns(XLRange range, int columnsShifted) { var newMerge = new XLRanges(); foreach (var rngMerged in Internals.MergedRanges) @@ -66,15 +80,15 @@ && rngMerged.RangeAddress.LastAddress.RowNumber <= range.RangeAddress.LastAddress.RowNumber) { var newRng = Range( - rngMerged.RangeAddress.FirstAddress.RowNumber, - rngMerged.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, - rngMerged.RangeAddress.LastAddress.RowNumber, - rngMerged.RangeAddress.LastAddress.ColumnNumber + columnsShifted); + rngMerged.RangeAddress.FirstAddress.RowNumber, + rngMerged.RangeAddress.FirstAddress.ColumnNumber + columnsShifted, + rngMerged.RangeAddress.LastAddress.RowNumber, + rngMerged.RangeAddress.LastAddress.ColumnNumber + columnsShifted); newMerge.Add(newRng); } else if ( - !(range.RangeAddress.FirstAddress.ColumnNumber <= rngMerged.RangeAddress.FirstAddress.ColumnNumber - && range.RangeAddress.FirstAddress.RowNumber <= rngMerged.RangeAddress.LastAddress.RowNumber)) + !(range.RangeAddress.FirstAddress.ColumnNumber <= rngMerged.RangeAddress.FirstAddress.ColumnNumber + && range.RangeAddress.FirstAddress.RowNumber <= rngMerged.RangeAddress.LastAddress.RowNumber)) { newMerge.Add(rngMerged); } @@ -82,7 +96,7 @@ Internals.MergedRanges = newMerge; } - void XLWorksheet_RangeShiftedRows(XLRange range, int rowsShifted) + private void XLWorksheet_RangeShiftedRows(XLRange range, int rowsShifted) { var newMerge = new XLRanges(); foreach (var rngMerged in Internals.MergedRanges) @@ -92,14 +106,14 @@ && rngMerged.RangeAddress.LastAddress.ColumnNumber <= range.RangeAddress.LastAddress.ColumnNumber) { var newRng = Range( - rngMerged.RangeAddress.FirstAddress.RowNumber + rowsShifted, - rngMerged.RangeAddress.FirstAddress.ColumnNumber, - rngMerged.RangeAddress.LastAddress.RowNumber + rowsShifted, - rngMerged.RangeAddress.LastAddress.ColumnNumber); + rngMerged.RangeAddress.FirstAddress.RowNumber + rowsShifted, + rngMerged.RangeAddress.FirstAddress.ColumnNumber, + rngMerged.RangeAddress.LastAddress.RowNumber + rowsShifted, + rngMerged.RangeAddress.LastAddress.ColumnNumber); newMerge.Add(newRng); } else if (!(range.RangeAddress.FirstAddress.RowNumber <= rngMerged.RangeAddress.FirstAddress.RowNumber - && range.RangeAddress.FirstAddress.ColumnNumber <= rngMerged.RangeAddress.LastAddress.ColumnNumber)) + && range.RangeAddress.FirstAddress.ColumnNumber <= rngMerged.RangeAddress.LastAddress.ColumnNumber)) { newMerge.Add(rngMerged); } @@ -110,37 +124,38 @@ public void NotifyRangeShiftedRows(XLRange range, Int32 rowsShifted) { if (RangeShiftedRows != null) + { RangeShiftedRows(range, rowsShifted); + } } public void NotifyRangeShiftedColumns(XLRange range, Int32 columnsShifted) { if (RangeShiftedColumns != null) + { RangeShiftedColumns(range, columnsShifted); + } } public XLWorksheetInternals Internals { get; private set; } - #region IXLStylized Members - private IXLStyle style; public override IXLStyle Style { - get - { - return style; - } + get { return style; } set { style = new XLStyle(this, value); - foreach(var cell in Internals.CellsCollection.Values) + foreach (var cell in Internals.CellsCollection.Values) + { cell.Style = style; + } } } public override IEnumerable Styles { - get + get { UpdatingStyle = true; yield return style; @@ -156,64 +171,61 @@ public override IXLStyle InnerStyle { - get { return new XLStyle(new XLStylizedContainer(this.style, this), style); } + get { return new XLStyle(new XLStylizedContainer(style, this), style); } set { style = new XLStyle(this, value); } } - #endregion - public Double ColumnWidth { get; set; } internal Boolean RowHeightChanged { get; set; } - Double rowHeight; - public Double RowHeight + + public Double RowHeight { - get - { - return rowHeight; - } + get { return m_rowHeight; } set { RowHeightChanged = true; - rowHeight = value; + m_rowHeight = value; } } - private String name; - public String Name + public String Name { - get - { - return name; - } + get { return m_name; } set { - (Workbook.Worksheets as XLWorksheets).Rename(name, value); - name = value; + (Workbook.WorksheetsInternal).Rename(m_name, value); + m_name = value; } } public Int32 SheetId { get; set; } public String RelId { get; set; } - - internal Int32 position; - public Int32 Position + + public Int32 Position { - get - { - return position; - } + get { return m_position; } set { - if (value > Workbook.Worksheets.Count() + 1) + if (value > Workbook.WorksheetsInternal.Count + 1) + { throw new IndexOutOfRangeException("Index must be equal or less than the number of worksheets + 1."); + } - if (value < position) - Workbook.Worksheets.Where(w => ((XLWorksheet)w).Position >= value && ((XLWorksheet)w).Position < position).ForEach(w => ((XLWorksheet)w).position += 1); + if (value < m_position) + { + Workbook.WorksheetsInternal + .Where(w => w.Position >= value && w.Position < m_position) + .ForEach(w => w.m_position += 1); + } - if (value > position) - Workbook.Worksheets.Where(w => ((XLWorksheet)w).Position <= value && ((XLWorksheet)w).Position > position).ForEach(w => ((XLWorksheet)w).position -= 1); + if (value > m_position) + { + Workbook.WorksheetsInternal + .Where(w => w.Position <= value && w.Position > m_position) + .ForEach(w => (w).m_position -= 1); + } - position = value; + m_position = value; } } @@ -222,22 +234,19 @@ public IXLRow FirstRowUsed() { - var rngRow = this.AsRange().FirstRowUsed(); + var rngRow = AsRange().FirstRowUsed(); if (rngRow != null) { - return this.Row(rngRow.RangeAddress.FirstAddress.RowNumber); + return Row(rngRow.RangeAddress.FirstAddress.RowNumber); } - else - { - return null; - } + return null; } public IXLRow LastRowUsed() { - var rngRow = this.AsRange().LastRowUsed(); + var rngRow = AsRange().LastRowUsed(); if (rngRow != null) { - return this.Row(rngRow.RangeAddress.LastAddress.RowNumber); + return Row(rngRow.RangeAddress.LastAddress.RowNumber); } else { @@ -263,22 +272,15 @@ } public IXLColumn FirstColumnUsed() { - var rngColumn = this.AsRange().FirstColumnUsed(); - if (rngColumn != null) - { - return this.Column(rngColumn.RangeAddress.FirstAddress.ColumnNumber); - } - else - { - return null; - } + var rngColumn = AsRange().FirstColumnUsed(); + return rngColumn != null ? Column(rngColumn.RangeAddress.FirstAddress.ColumnNumber) : null; } public IXLColumn LastColumnUsed() { - var rngColumn = this.AsRange().LastColumnUsed(); + var rngColumn = AsRange().LastColumnUsed(); if (rngColumn != null) { - return this.Column(rngColumn.RangeAddress.LastAddress.ColumnNumber); + return Column(rngColumn.RangeAddress.LastAddress.ColumnNumber); } else { @@ -291,15 +293,19 @@ var retVal = new XLColumns(this); var columnList = new List(); - if (this.Internals.CellsCollection.Count > 0) - columnList.AddRange(this.Internals.CellsCollection.Keys.Select(k => k.ColumnNumber).Distinct()); + if (Internals.CellsCollection.Count > 0) + { + columnList.AddRange(Internals.CellsCollection.Keys.Select(k => k.ColumnNumber).Distinct()); + } - if (this.Internals.ColumnsCollection.Count > 0) - columnList.AddRange(this.Internals.ColumnsCollection.Keys.Where(c => !columnList.Contains(c))); + if (Internals.ColumnsCollection.Count > 0) + { + columnList.AddRange(Internals.ColumnsCollection.Keys.Where(c => !columnList.Contains(c))); + } foreach (var c in columnList) { - retVal.Add((XLColumn)this.Column(c)); + retVal.Add((XLColumn) Column(c)); } return retVal; @@ -316,7 +322,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var columnRange = tPair.Split(':'); firstColumn = columnRange[0]; @@ -330,29 +338,33 @@ Int32 tmp; if (Int32.TryParse(firstColumn, out tmp)) - foreach (var col in this.Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))) + { + foreach (var col in Columns(Int32.Parse(firstColumn), Int32.Parse(lastColumn))) { - retVal.Add((XLColumn)col); + retVal.Add((XLColumn) col); } + } else - foreach (var col in this.Columns(firstColumn, lastColumn)) + { + foreach (var col in Columns(firstColumn, lastColumn)) { - retVal.Add((XLColumn)col); + retVal.Add((XLColumn) col); } + } } return retVal; } - public IXLColumns Columns( String firstColumn, String lastColumn) + public IXLColumns Columns(String firstColumn, String lastColumn) { - return this.Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); + return Columns(XLAddress.GetColumnNumberFromLetter(firstColumn), XLAddress.GetColumnNumberFromLetter(lastColumn)); } - public IXLColumns Columns( Int32 firstColumn, Int32 lastColumn) + public IXLColumns Columns(Int32 firstColumn, Int32 lastColumn) { var retVal = new XLColumns(null); for (var co = firstColumn; co <= lastColumn; co++) { - retVal.Add((XLColumn)this.Column(co)); + retVal.Add((XLColumn) Column(co)); } return retVal; } @@ -362,15 +374,19 @@ var retVal = new XLRows(this); var rowList = new List(); - if (this.Internals.CellsCollection.Count > 0) - rowList.AddRange(this.Internals.CellsCollection.Keys.Select(k => k.RowNumber).Distinct()); + if (Internals.CellsCollection.Count > 0) + { + rowList.AddRange(Internals.CellsCollection.Keys.Select(k => k.RowNumber).Distinct()); + } - if (this.Internals.RowsCollection.Count > 0) - rowList.AddRange(this.Internals.RowsCollection.Keys.Where(r => !rowList.Contains(r))); + if (Internals.RowsCollection.Count > 0) + { + rowList.AddRange(Internals.RowsCollection.Keys.Where(r => !rowList.Contains(r))); + } foreach (var r in rowList) { - retVal.Add((XLRow)this.Row(r)); + retVal.Add((XLRow) Row(r)); } return retVal; @@ -387,7 +403,9 @@ if (tPair.Contains(':') || tPair.Contains('-')) { if (tPair.Contains('-')) + { tPair = tPair.Replace('-', ':'); + } var rowRange = tPair.Split(':'); firstRow = rowRange[0]; @@ -398,20 +416,20 @@ firstRow = tPair; lastRow = tPair; } - foreach (var row in this.Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) + foreach (var row in Rows(Int32.Parse(firstRow), Int32.Parse(lastRow))) { - retVal.Add((XLRow)row); + retVal.Add((XLRow) row); } } return retVal; } - public IXLRows Rows( Int32 firstRow, Int32 lastRow) + public IXLRows Rows(Int32 firstRow, Int32 lastRow) { var retVal = new XLRows(null); for (var ro = firstRow; ro <= lastRow; ro++) { - retVal.Add((XLRow)this.Row(ro)); + retVal.Add((XLRow) Row(ro)); } return retVal; } @@ -423,9 +441,9 @@ public IXLRow Row(Int32 row, Boolean pingCells) { IXLStyle styleToUse; - if (this.Internals.RowsCollection.ContainsKey(row)) + if (Internals.RowsCollection.ContainsKey(row)) { - styleToUse = this.Internals.RowsCollection[row].Style; + styleToUse = Internals.RowsCollection[row].Style; } else { @@ -434,52 +452,96 @@ // This is a new row so we're going to reference all // cells in columns of this row to preserve their formatting var distinctColumns = new HashSet(); - foreach (var k in this.Internals.CellsCollection.Keys) + foreach (var k in Internals.CellsCollection.Keys) { if (!distinctColumns.Contains(k.ColumnNumber)) + { distinctColumns.Add(k.ColumnNumber); + } } - var usedColumns = from c in this.Internals.ColumnsCollection + var usedColumns = from c in Internals.ColumnsCollection join dc in distinctColumns - on c.Key equals dc - where !this.Internals.CellsCollection.ContainsKey(new XLAddress(Worksheet, row, c.Key, false, false)) + on c.Key equals dc + where !Internals.CellsCollection.ContainsKey(new XLAddress(Worksheet, row, c.Key, false, false)) select c.Key; usedColumns.ForEach(c => Cell(row, c)); } - styleToUse = this.Style; - this.Internals.RowsCollection.Add(row, new XLRow(row, new XLRowParameters(this, styleToUse, false))); + styleToUse = Style; + Internals.RowsCollection.Add(row, new XLRow(row, new XLRowParameters(this, styleToUse, false))); } return new XLRow(row, new XLRowParameters(this, styleToUse, true)); } - public IXLColumn Column( Int32 column) + public IXLColumn Column(Int32 column) { IXLStyle styleToUse; - if (this.Internals.ColumnsCollection.ContainsKey(column)) + if (Internals.ColumnsCollection.ContainsKey(column)) { - styleToUse = this.Internals.ColumnsCollection[column].Style; + styleToUse = Internals.ColumnsCollection[column].Style; } else { // This is a new row so we're going to reference all // cells in this row to preserve their formatting - this.Internals.RowsCollection.Keys.ForEach(r => Cell(r, column)); - styleToUse = this.Style; - this.Internals.ColumnsCollection.Add(column, new XLColumn(column, new XLColumnParameters(this, this.Style, false))); + Internals.RowsCollection.Keys.ForEach(r => Cell(r, column)); + styleToUse = Style; + Internals.ColumnsCollection.Add(column, new XLColumn(column, new XLColumnParameters(this, Style, false))); } - return new XLColumn(column, new XLColumnParameters(this, this.Style, true)); + return new XLColumn(column, new XLColumnParameters(this, Style, true)); } - public IXLColumn Column( String column) + public IXLColumn Column(String column) { - return this.Column(XLAddress.GetColumnNumberFromLetter(column)); + return Column(XLAddress.GetColumnNumberFromLetter(column)); + } + + IXLCell IXLWorksheet.Cell(int row, int column) + { + return Cell(row, column); + } + IXLCell IXLWorksheet.Cell(string cellAddressInRange) + { + return Cell(cellAddressInRange); + } + IXLCell IXLWorksheet.Cell(int row, string column) + { + return Cell(row, column); + } + IXLCell IXLWorksheet.Cell(IXLAddress cellAddressInRange) + { + return Cell(cellAddressInRange); + } + + IXLRange IXLWorksheet.Range(IXLRangeAddress rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLWorksheet.Range(string rangeAddress) + { + return Range(rangeAddress); + } + IXLRange IXLWorksheet.Range(IXLCell firstCell, IXLCell lastCell) + { + return Range(firstCell, lastCell); + } + IXLRange IXLWorksheet.Range(string firstCellAddress, string lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLWorksheet.Range(IXLAddress firstCellAddress, IXLAddress lastCellAddress) + { + return Range(firstCellAddress, lastCellAddress); + } + IXLRange IXLWorksheet.Range(int firstCellRow, int firstCellColumn, int lastCellRow, int lastCellColumn) + { + return Range(firstCellRow, firstCellColumn, lastCellRow, lastCellColumn); } public override IXLRange AsRange() { - return Range(1, 1, XLWorksheet.MaxNumberOfRows, XLWorksheet.MaxNumberOfColumns); + return Range(1, 1, MaxNumberOfRows, MaxNumberOfColumns); } public IXLWorksheet CollapseRows() @@ -502,11 +564,13 @@ Enumerable.Range(1, 8).ForEach(i => ExpandRows(i)); return this; } - + public IXLWorksheet CollapseRows(Int32 outlineLevel) { if (outlineLevel < 1 || outlineLevel > 8) + { throw new ArgumentOutOfRangeException("Outline level must be between 1 and 8."); + } Internals.RowsCollection.Values.Where(r => r.OutlineLevel == outlineLevel).ForEach(r => r.Collapse()); return this; @@ -514,7 +578,9 @@ public IXLWorksheet CollapseColumns(Int32 outlineLevel) { if (outlineLevel < 1 || outlineLevel > 8) - throw new ArgumentOutOfRangeException("Outline level must be between 1 and 8."); + { + throw new ArgumentOutOfRangeException("outlineLevel", "Outline level must be between 1 and 8."); + } Internals.ColumnsCollection.Values.Where(c => c.OutlineLevel == outlineLevel).ForEach(c => c.Collapse()); return this; @@ -522,7 +588,9 @@ public IXLWorksheet ExpandRows(Int32 outlineLevel) { if (outlineLevel < 1 || outlineLevel > 8) - throw new ArgumentOutOfRangeException("Outline level must be between 1 and 8."); + { + throw new ArgumentOutOfRangeException("outlineLevel", "Outline level must be between 1 and 8."); + } Internals.RowsCollection.Values.Where(r => r.OutlineLevel == outlineLevel).ForEach(r => r.Expand()); return this; @@ -530,7 +598,9 @@ public IXLWorksheet ExpandColumns(Int32 outlineLevel) { if (outlineLevel < 1 || outlineLevel > 8) - throw new ArgumentOutOfRangeException("Outline level must be between 1 and 8."); + { + throw new ArgumentOutOfRangeException("outlineLevel", "Outline level must be between 1 and 8."); + } Internals.ColumnsCollection.Values.Where(c => c.OutlineLevel == outlineLevel).ForEach(c => c.Expand()); return this; @@ -538,7 +608,7 @@ public void Delete() { - Workbook.Worksheets.Delete(Name); + Workbook.WorksheetsInternal.Delete(Name); } public new void Clear() { @@ -561,62 +631,66 @@ public IXLWorksheet CopyTo(String newSheetName) { - return CopyTo(this.Workbook, newSheetName, Workbook.Worksheets.Count() + 1); + return CopyTo(Workbook, newSheetName, Workbook.WorksheetsInternal.Count + 1); } public IXLWorksheet CopyTo(String newSheetName, Int32 position) { - return CopyTo(this.Workbook, newSheetName, position); + return CopyTo(Workbook, newSheetName, position); } public IXLWorksheet CopyTo(XLWorkbook workbook, String newSheetName) { - return CopyTo(workbook, newSheetName, workbook.Worksheets.Count() + 1); + return CopyTo(workbook, newSheetName, workbook.WorksheetsInternal.Count + 1); } public IXLWorksheet CopyTo(XLWorkbook workbook, String newSheetName, Int32 position) { - var ws = (XLWorksheet)workbook.Worksheets.Add(newSheetName, position); - - this.Internals.CellsCollection.ForEach(kp => (ws.Cell(kp.Value.Address.RowNumber, kp.Value.Address.ColumnNumber) as XLCell).CopyFrom(kp.Value)); - this.DataValidations.ForEach(dv => ws.DataValidations.Add(new XLDataValidation(dv, ws))); - this.Internals.ColumnsCollection.ForEach(kp => ws.Internals.ColumnsCollection.Add(kp.Key, new XLColumn(kp.Value))); - this.Internals.RowsCollection.ForEach(kp => ws.Internals.RowsCollection.Add(kp.Key, new XLRow(kp.Value))); - ws.Visibility = this.Visibility; - ws.ColumnWidth = this.ColumnWidth; - ws.RowHeight = this.RowHeight; - ws.style = new XLStyle(ws, this.style); - ws.PageSetup = new XLPageSetup(this.PageSetup, ws); - ws.Outline = new XLOutline(this.Outline); - ws.SheetView = new XLSheetView(this.SheetView); - this.Internals.MergedRanges.ForEach(kp => ws.Internals.MergedRanges.Add(ws.Range(kp.RangeAddress.ToString()))); + var ws = (XLWorksheet) workbook.WorksheetsInternal.Add(newSheetName, position); - foreach (var r in this.NamedRanges) + Internals.CellsCollection.ForEach(kp => ws.Cell(kp.Value.Address.RowNumber, kp.Value.Address.ColumnNumber).CopyFrom(kp.Value)); + DataValidations.ForEach(dv => ws.DataValidations.Add(new XLDataValidation(dv, ws))); + Internals.ColumnsCollection.ForEach(kp => ws.Internals.ColumnsCollection.Add(kp.Key, new XLColumn(kp.Value))); + Internals.RowsCollection.ForEach(kp => ws.Internals.RowsCollection.Add(kp.Key, new XLRow(kp.Value))); + ws.Visibility = Visibility; + ws.ColumnWidth = ColumnWidth; + ws.RowHeight = RowHeight; + ws.style = new XLStyle(ws, style); + ws.PageSetup = new XLPageSetup(PageSetup, ws); + ws.Outline = new XLOutline(Outline); + ws.SheetView = new XLSheetView(SheetView); + Internals.MergedRanges.ForEach(kp => ws.Internals.MergedRanges.Add(ws.Range(kp.RangeAddress.ToString()))); + + foreach (var r in NamedRanges) { var ranges = new XLRanges(); - r.Ranges.ForEach(rr => ranges.Add(rr)); + r.Ranges.ForEach(ranges.Add); ws.NamedRanges.Add(r.Name, ranges); } - foreach(var t in this.Tables) + foreach (var t in Tables.Cast()) { XLTable table; if (ws.Tables.Any(tt => tt.Name == t.Name)) - table = new XLTable((XLRange)ws.Range(t.RangeAddress.ToString()), true); + { + table = new XLTable(ws.Range(t.RangeAddress.ToString()), true); + } else - table = new XLTable((XLRange)ws.Range(t.RangeAddress.ToString()), t.Name, true); - - table.RelId = (t as XLTable).RelId; + { + table = new XLTable(ws.Range(t.RangeAddress.ToString()), t.Name, true); + } + + table.RelId = t.RelId; table.EmphasizeFirstColumn = t.EmphasizeFirstColumn; table.EmphasizeLastColumn = t.EmphasizeLastColumn; table.ShowRowStripes = t.ShowRowStripes; table.ShowColumnStripes = t.ShowColumnStripes; table.ShowAutoFilter = t.ShowAutoFilter; table.Theme = t.Theme; - table.showTotalsRow = t.ShowTotalsRow; - table.uniqueNames.Clear(); + table.m_showTotalsRow = t.ShowTotalsRow; + table.m_uniqueNames.Clear(); - (t as XLTable).uniqueNames.ForEach(n => table.uniqueNames.Add(n)); + t.m_uniqueNames.ForEach(n => table.m_uniqueNames.Add(n)); Int32 fieldCount = t.ColumnCount(); for (Int32 f = 0; f < fieldCount; f++) { @@ -627,76 +701,92 @@ } } - if (this.AutoFilterRange != null) - ws.Range(this.AutoFilterRange.RangeAddress).SetAutoFilter(); + if (AutoFilterRange != null) + { + ws.Range(AutoFilterRange.RangeAddress).SetAutoFilter(); + } return ws; } - #region Outlines - private Dictionary columnOutlineCount = new Dictionary(); public void IncrementColumnOutline(Int32 level) { if (level > 0) { - if (!columnOutlineCount.ContainsKey(level)) - columnOutlineCount.Add(level, 0); + if (!m_columnOutlineCount.ContainsKey(level)) + { + m_columnOutlineCount.Add(level, 0); + } - columnOutlineCount[level]++; + m_columnOutlineCount[level]++; } } public void DecrementColumnOutline(Int32 level) { if (level > 0) { - if (!columnOutlineCount.ContainsKey(level)) - columnOutlineCount.Add(level, 0); + if (!m_columnOutlineCount.ContainsKey(level)) + { + m_columnOutlineCount.Add(level, 0); + } - if (columnOutlineCount[level] > 0) - columnOutlineCount[level]--; + if (m_columnOutlineCount[level] > 0) + { + m_columnOutlineCount[level]--; + } } } public Int32 GetMaxColumnOutline() { - if (columnOutlineCount.Count == 0) + if (m_columnOutlineCount.Count == 0) + { return 0; - else - return columnOutlineCount.Where(kp => kp.Value > 0).Max(kp => kp.Key); + } + return m_columnOutlineCount.Where(kp => kp.Value > 0).Max(kp => kp.Key); } - private Dictionary rowOutlineCount = new Dictionary(); public void IncrementRowOutline(Int32 level) { if (level > 0) { - if (!rowOutlineCount.ContainsKey(level)) - rowOutlineCount.Add(level, 0); + if (!m_rowOutlineCount.ContainsKey(level)) + { + m_rowOutlineCount.Add(level, 0); + } - rowOutlineCount[level]++; + m_rowOutlineCount[level]++; } } public void DecrementRowOutline(Int32 level) { if (level > 0) { - if (!rowOutlineCount.ContainsKey(level)) - rowOutlineCount.Add(level, 0); + if (!m_rowOutlineCount.ContainsKey(level)) + { + m_rowOutlineCount.Add(level, 0); + } - if (rowOutlineCount[level] > 0) - rowOutlineCount[level]--; + if (m_rowOutlineCount[level] > 0) + { + m_rowOutlineCount[level]--; + } } } public Int32 GetMaxRowOutline() { - if (rowOutlineCount.Count == 0) + if (m_rowOutlineCount.Count == 0) + { return 0; - else - return rowOutlineCount.Where(kp => kp.Value > 0).Max(kp => kp.Key); + } + return m_rowOutlineCount.Where(kp => kp.Value > 0).Max(kp => kp.Key); } #endregion - public new IXLHyperlinks Hyperlinks { get; private set; } - public IXLDataValidations DataValidations { get; private set; } + public XLDataValidations DataValidations { get; private set; } + IXLDataValidations IXLWorksheet.DataValidations + { + get { return DataValidations; } + } public XLWorksheetVisibility Visibility { get; set; } public IXLWorksheet Hide() @@ -730,24 +820,14 @@ public IXLRangeBase AutoFilterRange { get; set; } - IXLSortElements sortRows; public IXLSortElements SortRows { - get - { - if (sortRows == null) sortRows = new XLSortElements(); - return sortRows; - } + get { return m_sortRows ?? (m_sortRows = new XLSortElements()); } } - IXLSortElements sortColumns; public IXLSortElements SortColumns { - get - { - if (sortColumns == null) sortColumns = new XLSortElements(); - return sortColumns; - } + get { return m_sortColumns ?? (m_sortColumns = new XLSortElements()); } } public IXLRange Sort() @@ -813,7 +893,7 @@ private IXLRange GetRangeForSort() { - var range = this.RangeUsed(); + var range = RangeUsed(); SortColumns.ForEach(e => range.SortColumns.Add(e.ElementNumber, e.SortOrder, e.IgnoreBlanks, e.MatchCase)); SortRows.ForEach(e => range.SortRows.Add(e.ElementNumber, e.SortOrder, e.IgnoreBlanks, e.MatchCase)); return range; @@ -829,14 +909,76 @@ public Boolean ShowWhiteSpace { get; set; } public Boolean ShowZeros { get; set; } - public IXLWorksheet SetShowFormulas() { ShowFormulas = true; return this; } public IXLWorksheet SetShowFormulas(Boolean value) { ShowFormulas = value; return this; } - public IXLWorksheet SetShowGridLines() { ShowGridLines = true; return this; } public IXLWorksheet SetShowGridLines(Boolean value) { ShowGridLines = value; return this; } - public IXLWorksheet SetShowOutlineSymbols() { ShowOutlineSymbols = true; return this; } public IXLWorksheet SetShowOutlineSymbols(Boolean value) { ShowOutlineSymbols = value; return this; } - public IXLWorksheet SetShowRowColHeaders() { ShowRowColHeaders = true; return this; } public IXLWorksheet SetShowRowColHeaders(Boolean value) { ShowRowColHeaders = value; return this; } - public IXLWorksheet SetShowRuler() { ShowRuler = true; return this; } public IXLWorksheet SetShowRuler(Boolean value) { ShowRuler = value; return this; } - public IXLWorksheet SetShowWhiteSpace() { ShowWhiteSpace = true; return this; } public IXLWorksheet SetShowWhiteSpace(Boolean value) { ShowWhiteSpace = value; return this; } - public IXLWorksheet SetShowZeros() { ShowZeros = true; return this; } public IXLWorksheet SetShowZeros(Boolean value) { ShowZeros = value; return this; } - + public IXLWorksheet SetShowFormulas() + { + ShowFormulas = true; + return this; + } + public IXLWorksheet SetShowFormulas(Boolean value) + { + ShowFormulas = value; + return this; + } + public IXLWorksheet SetShowGridLines() + { + ShowGridLines = true; + return this; + } + public IXLWorksheet SetShowGridLines(Boolean value) + { + ShowGridLines = value; + return this; + } + public IXLWorksheet SetShowOutlineSymbols() + { + ShowOutlineSymbols = true; + return this; + } + public IXLWorksheet SetShowOutlineSymbols(Boolean value) + { + ShowOutlineSymbols = value; + return this; + } + public IXLWorksheet SetShowRowColHeaders() + { + ShowRowColHeaders = true; + return this; + } + public IXLWorksheet SetShowRowColHeaders(Boolean value) + { + ShowRowColHeaders = value; + return this; + } + public IXLWorksheet SetShowRuler() + { + ShowRuler = true; + return this; + } + public IXLWorksheet SetShowRuler(Boolean value) + { + ShowRuler = value; + return this; + } + public IXLWorksheet SetShowWhiteSpace() + { + ShowWhiteSpace = true; + return this; + } + public IXLWorksheet SetShowWhiteSpace(Boolean value) + { + ShowWhiteSpace = value; + return this; + } + public IXLWorksheet SetShowZeros() + { + ShowZeros = true; + return this; + } + public IXLWorksheet SetShowZeros(Boolean value) + { + ShowZeros = value; + return this; + } public IXLColor TabColor { get; set; } public IXLWorksheet SetTabColor(IXLColor color) @@ -846,24 +988,40 @@ } public Boolean TabSelected { get; set; } - Boolean tabActive; - public Boolean TabActive + public Boolean TabActive { - get { return tabActive; } - set + get { return m_tabActive; } + set { - if (value && !tabActive) + if (value && !m_tabActive) { - foreach (var ws in Worksheet.Workbook.Worksheets) + foreach (var ws in Worksheet.Workbook.WorksheetsInternal) { - (ws as XLWorksheet).tabActive = false; + ws.m_tabActive = false; } } - tabActive = value; + m_tabActive = value; } } - public IXLWorksheet SetTabSelected() { TabSelected = true; return this; } public IXLWorksheet SetTabSelected(Boolean value) { TabSelected = value; return this; } - public IXLWorksheet SetTabActive() { TabActive = true; return this; } public IXLWorksheet SetTabActive(Boolean value) { TabActive = value; return this; } - + public IXLWorksheet SetTabSelected() + { + TabSelected = true; + return this; + } + public IXLWorksheet SetTabSelected(Boolean value) + { + TabSelected = value; + return this; + } + public IXLWorksheet SetTabActive() + { + TabActive = true; + return this; + } + public IXLWorksheet SetTabActive(Boolean value) + { + TabActive = value; + return this; + } } -} +} \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheets.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheets.cs index 7249a7a..7bdbdc2 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheets.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheets.cs @@ -7,7 +7,7 @@ namespace ClosedXML.Excel { - internal class XLWorksheets : IXLWorksheets + internal class XLWorksheets : IXLWorksheets,IEnumerable { #region Constructor private readonly Dictionary m_worksheets = new Dictionary(); @@ -74,7 +74,7 @@ { var sheet = new XLWorksheet(sheetName, m_workbook); m_worksheets.Add(sheetName, sheet); - sheet.position = m_worksheets.Count; + sheet.m_position = m_worksheets.Count; return sheet; } @@ -110,11 +110,20 @@ } m_worksheets.RemoveAll(w => w.Position == position); - m_worksheets.Values.Where(w => w.Position > position).ForEach(w => (w).position -= 1); + m_worksheets.Values.Where(w => w.Position > position).ForEach(w => (w).m_position -= 1); } #endregion #region IEnumerable Members - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() + { + foreach (var w in m_worksheets.Values) + { + yield return w; + } + } + #endregion + #region IEnumerable Members + IEnumerator IEnumerable.GetEnumerator() { foreach (var w in m_worksheets.Values) { diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/..svnbridge/.svnbridge b/ClosedXML/ClosedXML/ClosedXML_Tests/..svnbridge/.svnbridge new file mode 100644 index 0000000..bdf168c --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/..svnbridge/.svnbridge @@ -0,0 +1,3 @@ +svn:ignorebin +obj + \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/XLRichStringTest.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/XLRichStringTest.cs index 26e644b..b46ab32 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/XLRichStringTest.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/XLRichStringTest.cs @@ -1,39 +1,28 @@ -using ClosedXML.Excel; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; using System.Linq; -using System; +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; namespace ClosedXML_Tests { - - - /// - ///This is a test class for XLRichStringTest and is intended - ///to contain all XLRichStringTest Unit Tests + /// + /// This is a test class for XLRichStringTest and is intended + /// to contain all XLRichStringTest Unit Tests /// - [TestClass()] + [TestClass] public class XLRichStringTest { - - private TestContext testContextInstance; - /// - ///Gets or sets the test context which provides - ///information about and functionality for the current test run. + /// + /// Gets or sets the test context which provides + /// information about and functionality for the current test run. /// public TestContext TestContext { - get - { - return testContextInstance; - } - set - { - testContextInstance = value; - } + get { return testContextInstance; } + set { testContextInstance = value; } } - #region Additional test attributes // //You can use the following additional attributes as you write your tests: @@ -63,17 +52,15 @@ //} // #endregion - - - /// - ///A test for ToString + /// + /// A test for ToString /// - [TestMethod()] + [TestMethod] public void ToStringTest() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); var richString = ws.Cell(1, 1).RichText; - + richString.AddText("Hello"); richString.AddText(" "); richString.AddText("World"); @@ -92,10 +79,10 @@ Assert.AreEqual(expected, actual); } - /// - ///A test for AddText + /// + /// A test for AddText /// - [TestMethod()] + [TestMethod] public void AddTextTest1() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -104,7 +91,7 @@ string text = "Hello"; richString.AddText(text).SetBold().SetFontColor(XLColor.Red); - + Assert.AreEqual(cell.GetString(), text); Assert.AreEqual(cell.RichText.First().Bold, true); Assert.AreEqual(cell.RichText.First().FontColor, XLColor.Red); @@ -115,7 +102,7 @@ Assert.AreEqual(richString.First().Text, text, "Item in collection is not the same as the one returned"); } - [TestMethod()] + [TestMethod] public void AddTextTest2() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -123,9 +110,9 @@ Int32 number = 123; cell.SetValue(number).Style - .Font.SetBold() - .Font.SetFontColor(XLColor.Red); - + .Font.SetBold() + .Font.SetFontColor(XLColor.Red); + string text = number.ToString(); Assert.AreEqual(cell.RichText.ToString(), text); @@ -138,7 +125,7 @@ Assert.AreEqual(cell.RichText.First().Text, text, "Item in collection is not the same as the one returned"); } - [TestMethod()] + [TestMethod] public void AddTextTest3() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -146,8 +133,8 @@ Int32 number = 123; cell.Value = number; cell.Style - .Font.SetBold() - .Font.SetFontColor(XLColor.Red); + .Font.SetBold() + .Font.SetFontColor(XLColor.Red); string text = number.ToString(); @@ -161,7 +148,7 @@ Assert.AreEqual(cell.RichText.First().Text, text, "Item in collection is not the same as the one returned"); } - [TestMethod()] + [TestMethod] public void HasRichTextTest1() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -193,19 +180,18 @@ cell.SetValue("123"); Assert.AreEqual(false, cell.HasRichText); - } - [TestMethod()] + [TestMethod] public void AccessRichTextTest1() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); var cell = ws.Cell(1, 1); cell.RichText.AddText("12"); cell.DataType = XLCellValues.Number; - + Assert.AreEqual(12.0, cell.GetDouble()); - + var richText = cell.RichText; Assert.AreEqual("12", richText.ToString()); @@ -219,13 +205,12 @@ cell.DataType = XLCellValues.Number; Assert.AreEqual(1234.0, cell.GetDouble()); - } - /// - ///A test for Characters + /// + /// A test for Characters /// - [TestMethod()] + [TestMethod] public void CharactersTest() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -240,10 +225,10 @@ Assert.Inconclusive("Verify the correctness of this test method."); } - /// - ///A test for Clear + /// + /// A test for Clear /// - [TestMethod()] + [TestMethod] public void ClearTest() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -252,7 +237,7 @@ richString.AddText("Hello"); richString.AddText(" "); richString.AddText("World!"); - + richString.Clear(); String expected = String.Empty; String actual = richString.ToString(); @@ -261,7 +246,7 @@ Assert.AreEqual(0, richString.Count); } - [TestMethod()] + [TestMethod] public void CountTest() { var ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -273,6 +258,5 @@ Assert.AreEqual(3, richString.Count); } - } -} +} \ No newline at end of file