ExTab - библиотека для табличных вычислений. Новости от 29.03.2012.
В этой публикации, как и обещал, я подробно расскажу о коде интеграции ExTab и табличного документа, а также о появившихся нововведениях и созревших планах на будущее.
Читал и не понял: а на фига эта компонента нужна? В чем ее фишка?
Сначала я доделаю ExTab до конца, а уж после буду наводить красоту.
Вообще-то если что-то сделал, то это и означает, что красота наведена. Верно и обратное: если красота не наведена, то ничего до конца и не доделано.
В общем, ExTab хоть и должен быть достаточно шустр для большинства случаев, но прошу не ждать чудес от крохотной (< 100 килобайт) программки, которую делает "на коленке" в свободное время программист-самоучка.
Вообще-то когда-то Б.Гейтс утверждал, что пользователю на всё про всё хватит за глаза 64 килобайта, а тут "недоделанная программа всего в 100 килобайт".
Идея проста. Берём некий компонент интерфейса, имеющий табличный вид, и делаем из него электронную таблицу - расчёты по формулам, удаление/вставка строк. Вот, в общем-то и всё.
А зачем такие сложности?
1) SetValueI(значение). Отправляет в ячейку целочисленное значение.
2) SetValueF(значение). Отправляет в ячейку число с плавающей запятой, например 3.14.
3) SetValueS(значение). Отправляет в ячейку строковое значение.
4) SetValueB(значение). Отправляет в ячейку значение типа "булево".
Есть тип VARIANT, реализованный в WinAPI. Переменная этого типа может содержать любой тип данных и описание типа данных, в ней содержащихся. И не надо было бы для каждого типа свою функцию описывать. И дополнительный функционал можно было бы реализовать, например вставку в таблицу COM объектов.
Насчёт небольшого размера dll-ки (< 100 килобайт): MS Visual Studio 2010 Redistributable Package несёт в себе .NET Framework 4. Отсюда - небольшой размер, ведь большинство функционала берут на себя библиотеки .NET Framework. И, в зависимости от того, какие библиотеки подгружаются, объём использованной памяти может в десятки раз быть больше, чем dll-ка весит.
В общем, MSDN в помощь, как говорится :)
(3) premier, всё верно... Но я уже немного всё переделал, теперь ввод строковой - одной функцией. Хотя, глядя на реализацию от dolter, подумываю бросить эту затею. В любом случае, хоть кодить научился лучше - уже неплохо.
(5) В любом случае, хоть кодить научился лучше - уже неплохо.
Даже в отрицательном опыте есть положительные стороны :)
Кстати, если вспомнить про технологии OLE Automatiom и DDE, можно использовать и навороченные табличные редакторы для создания отчетов, используя данные 1С:Предприятия! MS Excel, например...
И никаких компонент и обработок и даже в 1С-ку входить не надо :)
(6) premier, но навороты MS Excel нужны далеко не всегда, да и денюжек он стоит. Хотя, конечно, куда мне тягаться с такими монстрами, глупо даже сравнивать.
Я сейчас подумываю натравить свой компонент на таблицу значений, которая, как мне кажется, куда хуже подходит на роль электронной таблицы, чем табличный документ. Хотя вот думаю, а зачем это всё... Но закончу своё дело наверно чисто из упрямства :) пусть даже оно никому будет не нужно. Зато потом смогу, например, на питоне написать мини-электронную таблицу. Опять-таки бесполезно, но баранье упрямство не даёт остановиться.
(9) было бы полезно сделать компоненту, которая могла бы работать и в 7.7, вариант dolter-а - это только частный случай для 8-ки, привязанный к полю табличного документа. А вот универсальная штука, которую можно было бы привязать к любому визуальному объекту отображения по желанию программиста, вот это была бы вещь ;)
Рад, что вы поняли мою идею :)
COM-объект должен и в 7.7 работать. Правда тот, что здесь лежит, очень устарел. Есть новая версия. Если вам подобная штука пригодится - пишите, обсудим.
Наконец-то дошли руки до попробовать, но что-то у меня длл-ка отказалась регистрироваться в системе. Ошибка при вызове LoadLibrary, не найдена указанная процедура.
(13) wolfsoft, Этот проектик мне интересен и не в коммерческом ключе. Я нехило так прокачиваю свои навыки, занимаясь столь заковыристой задачей.
Извиняюсь, точно, проверил на виртуалке - и правда ошибка есть... Как я мог такое прошляпить? Дело в том, что я тут использую в процедуре отмены регистрации функцию, доступную только начиная с висты. В общем, я нашёл кое-как проект в закромах и перекомпилил, вырезав процедуру дерегистрации. Это значит, что отменить регистрацию библиотеки не получится, и останется немного мусора в реестре. Если это вас не испугает, вот отсюда можно скачать: rghost