(将附加编辑重新发布到this question here)
我正在通过添加数据集来构建Excel工作簿,然后将格式添加到特定列。代码示例:
var wb = new XLWorkbook();
wb.Worksheets.Add(ds);
foreach (IXLWorksheet ws in wb.Worksheets)
{
if (value == 1)
{
ws.Column(16).Style.DateFormat.Format = "yyyy-MM-dd";
ws.Column(17).Style.DateFormat.Format = "yyyy-MM-dd";
}
else
{ }
}
return wb;
当我查看最终文档时,日期仍显示为详细信息 - 12/7/2017 12:00:00 AM - 但文档格式为IS。如果我执行手册“点击进入单元格并退出”,则格式化更新,就像将文本添加到列中一样。
当然,我不想这样做,我希望格式化能够立即采用。
我认为问题在于我首先添加数据并将其格式化,就像常规工作表一样。但是那里有一个命令来刷新/应用/你有什么格式?我担心,因为在Excel中没有这样的命令(任何为什么不能,稍微离题)这里可能没有,但是值得检查。
答案 0 :(得分:0)
如GitHub所述,我无法用您的代码复制您的问题。
这是一个在我的机器上完美运行的代码示例:
using ClosedXML.Excel;
using System;
using System.Data;
using System.Linq;
public class Program
{
public static void Main()
{
using (var wb = new XLWorkbook())
{
var dataSet = GetDataSet();
// Add all DataTables in the DataSet as a worksheets
wb.Worksheets.Add(dataSet);
var ws = wb.Worksheets.First();
ws.Column(4).Style.DateFormat.Format = "d MMMM yyyy";
wb.SaveAs("outputfile.xlsx");
}
}
private static DataSet GetDataSet()
{
var ds = new DataSet();
ds.Tables.Add(GetTable("Patients"));
ds.Tables.Add(GetTable("Employees"));
ds.Tables.Add(GetTable("Information"));
return ds;
}
private static DataTable GetTable(String tableName)
{
DataTable table = new DataTable();
table.TableName = tableName;
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(25, "Indocin", "David", new DateTime(2000, 1, 1));
table.Rows.Add(50, "Enebrel", "Sam", new DateTime(2000, 1, 2));
table.Rows.Add(10, "Hydralazine", "Christoff", new DateTime(2000, 1, 3));
table.Rows.Add(21, "Combivent", "Janet", new DateTime(2000, 1, 4));
table.Rows.Add(100, "Dilantin", "Melanie", new DateTime(2000, 1, 5));
return table;
}
}