如何阻止参考对象属性

时间:2019-03-28 13:42:31

标签: python autocad autocad-plugin

问题在于BlockReference对象上有一个字段DEPT_NAME没有得到该值。 如何获得价值

我尝试了给定的代码,但没有得到任何结果

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")

我得到的错误是 追溯(最近一次通话):   在第78行的文件“ auto1.py”中     打印(attrib.DEPT_NAME)    getattr 中的文件“ D:\ autocad_test \ venv \ lib \ site-packages \ win32com \ client \ dynamic.py”,第527行     引发AttributeError(“%s。%s”%(自身。用户名,attr)) AttributeError:GetAttributes.DEPT_NAME

1 个答案:

答案 0 :(得分:2)

假设此Python插件的实现与AutoCAD ActiveX对象模型的属性和方法一致,那么您需要查询属性的TagString属性,如果与目标属性匹配,输出属性的TextString属性。

我想您将需要以下内容:

for attrib in entity.GetAttributes():
    if attrib.TagString == 'DEPT_NAME':
        print(attrib.TextString)
        print("+++++++")
exit()