Reputation: 23
The problem is there is a field DEPT_NAME on BlockReference object not getting the value. how to to get the value
I tried the given code but not getting any results
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
from comtypes import COMError
def props(cls):
return [i for i in cls.__dict__.keys() if i[:1] != '_']
# 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
print(cwd)
for f in dwgfiles:
print("++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++")
print(f)
if f.endswith(".dwg"):
print("sdaasdas")
""" open Document"""
acad = Autocad()
print(cwd)
acad.app.Documents.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")
count=0
for entity in acad.ActiveDocument.ModelSpace:
name = entity.EntityName
print(name)
if name == 'AcDbBlockReference':
HasAttributes = entity.HasAttributes
if HasAttributes:
# sheet.row(idx).write(0, entity.TextString)
sheet.row(idx).write(1, entity.ObjectID)
sheet.row(idx).write(2, cwd + "/" + f)
sheet.row(idx).write(3, str(entity.InsertionPoint))
sheet.row(idx).write(4, entity.Name)
sheet.row(idx).write(5,entity.Layer)
idx = idx + 1
print(entity.Name)
print(entity.Layer)
print(entity.ObjectID)
k=0
#print(entity.get_attrib_text('DEPT_NAME'))
for attrib in entity.GetAttributes():
print(attrib.DEPT_NAME)
print("+++++++")
exit()
print(count)
doc.Close(False)
acad = None
wb.save("Exported.xls")
the error i am getting is this Traceback (most recent call last): File "auto1.py", line 78, in print(attrib.DEPT_NAME) File "D:\autocad_test\venv\lib\site-packages\win32com\client\dynamic.py", line 527, in getattr raise AttributeError("%s.%s" % (self.username, attr)) AttributeError: GetAttributes.DEPT_NAME
Upvotes: 1
Views: 1057
Reputation: 16025
Assuming the implementation of this Python plugin is consistent with the properties & methods of the AutoCAD ActiveX object model, then you'll need to query the TagString
property of the attribute and, if it matches your target attribute, output the TextString
property of the attribute.
I would guess that you'll need something along the lines of the following:
for attrib in entity.GetAttributes():
if attrib.TagString == 'DEPT_NAME':
print(attrib.TextString)
print("+++++++")
exit()
Upvotes: 2