.NET ClosedXML - 强制Excel工作表识别格式

问题描述 投票:0回答:1

(向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本身没有这样的命令(任何为什么不,稍微离题)这里可能没有,但值得检查。

.net excel date-formatting closedxml
1个回答
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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.