Сохранение файлов AutoCAD (.dwg) с использованием Python

Я использую win32com для автоматизации некоторых простых задач в AutoCAD. В основном он работал достаточно хорошо, за исключением возможности сохранять файлы. Моя цель - открыть файл (шаблон), настроить его в зависимости от того, что необходимо, затем сохранить файл как .dwg в другой папке, оставив шаблон пустым и готовым к использованию в следующий раз.

Следующее в примере моего кода:

import win32com.client


acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
acad.Visible=True

doc = acad.Documents.Open("C:\\Template_folder\\Template.dwg")
doc.SaveAs("C:\\Output_folder\\Document1.dwg")

### Adjust dwg ###

doc.Save()

Загрузка файла шаблона работает хорошо, но при попытке сохранить файл (используя _ 4_ method Я получаю следующую ошибку:

    doc.SaveAs("C:\\Output_folder\\Document1.dwg")
  File "<COMObject Open>", line 3, in SaveAs
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'AutoCAD', 'Error saving the document', 'C:\\Program Files\\Autodesk\\AutoCAD 2019\\HELP\\OLE_ERR.CHM', -2145320861, -2145320861), None)

Будем очень признательны за любые советы или ресурсы!


person Jowizo    schedule 18.10.2019    source источник
comment
Я не совсем понимаю, почему, но добавив строку кода: doc = acad.ActiveDocument После вызова метода Open я могу использовать метод SaveAs   -  person Jowizo    schedule 23.10.2019


Ответы (1)


Если посмотреть на документацию по ActiveX API для AutoCAD, похоже, что когда вы вызываете Documents.Open(), он должен вернуть открытый документ и установить его как активный. Тем не менее, похоже, что на практике это не так. Решение вашей проблемы должно выглядеть примерно так:

import win32com.client

acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
acad.Visible=True

# Open a new document and set it as the active document
acad.Documents.Open("C:\\Template_folder\\Template.dwg")

# Set the active document before trying to use it
doc = acad.ActiveDocument

# Save the documet
doc.SaveAs("C:\\Output_folder\\Document1.dwg")

### Adjust dwg ###

doc.Save()

Вы можете найти документацию здесь

AutoCAD.Application

Документы приложения

Documents.Open ()

Application.ActiveDocument

person Adam    schedule 04.11.2019