Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.09.2017, 10:39   #1
FizeG
Новичок
 
Регистрация: 12.09.2017
Сообщений: 3
Репутация: 10
По умолчанию 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, 12:36   #2
Aleksandr H.
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 1,904
Репутация: 710

skype: aleksandr.gryb
По умолчанию

передавайте не русские формулы а те с которыми работает Ексель
=Корень(4) = =SQRT(4)
__________________
Mailto: media.project@ukr.net
"спасибо" принимаются на webmoney: R676842461689, Z243088649038, U164738001305; AdvancedCash: U853633661253, E181662999107; ПриватБанк.UA
Aleksandr H. вне форума   Ответить с цитированием
Старый 12.09.2017, 12:55   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 287
Репутация: 59
По умолчанию

А зачем C# использовать? Неужели нету VBA, да и в сам Excel можно просто формулы вписать да и все.
Cuprum5 вне форума   Ответить с цитированием
Старый 12.09.2017, 14:50   #4
FizeG
Новичок
 
Регистрация: 12.09.2017
Сообщений: 3
Репутация: 10
По умолчанию

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


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

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

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для выборки из таблицы Excel, для разговоров свыше 10 минут Otellka Microsoft Office Excel 6 15.03.2016 19:16
Программа для автозаполнения документов для Windows (не через Word и Excel) Ekvental Софт 7 07.04.2015 17: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




16:47.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru