запись данные в Excel

Автор Тема: запись данные в Excel  (Прочитано 12230 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
запись данные в Excel
« : 25-03-2017, 15:31:49 »
Привет!
Не нашел информации по свойствам и методам работы с Excel из Autolisp.

Задача вроде бы простая:
 Создать файл .xlsx (без запуска приложения), и записывать данные в нужный лист и ячейку.
Кто подскажет есть ли готовые функции или перечень свойств и методов работы с эксель.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись данные в Excel
« Ответ #1 : 25-03-2017, 15:39:44 »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #2 : 25-03-2017, 15:53:22 »
спасибо, приступаю к изучению!

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #3 : 25-03-2017, 20:52:43 »
; ошибка: no function definition: VLAX-GET-OBJECT

не первый раз - в чем причина? Это из серии когда надо нечто (vl-load-com) подключать? только для VLAX

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #4 : 25-03-2017, 20:59:42 »
 ;D(vl-load-com) помогло -странно обычно всегда в коде присутствовал

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #5 : 27-03-2017, 10:28:33 »
Приветствую еще раз!
Код - Auto/Visual Lisp [Выбрать]
  1. (defun PutCell (StartCell$ Data@ / Cell$ Column# ExcelRange Row#)
  2.   (if (= (type Data@) 'STR)
  3.     (setq Data@ (list Data@))
  4.   )
  5.   (setq ExcelRange (vlax-get-property *ExcelApp% "Cells"))
  6.   (if (Cell-p StartCell$)
  7.     (setq Column# (car (ColumnRow StartCell$))
  8.           Row# (cadr (ColumnRow StartCell$))
  9.     );setq
  10.     (if (vl-catch-all-error-p
  11.           (setq Cell$ (vl-catch-all-apply 'vlax-get-property
  12.             (list (vlax-get-property *ExcelApp% "ActiveSheet") "Range" StartCell$))
  13.           );setq
  14.         );vl-catch-all-error-p
  15.         (alert (strcat "The cell ID \"" StartCell$ "\" is invalid."))
  16.         (setq Column# (vlax-get-property Cell$ "Column")
  17.               Row# (vlax-get-property Cell$ "Row")
  18.         );setq
  19.     );if
  20.   );if
  21.   (if (and Column# Row#)
  22.     (foreach Item Data@
  23.       (vlax-put-property ExcelRange "Item" Row# Column# (vl-princ-to-string Item))
  24.       (setq Column# (1+ Column#))
  25.     );foreach
  26.   );if
  27.   (princ)
  28. )
при команде:
Код - Auto/Visual Lisp [Выбрать]
  1. (GetExcel "C:\\Users\\Desktop\\1\\Filename.xlsx" "Sheet1" "L30")
  2. (PutCell "A1" "PART_NUMBER")
  3.  
ругается на строку:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ExcelRange (vlax-get-property *ExcelApp% "Cells"))
ошибка Automation. Отсутствует описание. В консоли.
А в командной строке:
; ошибка: неверный тип аргумента: VLA-OBJECT nil

что не так?
« Последнее редактирование: 27-03-2017, 11:46:50 от Александр Ривилис »

Отмечено как Решение tujn08 27-03-2017, 20:22:07

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #6 : 27-03-2017, 10:42:44 »
Разобрался:
1. OpenExcel
2. PutCell
3. CloseExcel

Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись данные в Excel
« Ответ #7 : 27-03-2017, 11:47:34 »
Напоминаю про правило форматирования кода на форуме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #8 : 27-03-2017, 16:58:23 »
Приносим свои извинения- привычка "DWG".

Как пользоваться разобрался. Но как создать файл эксель? Все функции написаны так, что файл уже должен существовать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись данные в Excel
« Ответ #9 : 27-03-2017, 19:56:47 »
Приносим свои извинения- привычка "DWG".

Как пользоваться разобрался. Но как создать файл эксель? Все функции написаны так, что файл уже должен существовать.
Вопрос конечно интересный. Боюсь, что тебе придётся иметь заготовку xlsx-файла и копировать его с нужным именем.
« Последнее редактирование: 27-03-2017, 21:02:22 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн tujn08Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Re: запись данные в Excel
« Ответ #10 : 27-03-2017, 20:21:13 »
Разобрался:

Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook")
  2.             "SaveAs" "путь +имя.xlsx" -4143 "" "" :vlax-false :vlax-false nil
  3.          )
Спасибо!
Единственная проблема в  .xls и .xlsx.
На открытие файла .xlsx ошибка в формате или расширении файла. Печально... Будем думать дальше.


А форматирование по инструкции у меня не получилось - вписал вручную...

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: запись данные в Excel
« Ответ #11 : 28-03-2017, 07:27:48 »
На VBA сообщения об ошибках более осмысленные, там удобнее тестировать COM
Думаю Excel вопросы задаёт разные - стоит сделать ручками и посмотреть, что за вопросы

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: запись данные в Excel
« Ответ #12 : 28-03-2017, 10:27:38 »
Без подробностей и без проверок. Вся информация взята из справки по VBA для Excel:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun test (filename / obj wbooks xls_wb xls_sheet xls_cells)
  2.   (if (not (setq obj (vlax-get-object "Excel.Application")))
  3.     (progn (setq obj (vlax-get-or-create-object "Excel.Application")) (vla-put-visible obj :vlax-false))
  4.     ) ;_ end of if
  5.   (if obj
  6.     (progn (setq wbooks    (vlax-get-property obj 'workbooks)
  7.                  xls_wb    (vlax-invoke-method (vlax-get-property obj 'wbooks) 'add)
  8.                  xls_sheet (vlax-get-property (vlax-get-property xls_wb 'worksheets) 'item 1)
  9.                  xls_cells (vlax-get-property xls_sheet 'cells)
  10.                  ) ;_ end of setq
  11.            ;; Заполнение данными элементов из xls_cells
  12.            (vlax-invoke-method
  13.              xls_wb
  14.              'saveas
  15.              filename
  16.              (cdr (assoc (atof (vlax-get-property obj 'version)) '((10.0 . 43) (11.0 . 43) (12.0 . 56))))
  17.              nil
  18.              nil
  19.              :vlax-false
  20.              :vlax-false
  21.              1
  22.              2
  23.              :vlax-true
  24.              ) ;_ end of vlax-invoke-method
  25.            (vlax-invoke-method xls_wb 'close)
  26.            (vlax-invoke-method xls_app 'quit)
  27.            ;; Очистка от мусора
  28.            (foreach item (list xls_cells xls_sheet xls_wb wbooks obj)
  29.              (vl-catch-all-apply (function (lambda () (vlax-release-object item) (setq item nil))))
  30.              ) ;_ end of foreach
  31.            ) ;_ end of progn
  32.     ) ;_ end of if
  33.   ) ;_ end of defun
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: запись данные в Excel
« Ответ #13 : 24-05-2018, 12:32:44 »
Подскажите пожалуйста, как задать ячейке формат, интересует числовой и точность отображения знаков?
Научился только создавать файл\лист и записывать в ячейку значение
Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-put-property Excell_Cells "Item" Row Column (vl-princ-to-string value))
Подозреваю вместо "Iten" нужно указать что-то типа "Format" и потом после адреса ячейки нужное значение какое-то, где бы это подглядеть?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: запись данные в Excel
« Ответ #14 : 24-05-2018, 13:13:45 »
Я бы поднял справку по VBA самого Excel'a и в нем смотрел. Фактически перевести из VBA в VLISP не так уж и сложно.
Могу выдрать кусок из большого проекта, но он будет касаться только установки значений для ячейки... Искать?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Alex.gomel

  • ADN OPEN
  • Сообщений: 12
  • Карма: 4
Re: запись данные в Excel
« Ответ #15 : 24-05-2018, 13:17:55 »
(vlax-put-property (vlax-get-property ccel 'Cells)  'NumberFormat "0,000")

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись данные в Excel
« Ответ #16 : 24-05-2018, 13:18:21 »
Что-то такое:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq Cel (vlax-variant-value
  2.            (vlax-get-property Excell_Cells "Item" Row Column)))
  3. (vlax-put-property Cel "NumberFormat" (vlax-make-variant "0,00" 8))
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: запись данные в Excel
« Ответ #17 : 24-05-2018, 14:14:55 »

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: запись данные в Excel
« Ответ #18 : 24-05-2018, 16:50:42 »
Всем спасибо большое!