diff --git a/ClosedXML/Excel/Cells/IXLCell.cs b/ClosedXML/Excel/Cells/IXLCell.cs index 5a10fc3..fc3724e 100644 --- a/ClosedXML/Excel/Cells/IXLCell.cs +++ b/ClosedXML/Excel/Cells/IXLCell.cs @@ -32,7 +32,7 @@ /// Gets this cell's address, relative to the worksheet. /// The cell's address. - IXLAddress Address { get; } + IXLAddress Address { get; } /// /// Gets or sets the type of this cell's data. @@ -117,8 +117,6 @@ Boolean TryGetValue(out T value); - - Boolean HasHyperlink { get; } /// @@ -154,7 +152,6 @@ /// IXLRange AsRange(); - /// /// Gets or sets the cell's style. /// @@ -183,6 +180,13 @@ IXLRange InsertData(IEnumerable data, Boolean tranpose); /// + /// Inserts the data of a data table. + /// + /// The data table. + /// The range occupied by the inserted data + IXLRange InsertData(DataTable dataTable); + + /// /// Inserts the IEnumerable data elements as a table and returns it. /// The new table will receive a generic name: Table# /// @@ -218,7 +222,6 @@ /// IXLTable InsertTable(IEnumerable data, String tableName, Boolean createTable); - /// /// Inserts the DataTable data elements as a table and returns it. /// The new table will receive a generic name: Table# @@ -262,12 +265,15 @@ IXLDataValidation DataValidation { get; } IXLDataValidation NewDataValidation { get; } + IXLDataValidation SetDataValidation(); - IXLCells InsertCellsAbove(int numberOfRows); + IXLCells InsertCellsBelow(int numberOfRows); + IXLCells InsertCellsAfter(int numberOfColumns); + IXLCells InsertCellsBefore(int numberOfColumns); /// @@ -296,8 +302,11 @@ IXLCell AddToNamed(String rangeName, XLScope scope, String comment); IXLCell CopyFrom(IXLCell otherCell); + IXLCell CopyFrom(String otherCell); + IXLCell CopyTo(IXLCell target); + IXLCell CopyTo(String target); String ValueCached { get; } @@ -308,19 +317,29 @@ Boolean HasComment { get; } Boolean IsMerged(); + Boolean IsEmpty(); + Boolean IsEmpty(Boolean includeFormats); IXLCell CellAbove(); + IXLCell CellAbove(Int32 step); + IXLCell CellBelow(); + IXLCell CellBelow(Int32 step); + IXLCell CellLeft(); + IXLCell CellLeft(Int32 step); + IXLCell CellRight(); + IXLCell CellRight(Int32 step); IXLColumn WorksheetColumn(); + IXLRow WorksheetRow(); Boolean HasDataValidation { get; } @@ -330,6 +349,7 @@ void Select(); Boolean Active { get; set; } + IXLCell SetActive(Boolean value = true); Boolean HasFormula { get; } diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index fa5e7db..b0d8fa3 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -436,6 +436,8 @@ if (SetRangeColumns(value)) return; + if (SetDataTable(value)) return; + if (SetEnumerable(value)) return; if (SetRange(value)) return; @@ -694,8 +696,7 @@ if (createTable && this.Worksheet.Tables.Any(t => t.Contains(this))) throw new InvalidOperationException(String.Format("This cell '{0}' is already part of a table.", this.Address.ToString())); - if (data.Rows.Count > 0) return InsertTable(data.AsEnumerable(), tableName, createTable); - + if (data.Rows.Cast().Any()) return InsertTable(data.Rows.Cast(), tableName, createTable); var ro = Address.RowNumber; var co = Address.ColumnNumber; @@ -871,6 +872,11 @@ return null; } + public IXLRange InsertData(DataTable dataTable) + { + return InsertData(dataTable.Rows); + } + public IXLStyle Style { get { return GetStyle(); } @@ -1763,6 +1769,13 @@ return false; } + private bool SetDataTable(object o) + { + var dataTable = o as DataTable; + if (dataTable == null) return false; + return InsertData(dataTable) != null; + } + private bool SetEnumerable(object collectionObject) { // IXLRichText implements IEnumerable, but we don't want to handle this here. diff --git a/ClosedXML_Examples/Misc/AddingDataSet.cs b/ClosedXML_Examples/Misc/AddingDataSet.cs index 11c4b9c..a8d1e68 100644 --- a/ClosedXML_Examples/Misc/AddingDataSet.cs +++ b/ClosedXML_Examples/Misc/AddingDataSet.cs @@ -1,45 +1,11 @@ +using ClosedXML.Excel; using System; using System.Data; -using ClosedXML.Excel; namespace ClosedXML_Examples.Misc { public class AddingDataSet : IXLExample { - #region Variables - - // Public - - // Private - - - #endregion - - #region Properties - - // Public - - // Private - - // Override - - - #endregion - - #region Events - - // Public - - // Private - - // Override - - - #endregion - - #region Methods - - // Public public void Create(String filePath) { var wb = new XLWorkbook(); @@ -52,7 +18,6 @@ wb.SaveAs(filePath); } - // Private private DataSet GetDataSet() { var ds = new DataSet(); @@ -78,9 +43,5 @@ table.Rows.Add(100, "Dilantin", "Melanie", new DateTime(2000, 1, 5)); return table; } - // Override - - - #endregion } } diff --git a/ClosedXML_Examples/Misc/Collections.cs b/ClosedXML_Examples/Misc/Collections.cs index 39b416d..a9b9fe5 100644 --- a/ClosedXML_Examples/Misc/Collections.cs +++ b/ClosedXML_Examples/Misc/Collections.cs @@ -68,7 +68,7 @@ var dataTable = GetTable(); ws.Cell(6, 1).Value = "DataTable"; ws.Range(6, 1, 6, 4).Merge().AddToNamed("Titles"); - ws.Cell(7, 1).Value = dataTable.AsEnumerable(); + ws.Cell(7, 1).Value = dataTable; // From a query var list = new List(); @@ -83,8 +83,7 @@ ws.Cell(6, 6).Value = "Query"; ws.Range(6, 6, 6, 8).Merge().AddToNamed("Titles"); - ws.Cell(7, 6).Value = people.AsEnumerable(); // Very Important to call the AsEnumerable method - // otherwise it won't be copied. + ws.Cell(7, 6).Value = people; // Prepare the style for the titles @@ -92,7 +91,7 @@ titlesStyle.Font.Bold = true; titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; titlesStyle.Fill.BackgroundColor = XLColor.Cyan; - + // Format all titles in one shot wb.NamedRanges.NamedRange("Titles").Ranges.Style = titlesStyle; diff --git a/ClosedXML_Examples/Misc/InsertingData.cs b/ClosedXML_Examples/Misc/InsertingData.cs index 1d4a32b..626a9ec 100644 --- a/ClosedXML_Examples/Misc/InsertingData.cs +++ b/ClosedXML_Examples/Misc/InsertingData.cs @@ -1,8 +1,8 @@ +using ClosedXML.Excel; using System; using System.Collections.Generic; using System.Data; using System.Linq; -using ClosedXML.Excel; namespace ClosedXML_Examples.Misc { @@ -38,7 +38,7 @@ var dataTable = GetTable(); ws.Cell(6, 1).Value = "From DataTable"; ws.Range(6, 1, 6, 4).Merge().AddToNamed("Titles"); - ws.Cell(7, 1).InsertData(dataTable.AsEnumerable()); + ws.Cell(7, 1).InsertData(dataTable); // From a query var list = new List(); @@ -53,7 +53,7 @@ ws.Cell(6, 6).Value = "From Query"; ws.Range(6, 6, 6, 8).Merge().AddToNamed("Titles"); - ws.Cell(7, 6).InsertData(people.AsEnumerable()); + ws.Cell(7, 6).InsertData(people); ws.Cell(11, 6).Value = "From List"; ws.Range(11, 6, 11, 9).Merge().AddToNamed("Titles"); @@ -78,7 +78,7 @@ } } - class Person + private class Person { public String House { get; set; } public String Name { get; set; } @@ -89,7 +89,6 @@ // Private private DataTable GetTable() { - DataTable table = new DataTable(); table.Columns.Add("Dosage", typeof(int)); table.Columns.Add("Drug", typeof(string)); @@ -103,9 +102,9 @@ table.Rows.Add(100, "Dilantin", "Melanie", new DateTime(2000, 1, 5)); return table; } + // Override - - #endregion + #endregion Methods } } diff --git a/ClosedXML_Examples/Tables/InsertingTables.cs b/ClosedXML_Examples/Tables/InsertingTables.cs index 5c86a6e..176eed1 100644 --- a/ClosedXML_Examples/Tables/InsertingTables.cs +++ b/ClosedXML_Examples/Tables/InsertingTables.cs @@ -39,7 +39,7 @@ var dataTable = GetTable(); ws.Cell(7, 1).Value = "From DataTable"; ws.Range(7, 1, 7, 4).Merge().AddToNamed("Titles"); - ws.Cell(8, 1).InsertTable(dataTable.AsEnumerable()); + ws.Cell(8, 1).InsertTable(dataTable); // From a query var list = new List(); @@ -54,7 +54,7 @@ ws.Cell(7, 6).Value = "From Query"; ws.Range(7, 6, 7, 9).Merge().AddToNamed("Titles"); - ws.Cell(8, 6).InsertTable(people.AsEnumerable()); + ws.Cell(8, 6).InsertTable(people); ws.Cell(15, 6).Value = "From List"; ws.Range(15, 6, 15, 9).Merge().AddToNamed("Titles"); diff --git a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs index c630f5a..25dff84 100644 --- a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs +++ b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs @@ -29,7 +29,7 @@ listOfArr.Add(6); table.DataRange.InsertRowsBelow(listOfArr.Count - table.DataRange.RowCount()); - table.DataRange.FirstCell().InsertData(listOfArr.AsEnumerable()); + table.DataRange.FirstCell().InsertData(listOfArr); Assert.AreEqual("A1:A5", table.AutoFilter.Range.RangeAddress.ToStringRelative()); } @@ -73,4 +73,4 @@ Assert.That(!ws.AutoFilter.Enabled); } } -} \ No newline at end of file +} diff --git a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs index 2fb6166..cfa1951 100644 --- a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs +++ b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs @@ -59,7 +59,7 @@ IXLCell cell = ws.Cell("A1"); var doubleList = new List { 1.0 / 0.0 }; - cell.Value = doubleList.AsEnumerable(); + cell.Value = doubleList; Assert.AreNotEqual(XLCellValues.Number, cell.DataType); } @@ -70,7 +70,7 @@ IXLCell cell = ws.Cell("A1"); var doubleList = new List { 0.0 / 0.0 }; - cell.Value = doubleList.AsEnumerable(); + cell.Value = doubleList; Assert.AreNotEqual(XLCellValues.Number, cell.DataType); } diff --git a/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs b/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs index 326340b..87ab21a 100644 --- a/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs +++ b/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs @@ -2,7 +2,6 @@ using NUnit.Framework; using System; using System.Data; -using System.Linq; namespace ClosedXML_Tests.Excel { @@ -24,7 +23,7 @@ } ws.Column(1).Style.NumberFormat.Format = "yy-MM-dd"; - ws.Cell("A1").InsertData(table.AsEnumerable()); + ws.Cell("A1").InsertData(table); Assert.AreEqual("yy-MM-dd", ws.Cell("A5").Style.DateFormat.Format); ws.Row(1).Style.NumberFormat.Format = "yy-MM-dd"; diff --git a/ClosedXML_Tests/Excel/Tables/TablesTests.cs b/ClosedXML_Tests/Excel/Tables/TablesTests.cs index b3ff96e..adbe14b 100644 --- a/ClosedXML_Tests/Excel/Tables/TablesTests.cs +++ b/ClosedXML_Tests/Excel/Tables/TablesTests.cs @@ -133,7 +133,7 @@ DataRow dr = dt.NewRow(); dr[columnName] = "some text"; dt.Rows.Add(dr); - ws.Cell(1, 1).InsertTable(dt.AsEnumerable()); + ws.Cell(1, 1).InsertTable(dt); IXLTable table1 = ws.Table(0); string fieldName1 = table1.Field(0).Name; @@ -581,4 +581,4 @@ //TODO: Delete table (not underlying range) } -} \ No newline at end of file +}