如何BlockReference对象属性

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

问题是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")

我得到的错误是这个Traceback(最近一次调用最后一次):文件“auto1.py”,第78行,打印(attrib.DEPT_NAME)文件“D:\ autocad_test \ venv \ lib \ site-packages \ win32com \ client \ dynamic.py“,第527行,getattr引发AttributeError(”%s。%s“%(self.username,attr))AttributeError:GetAttributes.DEPT_NAME

python autocad autocad-plugin
1个回答
2
投票

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

我猜你需要的东西如下:

for attrib in entity.GetAttributes():
    if attrib.TagString == 'DEPT_NAME':
        print(attrib.TextString)
        print("+++++++")
exit()
© www.soinside.com 2019 - 2024. All rights reserved.