I am getting an error . when I try to convert dwg AutoCAD file to excel. I used http://www.run8tech.com/script-to-update-text-and-mtext-in-autocad-from-excel.aspx I am getting an error
this is the script I ran. Is autocad running is necessary for using this library 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")
when I run this script error I am getting is this
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
You would get the error:
OSError: [WinError -2147221005] Invalid class string
If
CreateObject("Autocad19.Application")
when you have AutoCAD20 installed.In general, libraries leave the version number out, so "Autocad.Application" would work fine.
The call to Autocad()
will start an instance of AutoCAD if it is installed.