pyautocad需要运行autoCad软件吗?

问题描述 投票:0回答:1

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

这是我跑的剧本。运行autocad是否需要使用此库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
python python-3.x autocad
1个回答
1
投票

你会得到错误:

OSError:[WinError -2147221005]无效的类字符串

如果

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

通常,库会保留版本号,因此“Autocad.Application”可以正常工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.