2012-06-08 59 views
0

在數據網格中,我顯示使用標準格式字符串格式化的數值,在這種情況下爲「N02」。當我將這些數據導出爲ex​​cel時,我想將excel列的格式設置爲相同。有沒有辦法評估當前語言環境的「N02」格式並獲取實際的格式字符串?c# - 有沒有什麼方法可以訪問像「N02」這樣的標準數字格式字符串?

如果不是,我想我必須嘗試使用​​當前的NumberFormat的NumberNegativePattern,NumberGroupSizes,NumberGroupSeparator和NumberDecimalSeparator屬性來重構它,但我真的不喜歡我獲得該權利的機會我的區域/文化。

這是我想爲我的Excel互操作調用設置什麼:

((範圍)excelSheet.Columns [columnLetter + 「:」 + columnLetter,Type.Missing])。NumberFormat的= XXXXX;

我希望爲XXXXX既「N」和「N02」,我知道我可以使用這樣的: 「#,## 0.00; - #,## 0.00」爲「N02」 但這使整個文化具體化。

+0

什麼是最終產品的目的是什麼?如果excel表單最後包含數字或字符串,這有什麼關係?如果(cell!= null && IsNumeric(cell))cell = String.Format(「{0:N02}」,cell);'(僞代碼)解決它嗎?字串是我所知道的控制Excel的格式到那種程度的唯一途徑。但在另一方面我不是一個Excel-COM-PRO:P – flindeberg

+0

我相當肯定的是,當你設置Excel的NumberFormat的編程,你無論文化如何,始終使用不變的格式。只有在通過Excel UI設置NumberFormat時才能使用支持文化的字符串。 – Joe

+0

謝謝你們 - 我需要它保持在Excel格式的數字,而不是一個字符串,因此將與不變格式的方法去 – madz

回答

0

這裏的問題是雙重的;首先,Excel interop在處理數字樣式時只公開了非常有限的一組功能。其次,Excel本身很少關注文化特定的格式。

例如,在Excel的Open XML標準中,所有內置數字格式樣式都是硬編碼的(請參閱the ECMA standard document,第2128頁)。雖然根據用戶的區域設置使用了不同的樣式,但Excel不關注用戶的區域設置中的任何重寫,例如.NET Framework的全球化功能。即使您要將標準數字格式字符串與它們的Excel等效(按地區)結合,由於Windows中的區域設置,格式仍可能有所不同。

由於flindeberg在他們的評論中提及,格式化單元格值作爲文本就是真正確保你的號碼在.NET格式化的方式是如何將出現在Excel中的唯一途徑。

由於你正在使用的侷限性,我建議產生的電子表格時,而不是試圖爲每個文化特針對不變的文化。通過堅持不變文化的規則,您可以很容易地編寫算法將標準數字格式字符串轉換爲其擴展形式,以便與Excel一起使用。

+0

感謝您的出色答卷布拉德利 - 沒有什麼是簡單的,當涉及到這種格式的是它。然後,我將採用不變的文化方法。 – madz

相關問題