导出 autocad 中的表格数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# %%
# 提取 cad 中的表格
# pip install pyautocad
# https://github.com/reclosedev/pyautocad/blob/master/examples/cable_tables_to_csv.py

from pyautocad import Autocad
from rich.pretty import pprint
from tqdm import tqdm

# 获取当前打开的 cad 文件
acad = Autocad()
layout = acad.doc.ActiveLayout

# %%
# 搜索第一个表格
table = acad.find_one('table', layout.Block)

# 逐行逐列获取文本
row_texts = []
for row in range(table.Rows):
columns = []
for col in range(table.Columns):
columns.append(table.GetText(row, col))
row_texts.append(columns)

pprint(row_texts)


json_data = table.to_csv('csv')
pprint(json_data)

# %%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# %%

# 搜索所有表格
tables = []

i = 0
for table in tqdm(acad.iter_objects('table', layout.Block)):
row_texts = []
for row in range(table.Rows):
columns = []
for col in range(table.Columns):
columns.append(table.GetText(row, col))
row_texts.append(columns)

# 只提取包含 BOM 的表格
if 'BOM' in row_texts[0][0]:
pprint(row_texts)
tables.append(row_texts)
i += 1

# %%

pprint(tables)

rrr = []
for i, ttt in enumerate(tables):
for r in ttt:
ir = [i+1] + r # Add table index to each row
rrr.append(ir)
rrr.append([]) # Add an empty row to separate tables
pprint(rrr)

# %%

import pandas as pd

df = pd.DataFrame(rrr)

df.to_csv('bom.csv', index=False, header=False, encoding='utf-8-sig')