python讀取excel數(shù)據(jù)寫入CAD指定位置
代碼原理是新建空列表,打開excel文件,讀取第一個工作簿的信息以鍵值對形式存入列表,打開cad,在指定位置(P1坐標)寫入值的信息,或許源代碼通過修改會有更好的用處,代碼如下,可以直接復制進python自帶編輯器:
?#本程序可從excel中讀取數(shù)據(jù),再將數(shù)據(jù)寫入cad文件指定位置。
import xlrd
from xlrd import xldate_as_tuple
import datetime? ? ?#導入需要讀取的第一個Excel表格的路徑
from pyautocad import Autocad, APoint
import re
import math
# 打開cad文件 自動連接上cad,只要cad是開著的,就創(chuàng)建了一個<pyautocad.api.Autocad> 對象。這個對象連接最近打開的cad文件。 如果此時還沒有打開cad,將會創(chuàng)建一個新的dwg文件,并自動開啟cad軟件
acad = Autocad(create_if_not_exists=True)
# acad.prompt() 用來在cad控制臺中打印文字
acad.prompt("Hello, Autocad from Python")
# acad.doc.Name儲存著cad最近打開的圖形名
print(acad.doc.Name)
data1 = xlrd.open_workbook(r'D:\\自編明細表.xls')
table = data1.sheets()[0]? ? ?
tables = []? #創(chuàng)建一個空列表,存儲Excel的數(shù)據(jù)
def import_excel(excel):? ? ?#將excel表格內容導入到tables列表中,定義一個import_excel函數(shù),利用for循環(huán)導入表格數(shù)據(jù)
? for rown in range(excel.nrows):
? ?array = {'桿號':'','桿型':'','直耐終':'','轉角度數(shù)':'','檔距':''}
? ?array['桿號'] = table.cell_value(rown,1)
? ?array['桿型'] = table.cell_value(rown,2)
? ?array['直耐終'] = table.cell_value(rown,3)
? ?array['轉角度數(shù)'] = table.cell_value(rown,4)
? ?array['檔距'] = table.cell_value(rown,5)
? ?tables.append(array)
p1=APoint(1559.72,1103.63)? #桿號
p2=APoint(1569.44,1105.77)? #桿型
p3=APoint(1569.44,1101.26)? #轉角度數(shù)
p4=APoint(1595.64,1098.31)? #檔距
import_excel(table)
print(tables)
for i in range(1,22):
? ? ? ganhao=tables[i]['桿號']
? ? ? ?text = acad.model.AddText(ganhao, p1, 3)#增加文字,坐標,大小 # 畫線用“acad.model.AddLine(p1, p2)”? ?# 畫圓用“acad.model.AddCircle(p1, 10)”
?? ? ?p1.y -= 10? # P1的y坐標累加10
for i in range(1,22):
? ? ganhao=tables[i]['桿型']
? ? text = acad.model.AddText(ganhao, p2, 3)#增加文字,坐標,大小
? ? ?p2.y -= 10? # P1的y坐標累加10
for i in range(1,22):
? ? ganhao=tables[i]['轉角度數(shù)']
? ? ?text = acad.model.AddText(ganhao, p3, 3)#增加文字,坐標,大小
? ? ? p3.y -= 10? # P1的y坐標累加10
for i in range(1,22):
? ? ganhao=tables[i]['檔距']
? ? text = acad.model.AddText(ganhao, p4, 3)#增加文字,坐標,大小
? ? ?p4.y -= 10? # P1的y坐標累加10
# ?。。。。。?!遍歷cad圖形對象以及訪問/修改對象屬性
for text in acad.iter_objects('Text'):
? ? print('text: %s at: %s' % (text.TextString, text.InsertionPoint))
? ? text.InsertionPoint = APoint(text.InsertionPoint) #代碼到此結束
明細表界面如下,可以自己隨意調整,只要每一列數(shù)據(jù)屬性和代碼中對應即可。

以上代碼來源互聯(lián)網,經過拼接調試,親試可以使用,通過修改其中部分代碼還可以實現(xiàn)更多功能,本文僅作為自己學習編程的記錄。
? ? ? ??