Нужно написать функцию со сложными вычислениями. И возникло несколько вопросов:
1. Что лучше, сохранить код как надстройка (*.xla) или в отдельную библиотеку (макрос не подойдет, т.к. функция будет использоваться в нескольких Excel-книгах на разных ПК)
2. Если это библиотека, то на каком языке лучше писать (подойдет ли C#)?
3. Вычисления будут сложными и их будет очень много. Используя библиотеку, будет ли приводить вызов функции в этой библиотеке к зависанию или крашу Excel'я?
вопрос из разряда "как провести лето". Кому-то нравится дикарем на море, кому-то All-inclusive подавай, а кто-то в Альпы на лыжах мечтает... Ну а по поводу "будет использовать на разных ПК в разных книгах" - неясно, в чем проблема для макросов. У меня много таких и проблем нет. Может тут стоит пояснить точнее проблему следует?
Пользователи уже имеют Excel-файлы со всеми вычислениями, которые доступны Excel без сторонних библиотек и надстроек. Но им нужна некая функция, которой нет в Excel, поэтому и встал вопрос о написании библиотеки. Пользователь только подключит ее и сможет использовать. Макросы в их файлах не используются.
т.е. нет принципиальной разницы, на чем будет написана библиотека? В плане скорости работы и возможности добавить функцию, которая будет доступна потом в ячейках Excel'я
C_sanches написал: нет принципиальной разницы, на чем будет написана библиотека? В плане скорости работы
Смотря какие вычисления должны производиться. Если громоздкие, то смотреть стоит в сторону C++ и создания XLL. Вычисления по скорости тогда дадут фору всем остальным вариантам.
Цитата
C_sanches написал: Макросы в их файлах не используются
И что? Нельзя использовать? Т.к.
Цитата
C_sanches написал: им нужна некая функция, которой нет в Excel
C_sanches, все зависит от ваших знаний, вот Пример использования библиотеки, написанной на C# для Excel (VBA) (автором этих строк). Используется для расчета больших чисел (длинная арифметика). Но это когда критически важно считать быстро и наиболее эффективно использовать ресурсы ПК. В вашем случае, возможно, можно просто обойтись надстройкой (*.xla) или (*.xlam)
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, и преодоления порога вхождения в новый язык.