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
+}