Python & ActiveX/COM Autocad

Автор Тема: Python & ActiveX/COM Autocad  (Прочитано 12687 раз)

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

Оффлайн Randum

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #45 : 09-06-2018, 11:54:40 »
Как я понял long был только в Python 2.
Ещё немного поэкспериментировал:

Код - Python [Выбрать]
  1. >>> tab.GetCellValue([1,1])
  2. TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
  3.  
  4. >>> tab.GetCellValue(1,1,1)
  5. TypeError: GetCellValue() takes from 1 to 3 positional arguments but 4 were given
  6.  
  7. >>> tab.GetCellValue('1','1')
  8. pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467263), None)
  9.  
  10. >>> win32api.FormatMessage(-2147467263)
  11. 'Не поддерживается\r\n'

Всё таки похоже на ошибку с типами данными как мне кажется.
Вот пример где явно тип данных не верный:

Код - Python [Выбрать]
  1. >>> tab.Move((0,0,0),(1,0,0))
  2. pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147024809), None)
  3.  
  4. >>> win32api.FormatMessage(-2147024809)
  5. 'Параметр задан неверно.\r\n'

Правда код ошибок разный :/

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

  • Administrator
  • *****
  • Сообщений: 776
  • Карма: 122
Re: Python & ActiveX/COM Autocad
« Ответ #46 : 09-06-2018, 11:56:37 »
А если попробовать tab.GetCellValue(1, 1) ?
Все, что сказано - личное мнение.

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

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

Оффлайн Randum

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #47 : 09-06-2018, 12:03:10 »
Пробовал уже Ответ #43

Код - Python [Выбрать]
  1. >>> tab.GetCellValue(1, 1)
  2. pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467263), None)

Попробовал ещё раз, на всякий случай.))

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

  • Administrator
  • *****
  • Сообщений: 8807
  • Карма: 1091
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #48 : 09-06-2018, 12:09:25 »
А
Код - Python [Выбрать]
  1. tab.GetCellValue(0, 0)
?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Randum

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #49 : 09-06-2018, 12:12:43 »
Код - Python [Выбрать]
  1. >>> tab.Rows
  2. 5
  3. >>> tab.Columns
  4. 3
  5. >>> tab.GetCellValue(0, 0)
  6. pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467263), None)

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Re: Python & ActiveX/COM Autocad
« Ответ #50 : 11-06-2018, 10:46:42 »
Можно Ваш Excel файлик?

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Re: Python & ActiveX/COM Autocad
« Ответ #51 : 11-06-2018, 12:40:16 »
Попробуйте так, еще можно воспользоваться библиотекой xlrd

Код - Python [Выбрать]
  1. import win32com.client
  2.  
  3. app = win32com.client.Dispatch("Excel.Application")
  4.  
  5. wb = app.Workbooks[0]
  6.  
  7. sh = wb.ActiveSheet
  8.  
  9. val = sh.Cells(1,1).value

Оффлайн Electric

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #52 : 11-06-2018, 14:53:03 »
Повтор сообщения.
« Последнее редактирование: 12-06-2018, 06:13:12 от Electric »

Оффлайн Electric

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #53 : 11-06-2018, 14:54:17 »
Пробовал уже Ответ #43

Код - Python [Выбрать]

    >>> tab.GetCellValue(1, 1)
    pywintypes.com_error: (-2147352567, 'Ошибка.', (0, None, None, None, 0, -2147467263), None)


Попробовал ещё раз, на всякий случай.))

Речь точно идет об автокаде? Если  да, то предложенный вариант obj.GetCellValue(1, 1)  у меня работает.  Ты  точно находишься в нужном пространстве модели/листа, таблица выполнена как  'AcDbTable'  и имеет достаточный диапазон столбцов/строк, в котором находится запрашиваемая ячейка?

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Re: Python & ActiveX/COM Autocad
« Ответ #54 : 11-06-2018, 15:08:21 »
так это таблица Автокада была?)) прошу прощения

Оффлайн Randum

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #55 : 12-06-2018, 17:23:43 »
Речь точно идет об автокаде? Если  да, то предложенный вариант obj.GetCellValue(1, 1)  у меня работает.

Спасибо, что проверили у себя.
Я действительно пытаюсь это реализовать не в AutoCAD-е, а в ZWCAD-е, он претендует на подобие первого но имеет много неприятных особенностей (отличий) и это по видимому ещё одно.
Попробую попытать тех. поддержку. ))

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

  • Administrator
  • *****
  • Сообщений: 8807
  • Карма: 1091
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #56 : 12-06-2018, 17:28:04 »
Я действительно пытаюсь это реализовать не в AutoCAD-е, а в ZWCAD-е
У нас на форуме категорически не обсуждаются "приложения - подобия"!!!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Randum

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #57 : 12-06-2018, 18:34:25 »
Хорошо, можете удалить тогда всё.  :-X

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

  • Administrator
  • *****
  • Сообщений: 8807
  • Карма: 1091
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #58 : 12-06-2018, 19:13:11 »
Хорошо, можете удалить тогда всё.  :-X
Я оставлю всю эту дискуссию. Она очень поучительна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Archigeo

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #59 : 24-06-2018, 18:46:56 »
Здравствуйте, коллеги!
Я только начинаю осваивать программирование на Python для AutoCAD.
Помогите, пожалуйста, со следующим вопросом.
Пытаюсь успользовать метод AutoCAD.Application.ActiveDocument.Utility.GetEntity().
Ни как не могу пользоваться им в IronPython.
Получилось только при использовании чистого питона с pywin32.
Правда, если пользователь ничего не выбирает, то всеравно получается ошибка.

Код - Python [Выбрать]
  1. >>> import win32com.client
  2. >>> app = win32com.client.Dispatch("AutoCAD.Application")
  3. >>> a = app.ActiveDocument.Utility.GetEntity(None, None, "Select object.")
  4.  
  5. Traceback (most recent call last):
  6.   File "<pyshell#4>", line 1, in <module>
  7.     a = app.ActiveDocument.Utility.GetEntity(None, None, "Select object.")
  8.   File "<COMObject <unknown>>", line 3, in GetEntity
  9.   File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
  10.     result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
  11. com_error: (-2147352567, '\xce\xf8\xe8\xe1\xea\xe0.', (0, None, None, None, 0, -2147352567), None)

Хотелось бы программировать на IronPython, поскольку им я пользуюсь для Revit.

В документации сказано, что GetEntity принимает три параметра: объект (как я понимаю, класса AcadObject, массив и строку.)

Как сформировать объект для передачи в метод???
При попытке создать объект "руками" появляется сообщение, что это не возможно т.к. класс AcadObject абстрактный класс. Что это такое я пока не понимаю. Может быть есть метод, который формирует такой объект?

Заранее благодарю за ответы,
Георгий