2015-02-13 2 views
1

Когда я попытался настроить формат чисел для диапазона ячеек в файле excel, я обнаружил довольно странное поведение. Есть два примера кода:Interop.Excel.Range vs dynamic

// First example uses the Microsoft.Office.Interop.Excel.Range interface. 
void SetupFormat(Range range) 
{ 
    range.NumberFormat = "0" + CultureInfo.InstalledUICulture.NumberFormat.CurrencyDecimalSeparator + "00%"; 
} 

// Second one uses a dynamic. 
void SetupFormat(dynamic range) 
{ 
    range.NumberFormat = "0" + CultureInfo.InstalledUICulture.NumberFormat.CurrencyDecimalSeparator + "00%"; 
} 

Когда я использую первый метод я получаю номера, как 012%, когда я использую второй метод я получаю номера, как 12,34% (как и ожидалось). Первый метод работает нормально, когда я использую период в формате чисел. Кто-нибудь знает, почему у этих методов другое поведение?

+0

Похоже, что проблема локали (разделитель десятичной). – pnuts

ответ

0

Кажется, что динамический вызов NumberFormat депеши в NumberFormatLocal собственности. Все данные, переданные в excel API, должны кодироваться в excel-инвариантной культуре (locale 1033, explanation). Таким образом, вы должны передавать все форматы в локали 1033 и данные в такой локали. Если вы замените статический NumberFormat с NumberFormatLocal все будет в порядке.