【问题标题】:Is pyautocad needs a running autoCad Software?pyautocad 是否需要正在运行的 autoCad 软件?
【发布时间】:2019-03-26 00:24:47
【问题描述】:

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

这是我运行的脚本。使用这个库pyautocad是否需要运行autocad

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

【问题讨论】:

  • 不,您不需要运行 AutoCAD。但一定要正确安装。
  • @Arnie97 安装 AutoCAD 后仍然出现错误

标签: python python-3.x autocad


【解决方案1】:

你会得到错误:

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

如果

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

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

调用Autocad() 将启动一个已安装的 AutoCAD 实例。

【讨论】:

  • D:\autocad_files Traceback(最近一次调用最后一次):文件“test.py”,第 37 行,在 acad.doc.Open(cwd + "/" + f) File " C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\comtypes\client\lazybind.py",第 182 行,调用者返回 self._comobj._invoke(descr.memid, descr. invkind, 0, *args) 文件“C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\comtypes\automation.py”,第 729 行,在 _invoke dp,var,无, argerr) _ctypes.COMError: (-2147352567, 'Exception occurred.', ('', 'AutoCAD', None, 0, None)) 现在我得到这个错误
  • 当时cwd的值是多少?
  • D:\autocad_files @reckface
  • 文件“C:\Users\nithish\AppData\Local\Programs\Python\Python37\lib\site-packages\comtypes\automation.py”,第 729 行,在 _invoke dp,var,无, argerr) _ctypes.COMError: (-2147352567, '发生异常。', ('方法在 MDI 模式下不可用。使用文档集合的打开方法。', 'AutoCAD', 'C:\\Program Files\\Autodesk\ \AutoCAD 2019\\HELP\\OLE_ERR.CHM',-2145320848,无))
  • @NithishAlbin 最后一件事要尝试:acad.app.Documents.open
猜你喜欢
  • 2018-01-29
  • 2023-04-01
  • 2023-02-20
  • 1970-01-01
  • 2020-01-01
  • 2012-07-25
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多