如果您的列可能会四处移动(我们知道最终用户往往变化无常),或者您的电子表格中散布着许多日期列,那么编写一些更通用的东西会很有帮助。这是我刚刚写的。它在我的 POCO 中找到所有 DateTime 类型的位置,并创建一个列表,然后用于设置列格式。请记住,数据表是从零开始的,而 Excel 不是。
ws.Cells.LoadFromDataTable(tbl, true);
var dPos = new List<int>();
for (var i = 0; i < tbl.Columns.Count; i++)
if (tbl.Columns[i].DataType.Name.Equals("DateTime"))
dPos.Add(i);
foreach (var pos in dPos)
{
ws.Column(pos+1).Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss AM/PM";
}
如果您正在处理多个数据表,您可能希望将其重构为一个函数。
这是一个免费赠品......我不能因为这段代码而受到赞扬。它需要一个 POCO 列表并将其转换为数据表。在我的“工具包”中多次使用它使我的生活更轻松。享受。
public DataTable ConvertToDataTable<T>(IList<T> data)
{
var properties =
TypeDescriptor.GetProperties(typeof(T));
var table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
var row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}