Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Написание библиотеки для Excel
 

Всем привет!

Нужно написать функцию со сложными вычислениями. И возникло несколько вопросов:

1. Что лучше, сохранить код как надстройка (*.xla) или в отдельную библиотеку (макрос не подойдет, т.к. функция будет использоваться в нескольких Excel-книгах на разных ПК)

2. Если это библиотека, то на каком языке лучше писать (подойдет ли C#)?

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

Спасибо!

Изменено: C_sanches - 2 Мар 2017 08:41:15
 
Цитата
C_sanches написал: Что лучше
вопрос из разряда "как провести лето". Кому-то нравится дикарем на море, кому-то All-inclusive подавай, а кто-то в Альпы на лыжах мечтает...
Ну а по поводу "будет использовать на разных ПК в разных книгах" - неясно, в чем проблема для макросов. У меня много таких и проблем нет. Может тут стоит пояснить точнее проблему следует?
Цитата
C_sanches написал: на каком языке лучше писать
какой лучше знаете
Цитата
C_sanches написал: будет ли приводить вызов функции в этой библиотеке к зависанию или крашу Excel'я?
зависит от того, как напишите код библиотеки. Напишите правильно - не будет приводить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: в чем проблема для макросов
Пользователи уже имеют Excel-файлы со всеми вычислениями, которые доступны Excel без сторонних библиотек и надстроек. Но им нужна некая функция, которой нет в Excel, поэтому и встал вопрос о написании библиотеки. Пользователь только подключит ее и сможет использовать. Макросы в их файлах не используются.
Цитата
The_Prist написал: какой лучше знаете
т.е. нет принципиальной разницы, на чем будет написана библиотека? В плане скорости работы и возможности добавить функцию, которая будет доступна потом в ячейках Excel'я
 
Если встроить код функции в файл, то эта функция будет доступна в файле, в чем проблема? Пользовательская функция.
Кому решение нужно - тот пример и рисует. (Это не призыв, это, - констатация).
 
Цитата
Пытливый написал: Если встроить код функции в файл
а каким образом его встроить в файл Excel?
 
Цитата
C_sanches написал:
нет принципиальной разницы, на чем будет написана библиотека? В плане скорости работы
Смотря какие вычисления должны производиться. Если громоздкие, то смотреть стоит в сторону C++ и создания XLL. Вычисления по скорости тогда дадут фору всем остальным вариантам.
Цитата
C_sanches написал:
Макросы в их файлах не используются
И что? Нельзя использовать? Т.к.
Цитата
C_sanches написал:
им нужна некая функция, которой нет в Excel
то её и можно написать как раз на VBA и использовать на листе: Что такое функция пользователя(UDF)?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
C_sanches, все зависит от ваших знаний, вот Пример использования библиотеки, написанной на C# для Excel (VBA) (автором этих строк). Используется для расчета больших чисел (длинная арифметика).
Но это когда критически важно считать быстро и наиболее эффективно использовать ресурсы ПК.
В вашем случае, возможно, можно просто обойтись надстройкой (*.xla) или (*.xlam)
Изменено: bedvit - 2 Мар 2017 18:31:29
«Бритва Оккама» или «Принцип Калашникова»?
 
Это проще и нужно только знания VBA.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Но это когда критически важно считать быстро и наиболее эффективно использовать ресурсы ПК.
именно это и важно в моей задаче. Только будут использоваться не большие числа, а большое количество небольших чисел.
UPD: Вопрос о выборе способа реализации функции отпал. Нужна именно библиотека. Желательно на C#.
bedvit, подскажите, пожалуйста,  какие нибудь статьи о создании библиотеки на C# для подключения ее потом в Excel'е. Или примеры такой реализации, буду очень благодарен!
 
Доброе время суток.
C_sanches, есть такой проект ExcelDNA, там достаточно много и примеров, есть и группа, обсуждающая вопросы использования. В частности bedvit создал свою библиотеку с использованием этого проекта.
Успехов.
 
C_sanches, почитайте, то что советует Андрей VG, ExcelDNA - в некоторых случаях очень полезная разработка, особенно если вы планируете писать на C# для Excel (VBA). Скачайте и установите Microsoft Visual Studio 2015 (бесплатная версия, с незначительными для ваших целей ограничениями).
Поделайте простые задания, к примеру, здесь. Там же можно создать тему, если вам потребуется помощь (это не реклама), может и я чем-то смогу помочь (когда будет время). Потом, если вы поймете, что это для вас интересно и вы готовы писать на C#, далее почитайте по COM, XLL, DLL. Признаться я не потомственный программист по C# :), думаю на указанно ресурсе и здесь, на планете, есть специалисты по С# намного прокаченней меня. Из литературы я пользовался гуглом - тем, библиотек, примеров на С# - множество.
К Примеру:
Создание первой надстройки VSTO для Excel
Как создать надстройку COM для Microsoft Office с помощью Visual C# .NET
Программирование приложений Office (C# и Visual Basic)
Руководство по созданию Excel add-in для начинающих на Хабрахабре.

Сразу вам скажу, если вы хорошо знаете VBA, но не знаете C#, написать надстройку .xlam вам будет значительно проще и быстрее. Но если уж вы решили... дерзайте :)
«Бритва Оккама» или «Принцип Калашникова»?
 
Причем для увеличения быстродействия, в моем случае, использовались библиотеки написанные на С с ассемблерными вставками (сторонние), здесь я пасс... Поэтому прирост производительности от обычного кода на С# в dll/xll и VBA в xlam возможно будет не столь высок, что бы компенсировать быстроту разработки в VBA, и преодоления порога вхождения в новый язык.
«Бритва Оккама» или «Принцип Калашникова»?
 
Андрей VG, bedvit, спасибо за ссылки и пояснения.
C# выбран, т.к. его знаю (что не сказать о VBA).

Буду пробовать реализовывать то, что задумал. Еще раз всем спасибо. Если будут вопросы, обязательно сюда обращусь.
Страницы: 1
Читают тему (гостей: 1)
Наверх