2017-10-31 17 views
0

DataTableでワークシートを追加すると、日付形式がアプリケーションのロケール/カルチャに従うことが予想されますが、コンピュータから取得するようです。DataTableのClosedXMLワークシートがCultureに従っていません

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); 

さて、あなたは'31/10/2017'をする必要がありますen-GBロケールの短い日付形式を使用してフォーマットする最初の列(myDateColumn)を期待するが、それは代わりに'10/31/2017'として出てきています。

DataTableのロケールをSQLDataAdapterから取得したら、それをチェックしたところ、ネストされた日付フォーマットと同じです。複数のクエリがあることに注意してください。日付があらかじめわかっている場所はわかりません。

誰かが提供できる任意の方向を気に入ってください! ClosedXMLのgithubのレポ上のいくつかのテストを見ることによって、私がコメントするの評判を持っていない

答えて

0

...

は、図書館が文化ブックをインスタンス化する前に設定されることを想定しているようです。 (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の@ ClosedXMLバグを開く必要があります。

+0

SQLAdapterの結果に基づいてワークブックごとに複数のカルチャを使用しようとしていますか? ClosedXmlがそれをサポートするかどうかは分かりません...(もっとコードを掘る必要があります) –

+0

いいえ、ワークブック全体で単一のカルチャを使用しています。新しいブックをインスタンス化する前に設定されています。 –

+0

@ArisBerardあなたの問題の回避策を見つけることができましたか? –

関連する問題