|
Модераторы: Partizan, gambit |
|
Лен |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 73 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Работаю с Excel через Microsoft.Office.Interop.Excel.
Возникла проблема: при вызове
вываливается COMException с текстом "Нельзя установить свойство NumberFormat класса Range", InnerException - null. В то же время строка
отрабатывает корректно. Первый вариант (с ошибкой) должен устанавливать формат N2 для чисел, второй - N0. Строка "0.00" формируется так:
На компе с установленной английской виндой при любых региональных настройках (NumberDecimalSeparator может быть и ".", и ",") оба варианта кода отрабатывают без ошибок - точка или запятая правильно определяются, и всё идёт без проблем. Но на компе с установленной русской виндой (в региональных настройках разделитель - точка, NumberDecimalSeparator = ".", CurrencyDecimalSeparator = ",") установка формата "0.00" приводит к ошибке. У юзеров винды могут быть любые. Чем это лечится? Это сообщение отредактировал(а) Лен - 6.7.2009, 14:44 |
||||||
|
|||||||
shurokan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.7.2007 Репутация: нет Всего: нет |
а если поставить проверку и потом если нужно Replase(',','.')
|
|||
|
||||
PashaPash |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Лен, у экселя есть странная "особеннось" - все данные ему надо отдавать в English (United States). По ссылке подробно расписано: http://msdn.microsoft.com/en-us/library/ms268748.aspx.
|
|||
|
||||
Лен |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 73 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Разобрался. Результаты следующие:
1) Для shurokan: Replace и иже с ними делать нельзя, ибо если Excel уже бросил свой жирный COMException, то пока его не перезапустишь, он будет тебя игнорировать со всеми попытками что-то дописать в документ. (По специфике задачи - перезапускать нельзя). 2) Для PashaPash: несколькими строчками выше "на всякий пожарный" и так вызывается не один демон:
3) На деле выяснилось следующее: При отображении дробей (если в ячейку было передано decimal-значение) используется NumberDecimalSeparator, но при передаче Excel-ю в строке формата нужно использовать CurrencyDecimalSeparator! Т.е. изначально следовало писать так:
|
||||
|
|||||
PashaPash |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Лен, и работает после смены CurrencyDecimalSeparator в региональных настройках?
|
|||
|
||||
Лен |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 73 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Да, работает. Только если поменять оба - причём на всякие "левые" символы - тогда точно падает. Но если юзер такое сделает, это уже его глубокие проблемы с начальством, а не мои.
|
|||
|
||||
Jabmayday |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 31.10.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Nummorn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 8.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Twininach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Aviral20 |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.2.2023 Репутация: нет Всего: нет |
The solution is to use a combination of the NumberFormat property and the CurrencyDecimalSeparator property. The code should look like this:
|
||||||||||
|
|||||||||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |