diff --git a/ClosedXML/Excel/Cells/IXLCell.cs b/ClosedXML/Excel/Cells/IXLCell.cs index d685041..c8aef22 100644 --- a/ClosedXML/Excel/Cells/IXLCell.cs +++ b/ClosedXML/Excel/Cells/IXLCell.cs @@ -173,6 +173,13 @@ IXLRange InsertData(IEnumerable data); /// + /// 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# /// @@ -260,7 +267,7 @@ IXLCells InsertCellsBefore(int numberOfColumns); /// - /// Creates a named range out of this cell. + /// Creates a named range out of this cell. /// If the named range exists, it will add this range to that named range. /// The default scope for the named range is Workbook. /// @@ -268,7 +275,7 @@ IXLCell AddToNamed(String rangeName); /// - /// Creates a named range out of this cell. + /// Creates a named range out of this cell. /// If the named range exists, it will add this range to that named range. /// Name of the range. /// The scope for the named range. @@ -276,7 +283,7 @@ IXLCell AddToNamed(String rangeName, XLScope scope); /// - /// Creates a named range out of this cell. + /// Creates a named range out of this cell. /// If the named range exists, it will add this range to that named range. /// Name of the range. /// The scope for the named range. diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 488e2eb..e574c10 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -442,6 +442,8 @@ if (SetRangeColumns(value)) return; + if (SetDataTable(value)) return; + if (SetEnumerable(value)) return; if (SetRange(value)) return; @@ -812,6 +814,11 @@ return null; } + public IXLRange InsertData(DataTable dataTable) + { + return InsertData(dataTable.Rows); + } + public IXLStyle Style { get { return GetStyle(); } @@ -1617,6 +1624,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 d0ade19..69c11a8 100644 --- a/ClosedXML_Examples/Misc/InsertingData.cs +++ b/ClosedXML_Examples/Misc/InsertingData.cs @@ -37,7 +37,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(); @@ -52,14 +52,14 @@ 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); // Prepare the style for the titles var titlesStyle = wb.Style; 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/InsertingTables.cs b/ClosedXML_Examples/Misc/InsertingTables.cs index 50be801..fb6a3a0 100644 --- a/ClosedXML_Examples/Misc/InsertingTables.cs +++ b/ClosedXML_Examples/Misc/InsertingTables.cs @@ -38,7 +38,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(); @@ -53,7 +53,7 @@ ws.Cell(7, 6).Value = "From Query"; ws.Range(7, 6, 7, 8).Merge().AddToNamed("Titles"); - ws.Cell(8, 6).InsertTable(people.AsEnumerable()); + ws.Cell(8, 6).InsertTable(people); // Prepare the style for the titles var titlesStyle = wb.Style; 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 31e66f9..3ca287e 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 3c94664..04d7a8b 100644 --- a/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs +++ b/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs @@ -24,7 +24,7 @@ table.Rows.Add(new DateTime(2017, 1, 1).AddMonths(i)); } - ws.Cell("A1").InsertData(table.AsEnumerable()); + ws.Cell("A1").InsertData(table); Assert.AreEqual("yy-MM-dd", ws.Cell("A5").Style.DateFormat.Format); } diff --git a/ClosedXML_Tests/Excel/Tables/TablesTests.cs b/ClosedXML_Tests/Excel/Tables/TablesTests.cs index ddc7b84..1a3819b 100644 --- a/ClosedXML_Tests/Excel/Tables/TablesTests.cs +++ b/ClosedXML_Tests/Excel/Tables/TablesTests.cs @@ -122,7 +122,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;