pyautocad 需要 运行 autoCad 软件吗?

Is pyautocad needs a running autoCad Software?

我遇到了一个错误。当我尝试将 dwg AutoCAD 文件转换为 excel 时。 我用了 http://www.run8tech.com/script-to-update-text-and-mtext-in-autocad-from-excel.aspx 我收到一个错误

这是我的脚本运行。 autocad 运行ning 是使用这个库 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

你会得到错误:

OSError: [WinError -2147221005] Invalid class string

如果

  1. 您没有安装 AutoCAD
  2. 如果您安装了某个版本,但试图实例化错误的版本,例如:CreateObject("Autocad19.Application") 当您安装了 AutoCAD20 时。

一般来说,图书馆会省略版本号,所以 "Autocad.Application" 可以正常工作。

调用 Autocad() 将启动 AutoCAD 实例(如果已安装)。