python 获取CAD属性到excel

# -*- coding: utf-8 -*-
from pyautocad import Autocad, APoint
from pyautocad.contrib.tables import Table
import re
#import gdal,os,ogr,osr#osgeo,
#import gdal,os,ogr,osr#osgeo,
#import ogr
from osgeo import gdal, osr
from osgeo import ogr
import os
import win32com.client
import pythoncom
import math, time, shutil, sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QApplication
import traceback
from PyQt5.QtWidgets import QMessageBox
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets
import os, sys
#########################扩展属性读取#####################################
def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)


def vtInt(list):
    """列表转化为整数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, list)


def vtVariant(list):
    """列表转化为变体"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)

def inset_excel(list_fwxx, list_jzmj, list_zzdmj, list_zdxx, path_bc):
    import openpyxl
    path_xz = resource_path(os.path.join("temp", '连平县xx镇xx村“房地一体”宅基地和集体用地权籍调查信息表.xlsx'))
    wb = openpyxl.load_workbook(path_xz)
    sht = wb.active
    tem = 4
    for zddm in list_zdxx:
        try:
            zdmj = list_zdxx[zddm]
            jzmj = sum(list_jzmj[zddm])
            zzdmj = sum(list_zzdmj[zddm])
            [fwzl, qlrmc, zjh, zcs, fwjg, gyqk] = list_fwxx[zddm]
            sht['A%s'%tem] = zddm
            sht['B%s'%tem] = qlrmc
            sht['C%s'%tem] = zjh
            sht['D%s'%tem] = gyqk
            sht['E%s'%tem] = zdmj
            sht['F%s'%tem] = zcs
            sht['G%s'%tem] = fwjg
            sht['H%s'%tem] = zzdmj
            sht['I%s'%tem] = jzmj
            sht['J%s'%tem] = fwzl
        except:
            sht['A%s' % tem] = '%s-属性不齐'%zddm


        tem += 1
    wb.save(os.path.join(path_bc, '连平县xx镇xx村“房地一体”宅基地和集体用地权籍调查信息表.xlsx'))  # 保存


def cad(self):
    wincad = win32com.client.Dispatch("AutoCAD.Application")
    doc = wincad.ActiveDocument
    msp = doc.ModelSpace
    self.label_2.setText('正在提取房屋信息···')
    QApplication.processEvents()
    try:
        doc.SelectionSets.Item("SS1").Delete()
    except:
        print("Delete selection failed")
    slt = doc.SelectionSets.Add("SS1")
    slt.Select(5, 0, 0, vtInt([0, 8]), vtVariant(["LWPOLYLINE", "BDMAP_房屋"]))
    list_jzmj = {}
    list_zzdmj = {}
    list_fwxx = {}
    for item in slt:
        list_fw_BDMAP_FWJBXX = item.GetXData("BDMAP_FWJBXX")[1][1].split('$')
        list_fw_BDMAP_FWZK = item.GetXData("BDMAP_FWZK")[1][1].split('$')
        fwzl = list_fw_BDMAP_FWJBXX[6]
        zddm = list_fw_BDMAP_FWJBXX[5][:19]
        qlrmc = list_fw_BDMAP_FWJBXX[8]
        jzmj = float(list_fw_BDMAP_FWZK[9])
        zzdmj = round(item.area,2)
        zjh = list_fw_BDMAP_FWJBXX[10]
        gyqk = list_fw_BDMAP_FWJBXX[19][2:]
        zcs = list_fw_BDMAP_FWZK[4]
        fwjg = list_fw_BDMAP_FWZK[6][2:]
        list_jzmj.setdefault(zddm, []).append(jzmj)
        list_zzdmj.setdefault(zddm, []).append(zzdmj)
        list_fwxx[zddm] = [fwzl, qlrmc, zjh, zcs, fwjg, gyqk]

    self.label_2.setText('正在提取宗地信息···')
    QApplication.processEvents()
    try:
        doc.SelectionSets.Item("SS1").Delete()
    except:
        print("Delete selection failed")
    slt = doc.SelectionSets.Add("SS1")
    slt.Select(5, 0, 0, vtInt([0, 8]), vtVariant(["LWPOLYLINE", "BDMAP_地籍"]))
    list_zdxx = {}
    for item in slt:
        list_BDMAP_ZDBASEATT = item.GetXData("BDMAP_ZDBASEATT")[1][1].split('$')
        zd_zddm = list_BDMAP_ZDBASEATT[2]
        zd_zdmj = float(list_BDMAP_ZDBASEATT[19])
        list_zdxx[zd_zddm] = zd_zdmj
    path_bc = self.lineEdit.text()
    self.label_2.setText('正在写入Excel···')
    QApplication.processEvents()
    inset_excel(list_fwxx, list_jzmj, list_zzdmj, list_zdxx, path_bc)
    self.label_2.setText('写入完成')
    QApplication.processEvents()
    if QMessageBox.information(None, '提示', "写入完成,是否打开文件进行查看",
                               QMessageBox.Yes | QMessageBox.No) == 16384:  # 给出确定与否的弹窗,是的话则下一步
        os.startfile(os.path.join(path_bc, '连平县xx镇xx村“房地一体”宅基地和集体用地权籍调查信息表.xlsx'))  # 打开文件

def ye_main(self):
    def askdirectory_word_pdf_bc():
        """"""
        _translate = QtCore.QCoreApplication.translate
        folder = QFileDialog.getExistingDirectory()
        self.lineEdit.setText(_translate("Form", folder))

    def main():
        try:
            cad(self)
        except:
            QMessageBox.information(None, '提示', '出错了%s\n' % traceback.format_exc())

    self.toolButton.clicked.connect(askdirectory_word_pdf_bc)
    self.pushButton.clicked.connect(main)


if __name__ == '__main__':
    import jm
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()  # QMainWindow模块名
    self = jm.Ui_MainWindow()
    self.setupUi(MainWindow)

    ye_main(self)

    MainWindow.show()
    sys.exit(app.exec_())
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐