Нужно ли pyautocad работающее программное обеспечение AutoCad? - PullRequest
0 голосов
/ 25 марта 2019

Я получаю ошибку.когда я пытаюсь конвертировать DWG AutoCAD файл в Excel.Я использовал http://www.run8tech.com/script-to-update-text-and-mtext-in-autocad-from-excel.aspx Я получаю сообщение об ошибке

Это скрипт, который я запустил.Требуется ли автозапуск для использования этой библиотеки pyautocad

from __future__ import print_function
from os.path import join, dirname, abspath
from xlutils.copy import copy
import xlrd
import xlwt 
from pyautocad import Autocad, APoint
import os
import win32com.client
from pyautocad import Autocad, APoint
from pyautocad.contrib.tables import Table
#Create workbook
book = xlwt.Workbook()
ws = book.add_sheet("ExportedData")
book.save("Exported.xls")

#Open the workbook
xl_workbook = xlrd.open_workbook("Exported.xls")
sheet_names = xl_workbook.sheet_names()

xl_sheet = xl_workbook.sheet_by_name(sheet_names[0])

wb = copy(xl_workbook)
sheet = wb.get_sheet(0)

dwgfiles = filter(os.path.isfile, os.listdir( os.curdir ) )

cwd = os.path.abspath(os.path.curdir) #current working dir

for f in dwgfiles:
  print(f)
  if f.endswith(".dwg"):
      print("sdaasdas")
      """ open Document"""
      acad = Autocad()
      print(cwd)
      acad.doc.Open(cwd + "/" + f)

      print (acad.doc.Name)

      num_cols = xl_sheet.ncols   # Number of columns
      idx = 1

      acad = win32com.client.Dispatch("AutoCAD.Application")

      doc = acad.ActiveDocument   # Document object


      print ("MODEL SPACE")

      for entity in acad.ActiveDocument.ModelSpace:
          name = entity.EntityName
          print(name)
          if name == 'AcDbText':
              sheet.row(idx).write(0,entity.TextString) 
              sheet.row(idx).write(1,entity.ObjectID)
              sheet.row(idx).write(2,cwd + "/" + f)
              idx = idx + 1
          if name == 'AcDbBlockReference':
              HasAttributes = entity.HasAttributes
              if HasAttributes:
                #  print(entity.Name)
             #     print(entity.Layer)
              #    print(entity.ObjectID)
                  for attrib in entity.GetAttributes():

                      if attrib.TagString != "DATA":
                          sheet.row(idx).write(0,attrib.TextString ) 
                          sheet.row(idx).write(1,entity.ObjectID)
                          sheet.row(idx).write(2,cwd + "/" + f)
                          idx = idx + 1



      print ("PAPER SPACE")
      for entity in acad.ActiveDocument.PaperSpace:
          name = entity.EntityName
          if name == 'AcDbText':
              sheet.row(idx).write(0,entity.TextString) 
              sheet.row(idx).write(1,entity.ObjectID)
              sheet.row(idx).write(2,cwd + "/" + f)
              idx = idx + 1
          if name == 'AcDbBlockReference':
              HasAttributes = entity.HasAttributes
              if HasAttributes:
                #  print(entity.Name)
             #     print(entity.Layer)
              #    print(entity.ObjectID)
                  for attrib in entity.GetAttributes():

                      if attrib.TagString != "DATA":
                          sheet.row(idx).write(0,attrib.TextString ) 
                          sheet.row(idx).write(1,entity.ObjectID)
                          sheet.row(idx).write(2,cwd + "/" + f)


                      idx = idx + 1



      doc.Close(False)
      acad = None
wb.save("Exported.xls")

, когда я запускаю этот скрипт, я получаю сообщение:

File "test.py", line 36, in <module>
  acad.doc.Open(cwd + "/" + f)
File "C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\pyautocad\api.py", line 74, in doc
  return self.app.ActiveDocument
File "C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\pyautocad\api.py", line 63, in app
  self._app = comtypes.client.GetActiveObject('AutoCAD.Application', dynamic=True)
File "C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\comtypes\client\__init__.py", line 173, in GetActiveObject
  clsid = comtypes.GUID.from_progid(progid)
File "C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\comtypes\GUID.py", line 78, in from_progid
  _CLSIDFromProgID(str(progid), byref(inst))
File "_ctypes/callproc.c", line 933, in GetResult
OSError: [WinError -2147221005] Invalid class string

1 Ответ

1 голос
/ 25 марта 2019

Вы получите сообщение об ошибке:

OSError: [WinError -2147221005] Недопустимая строка класса

Если

  1. Вы не 'AutoCAD не установлен
  2. Если у вас установлена ​​версия, но вы пытаетесь создать неправильную версию, например: CreateObject("Autocad19.Application"), если у вас установлена ​​AutoCAD20.

В общем, библиотеки уходятномер версии, поэтому «Autocad.Application» будет работать нормально.

Вызов Autocad() запустит экземпляр AutoCAD, если он установлен.

...