c# - Есть ли способ получить доступ к стандартным строкам числового формата, например N02?

В сетке данных я отображаю числовые значения, отформатированные с использованием строки стандартного формата, в данном случае «N02». Когда я экспортирую эти данные в excel, я хотел бы отформатировать столбец excel так же. Есть ли способ оценить формат «N02» для текущей локали и получить фактическую строку формата?

Если нет, я думаю, мне придется попытаться восстановить его, используя свойства NumberNegativePattern, NumberGroupSizes, NumberGroupSeparator и NumberDecimalSeparator текущего NumberFormat, но мне действительно не нравятся мои шансы получить это правильно для моей локали/культуры .

Это то, что я хочу установить для моего вызова взаимодействия с Excel:

((Диапазон) excelSheet.Columns[columnLetter + ":" + columnLetter, Type.Missing]).NumberFormat = xxxxx;

Я бы хотел xxxxx как для «N», так и для «N02», я знаю, что могу использовать что-то вроде этого: «#,##0.00;-#,##0.00» для «N02». Но это сделало всю эту культуру специфический.


person madz    schedule 08.06.2012    source источник
comment
Какова цель конечного продукта? Имеет ли значение, содержит ли лист excel числа или строки в конце? Решает ли foreach (var cell in sheet) if (cell != null && IsNumeric(cell)) cell = String.Format("{0:N02}", cell); (псевдокод) это? Строковая обработка - единственный известный мне способ контролировать форматирование excel до такой степени ... но, с другой стороны, я не excel-com-pro: P   -  person flindeberg    schedule 08.06.2012
comment
Я совершенно уверен, что когда вы устанавливаете NumberFormat в Excel программно, вы всегда используете инвариантный формат, независимо от языка и региональных параметров. Строки с учетом языка и региональных параметров используются только при настройке NumberFormat через пользовательский интерфейс Excel.   -  person Joe    schedule 08.06.2012
comment
Спасибо, ребята, мне нужно, чтобы в excel оставалось отформатированное число, а не строка, поэтому я буду использовать подход с инвариантным форматом.   -  person madz    schedule 12.06.2012


Ответы (1)


Проблема здесь двоякая; во-первых, взаимодействие с Excel предоставляет лишь очень ограниченный набор функций, когда речь идет о работе со стилями чисел. Во-вторых, сам Excel уделяет мало внимания форматированию, зависящему от языка и региональных параметров.

Например, в стандарте Open XML для Excel все встроенные стили числового формата жестко закодированы (см. стандартный документ ECMA, стр. 2128). Хотя в зависимости от языкового стандарта пользователя используются разные стили, Excel не обращает внимания на какие-либо переопределения в региональных параметрах пользователя, как это делают функции глобализации .NET Framework. Даже если вы объедините строки стандартного числового формата с их эквивалентами Excel (по регионам), формат все равно может отличаться из-за региональных настроек в Windows.

Как упомянул Флиндеберг в своем комментарии, форматирование значений ячеек в виде текста — это единственный способ убедиться, что ваши числа отформатированы в .NET так, как они будут отображаться в Excel.

Из-за ограничений, с которыми вы работаете, я бы предложил ориентироваться на инвариантную культуру при создании электронных таблиц вместо того, чтобы пытаться создавать специализации для каждой культуры. Придерживаясь правил инвариантного языка и региональных параметров, вы можете довольно легко написать алгоритм для преобразования строк стандартного числового формата в их расширенную форму для использования в Excel.

person Bradley Smith    schedule 08.06.2012
comment
Спасибо за отличный ответ, Брэдли - нет ничего простого, когда дело доходит до такого форматирования. Тогда я просто воспользуюсь подходом инвариантной культуры. - person madz; 12.06.2012