Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Ошибка в формате ячейки (Excel) |
Автор: Лен 6.7.2009, 14:42 | ||||||
Работаю с Excel через Microsoft.Office.Interop.Excel. Возникла проблема: при вызове
вываливается COMException с текстом "Нельзя установить свойство NumberFormat класса Range", InnerException - null. В то же время строка
отрабатывает корректно. Первый вариант (с ошибкой) должен устанавливать формат N2 для чисел, второй - N0. Строка "0.00" формируется так:
На компе с установленной английской виндой при любых региональных настройках (NumberDecimalSeparator может быть и ".", и ",") оба варианта кода отрабатывают без ошибок - точка или запятая правильно определяются, и всё идёт без проблем. Но на компе с установленной русской виндой (в региональных настройках разделитель - точка, NumberDecimalSeparator = ".", CurrencyDecimalSeparator = ",") установка формата "0.00" приводит к ошибке. У юзеров винды могут быть любые. Чем это лечится? |
Автор: shurokan 6.7.2009, 15:31 |
а если поставить проверку и потом если нужно Replase(',','.') |
Автор: PashaPash 6.7.2009, 15:44 |
Лен, у экселя есть странная "особеннось" - все данные ему надо отдавать в English (United States). По ссылке подробно расписано: http://msdn.microsoft.com/en-us/library/ms268748.aspx. |
Автор: Лен 6.7.2009, 16:13 | ||||
Разобрался. Результаты следующие: 1) Для shurokan: Replace и иже с ними делать нельзя, ибо если Excel уже бросил свой жирный COMException, то пока его не перезапустишь, он будет тебя игнорировать со всеми попытками что-то дописать в документ. (По специфике задачи - перезапускать нельзя). 2) Для PashaPash: несколькими строчками выше "на всякий пожарный" и так вызывается не один демон:
3) На деле выяснилось следующее: При отображении дробей (если в ячейку было передано decimal-значение) используется NumberDecimalSeparator, но при передаче Excel-ю в строке формата нужно использовать CurrencyDecimalSeparator! Т.е. изначально следовало писать так:
|
Автор: PashaPash 6.7.2009, 16:49 |
Лен, и работает после смены CurrencyDecimalSeparator в региональных настройках? ![]() |
Автор: Лен 7.7.2009, 12:37 |
Да, работает. Только если поменять оба - причём на всякие "левые" символы - тогда точно падает. Но если юзер такое сделает, это уже его глубокие проблемы с начальством, а не мои. |
Автор: Jabmayday 31.10.2022, 03:59 |
Модератор: Сообщение скрыто. |
Автор: Nummorn 9.2.2023, 00:26 |
Модератор: Сообщение скрыто. |
Автор: Twininach 19.2.2023, 18:22 |
Модератор: Сообщение скрыто. |
Автор: Aviral20 24.3.2023, 11:51 | ||||||||||
The solution is to use a combination of the NumberFormat property and the CurrencyDecimalSeparator property. The code should look like this:
|