【问题标题】:ClosedXML Worksheet from DataTable isn't following CultureDataTable 中的 ClosedXML 工作表不遵循文化
【发布时间】:2018-04-13 02:01:57
【问题描述】:

当我通过 DataTable 添加工作表时,我希望日期格式遵循应用程序的区域设置/文化,但它似乎是从计算机获取的。

string culture = "en-GB";
var newCulture = new CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture; //probably unnecessary?
CultureInfo.DefaultThreadCurrentCulture = newCulture;

// ... select myDateColumn, myIntCol, myString
workBook.AddWorksheet(myDataTableThatContainsQueryResults, tabName);

现在,您希望第一列 (myDateColumn) 使用 en-GB 区域设置的短日期格式进行格式化,该格式应该是 '31/10/2017',但它却以 '10/31/2017' 出现。

从 SQLDataAdapter 取回数据表后,我检查了数据表中的区域设置,它与嵌套日期格式一样正确。请注意,有多个查询,我不会提前知道日期在哪里。

感谢任何人可以提供的方向!

【问题讨论】:

    标签: c# excel datatable closedxml


    【解决方案1】:

    我没有评论的资格...

    通过查看 ClosedXML github repo 上的一些测试,库似乎希望在实例化工作簿之前设置文化。 (https://github.com/ClosedXML/ClosedXML/blob/c2d408b127844ea3d4a5f6b060c548c953b6bcf3/ClosedXML_Tests/Excel/CalcEngine/LookupTests.cs#L17)

        private XLWorkbook workbook;
    
        [OneTimeSetUp]
        public void Init()
        {
            // Make sure tests run on a deterministic culture
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            workbook = SetupWorkbook();
        }
    

    从你的问题中我不清楚你的代码是否属于这种情况。

    如果已经是这种情况,你应该在 Github 上打开一个 bug @ClosedXML。

    【讨论】:

    • 您是否尝试根据 SQLAdapter 结果为每个工作簿使用多种文化?不知道 ClosedXml 是否支持...(需要更多代码挖掘)
    • 不,我对整个工作簿使用单一文化。它是在我们实例化新工作簿之前设置的。
    • @ArisBerard 您找到解决问题的方法了吗?
    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2016-03-22
    相关资源
    最近更新 更多