Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2017, 09:39   #1
FizeG
 
Регистрация: 12.09.2017
Сообщений: 3
По умолчанию C# VSTO для Excel

Суть: пишется надстройка для Excel с некоторым пользовательским функционалом.
Есть задача программно записать формулу расчета в определенный набор ячеек листа. Расчет ведется с применением именованных диапазонов с того же листа. Например, есть столбец данных, поименованный как "_Имя_", требуется рядом с ним образовать столбец (объект Range), у которого формула будет _Имя_*2. Сама формула, образованная по всем правилам Excel, берется из другого места, например, из текстового файла.
Соответственно, все сводится вкратце к следующему коду:
[CSHARP]
string fomula = ... //код получения строки формулы
Range MyRange = SheetName.Range[...]; //в фигурных скобках указания о размере ренджа
MyRange.Formula = formula;
[/CSHARP]

Проблема: Работает только тогда, когда в строке формулы не встречаются имена функций Excel, написанные по-русски. Например, если формула "=_Имя_*2" или "=SIN(_Имя_)", то все отлично работает, а если "=КОРЕНЬ(_Имя_)", то не работает, во всех ячейках диапазона появляется ошибка "ИМЯ". И следующий прикол: если кликнуть по строке формулы для ечейки с такой ошибкой, то все пересчитается и будет нормально показываться результат.

Пробовал программно включать и выключать автоматическое вычисление формул, принудительно пересчитывать все формулы книги, листов, всего экселя. Не помогает. Пока не кликнешь - не посчитает формулу с русскими функциями. Думается, что проблема как-то связана с кодировкой, в которой передается русский текст в строку формул, но не знаю, куда в этом плане копать и как фиксить. Прошу совета.
Версия Office: 2013.
FizeG вне форума Ответить с цитированием
Старый 12.09.2017, 11:36   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

передавайте не русские формулы а те с которыми работает Ексель
=Корень(4) = =SQRT(4)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 12.09.2017, 11:55   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 735
По умолчанию

А зачем C# использовать? Неужели нету VBA, да и в сам Excel можно просто формулы вписать да и все.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 12.09.2017, 13:50   #4
FizeG
 
Регистрация: 12.09.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
передавайте не русские формулы а те с которыми работает Ексель
=Корень(4) = =SQRT(4)
Юзвери привыкли к русским функциям, поэтому задача ставилась к в таком виде. Я допускаю, что можно написать метод, который будет ставить в соответствие каждой русской функции ее латинский аналог, но подозреваю, что и моя нынешняя проблема может решиться несколько элегантнее.


Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
А зачем C# использовать? Неужели нету VBA
Элементарно.
1)Я несколько лет работаю с C# и не в пример хуже знаю VBA, поэтому не горю желанием изучать его более глубоко, тем более, ради одного проекта.
2)Мне просто не нравится VBA.
3)Подозреваю, что даже его использование не решит проблемы, ибо суть моей проблемы кроется, вероятно, в нюансах объектной модели Excel, инвариантной к выбору языка.

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
да и в сам Excel можно просто формулы вписать да и все.
Простите, но но это уже софистика. Можно вообще ничего не автоматизировать.) Однако у меня есть конкретная задача, которую я должен выполнить.
FizeG вне форума Ответить с цитированием
Старый 12.09.2017, 14:20   #5
FizeG
 
Регистрация: 12.09.2017
Сообщений: 3
По умолчанию

Решилось. Нужно использовать свойство FormulaLocal для ввода формул с региональными особенностями.
Ссылко, вдруг кому пригодится.
FizeG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для выборки из таблицы Excel, для разговоров свыше 10 минут Otellka Microsoft Office Excel 6 15.03.2016 18:16
Программа для автозаполнения документов для Windows (не через Word и Excel) Ekvental Софт 7 07.04.2015 16:43
Запрет режима преобразования файлов excel 2007 для excel 2003 ольгаг Microsoft Office Excel 4 28.03.2014 12:20
Установка VSTO надстройки на клиентский ПК Vitek_DeadlyHunter Общие вопросы .NET 0 08.11.2013 21:55
Excel - Создать в Excel таблицу для расчета расхода материала для покраски пола комнаты Дашкаа Помощь студентам 2 20.06.2011 15:44