日常工程设计中,Cad文件中的表格通常存在大量数据(如节点、构件编号、面积尺寸、坐标等)。为便于阅读和处理,通常需要将以上数据转到excel表格中。现有的处理方法有品茗插件、浩辰cad等软件、插件。
考虑到安装插件或软件的不便,本文采用python语言编写脚本,利用第三方库pyautocad、xlwt等第三方库读取cad的数据并写入excel表格中,可大大节省时间,并且避免了安装软件的不变。且代码通用性强,适合2007~2020各个版本的autocad软件。
为便于描述,以下列数据为例,其中第1列为序号,第2、3、4列为x、y、z空间三维坐标),表格如下。
cad表格数据
大量的cad表格数据。。
为处理以上数据,可采用python第三方模块pyautocad提取数据,采用xlwt模块将数据提取到excel表格。代码如下。
#! /user/bin/python
# -*- coding:UTF-8 -*-
from pyautocad import Autocad
import xlwt
acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello, Autocad from Python\n")
print (acad.doc.Name) #当前cad文件名
drawing_name= [[text.TextString, text.InsertionPoint] for text in acad.iter_objects('Text',dont_cast=True)] #文字字符串||文字插入点
drawing_name= [int(text.TextString) for text in acad.iter_objects('Text',dont_cast=True)] #字符串转为整数型
print(type(drawing_name)) #list类型
def chunk2(l,chunk_size): #自定义函数||将列表等分||l是列表||chunk_size是几等分
return [l[x:x + chunk_size] for x in range(0,len(l),chunk_size)]
a=chunk2(drawing_name,4) #等分后的列表||二维列表,内部各个列表元素个数均为4
#建立excel表格
wbkName = 'joint-1-100' #命名excel文件名
wbk = xlwt.Workbook() #创建excel文件
sheet = wbk.add_sheet('sheet1') #创建sheet1
sheet.write(0,0,'编号') #写入列标题
sheet.write(0,1,'X')
sheet.write(0,2,'Y')
sheet.write(0,3,'Z')
for i in range(len(a)):
for j in range(len(a[i])):
sheet.write(i+1,j,a[i][j])
wbk.save(wbkName+'.xls') #结果表明输出成功
最终输入至excel表格的效果如下(可使用excel自带功能对数据进行升序排列):
数据存入excel表格