|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP. Обращение к Excel'y и смена адреса ячейки
Moderator
LISP, C# (ACAD 200[9,12,13,14])
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 40,409
|
||
Просмотров: 14000
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Из текстового файла я читать и так могу, и макрос писать не надо - Excel и сам прекрасно экспорт делает. Хочется сделать так, чтоб не надо было дополнительных телодвижений делать - ни в каде, ни в Excel'e.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
За ссылку спасибо, тут на autocad.ru Кипятильник подсказал, что можно использовать UsedRange объекта Worksheet. А для него уже можно получить и адрес последней ячейки
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Да, но по моему то, что я показал одно и то же
Код:
Цитата:
Последний раз редактировалось VVA, 16.07.2008 в 10:16. |
|||
![]() |
|
||||
Извиняюсь, не хорошо получилось...
Прочитав эту ветку, сразу написал программу читающую экселевский файл в лисп - список, причем без участия экселя, т.е. на компьютере может не стоять оффиса! Далее все скинул Алексею, на прямую, в аську, а про эту тему забыл... ![]() Исправляюсь и выкладываю код... Код:
|
||||
![]() |
|
||||
проектирование Регистрация: 30.10.2005
москва
Сообщений: 216
|
Кто подскажет почему lisp не "работает"
Пытаюсь прочитать данные из Excel и выдает "; error: ActiveX Server returned the error: unknown name: workbooks" (defun ex10_set_connect (vis /) (vl-load-com) (setq g_oex (vlax-get-or-create-object "Excel.Application")) (if (null g_oex) (progn (alert "Невозможно запустить Exel") (exit) ) );if (if vis (vlax-put-property g_oex "visible" :vlax-true)) ) .......... (setq g_wkbs (vlax-get-property g_oex "workbooks")) .......... |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Ты неправ, у Полещука все работает как часы,
только нужно правильно вызывать функцию Например в невидимом режиме Экселя: Код:
Код:
для функции ex10_set_connect Fatty ~'J'~ |
|||
![]() |
|
||||
Администрирование ПО Регистрация: 09.06.2006
Сообщений: 1
|
В Программе представленной Елпановым Евгением предлагается
сперва создавать в памяти объект ADO.Recordset, перегонять в него весь лист Excel а затем его читать. Но если на листе всего 100 ячеек с нужными данными то это излишний расход памяти и ресурсов процессора. предлагаю следующий способ. В AutoLisp из активной ячейки листа в которой находимся в текущий момент надо считывать свойство "Offset <на_строк> <на_колонок>" Смысл значения параметров для Offset узнать можно из справочной системы Excel в разделе "Сведения для программирования" - "Microsoft Excel Visual Basic Reference" "Properties" - "Offset Property" Это свойство возвращает указатель на другую ячейку (в другой строке и колонке в зависимости от указанных параметров), и выполнять для него метод Select или Activate кому что нравиться Так можно переходить от ячейки к ячейке в листе. На вопрос VVA что означает параметры 2 3 1 для свойства Address. Ответ также можно найти из справочной системы Excel в разделе "Сведения для программирования" - "Microsoft Excel Visual Basic Reference" "Properties" - "Addres Property" там для VBA синтаксис команды для чтения свойства такой: expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) правда первые два параметра имеют логический тип данных, но здесь наверное работает особенность Autolisp для логического типа где все значения отличные от nil считается как True |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Метод создания объекта Excel'a на порядок более ресурсоемок. Во-первых, Excel надо иметь на машине. Во-вторых, даже после (vlax-release-object) процесс Excel'a остается висеть в памяти. И его оттуда можно выкинуть только руками - сама винда его не трогает. Так что после 4-5 обращений в памяти будет болтаться 4-5 Excel'ей, которые никому не нужны. Это проверено.
В-третьих. Для выполнения предложенной логики Excel должен быть запущен именно из-под AutoCAD'a, потому как получить хэндл окна из-под лиспа без танцев с бубнами вряд ли возможно. Вот это уже на уровне предположений, потому как подобными вещами не занимался. --- Добавлено. Да, объекты, которые не nil, считаются как true, но, например, при обращении к методам сторонних объектов надо передавать не nil | t, а :vlax-false | :vlax-true. Тоже учитывать потребуется...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Косвенно коснулись в другой ветке этой темы. Так, для исторической справедливости. Развитие кода Евгения Елпанова получило здесь
Data reading from Microsoft Excel not using Excel LISP.LIB Чтение Excel файлов, используя ADO
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 16.07.2008 в 16:41. Причина: Добавлена ссылка на caduser |
|||
![]() |
|
||||
Цитата:
![]()
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Ссылка не битая, просто на этом форуме необходима регистрация. Даже для просмотра постов
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Цитата:
как вам удалось добиться ошибки - сейчас попробовал - ошибка не повторилась... ps. пробовал последнюю версию, которая есть на caduser.ru и theswamp.org... |
||||
![]() |
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Цитата:
Всё таки больше 2-х лет прошло с момента написания того поста - может ты за это время что-то придумал?.. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Если честно, я не стал связываться с процессом Excel'a. Использую другие пути.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |