cad文字提取到excel_利用Dxfwrite/ezdxf操作CAD文件!

背景资料

  • 记录有CAD图中不同位置的各个点的坐标信息,具体形式如下图

7805b5a41c156d63be5867086629d85b.png
  • 已有以上各点的CAD图形文件(图片省略)

1

将Excel表中各点的项目1信息按照已给坐标写入到新的CAD文件

为了能明显的将这些点的项目1信息表示在CAD中,把项目1名称和新建的圆(直径和颜色通过Dxfwrite来设定)做为一个块写入到固定坐标位置。其中项目1字体大小和颜色也通过Dxfwrite来设定。具体代码如下:

# coding: UTF-8import xlrd, dxfwritefrom dxfwrite import DXFEngine as dxf# draw a cad picturedrawing = dxf.drawing('new_drawing.dxf')# read excel datasdata = xlrd.open_workbook('dot.xls') # 打开Excel文件,只能读取xls格式num_sheets = len(data.sheets()) # 获得Excel文件的sheet数for n in range(num_sheets):    table = data.sheets()[n]  # 获得指定sheet下的单元格信息     nrows = table.nrows # 获得指定sheet下单元格的总行数    for i in range(2, nrows):        x_cood = float(table.cell(i, 2).value)        y_cood = float(table.cell(i, 3).value)        dot_num = table.cell(i, 1).value  # 读取表中项目1的信息        circle = dxf.circle(2.0)  # 新建一个圆,注意:不需指定坐标        circle['layer'] = 'dot'  # 设置圆的图层为dot        circle['color'] = 2      # 设置圆的颜色        text = dxf.text(dot_num, (y_cood, x_cood), height=1.207)  #新建文本,并在指定坐标处写入项目1的信息        text['layer']='dot' # 文本图层为dot        text['color'] = 2   # 文本字高为2        block = dxf.block(name='dot')  # 新建名为dot的块,不需坐标信息        block.add(circle)  # 把上述的圆加到到dot块中        drawing.blocks.add(block)          blockref = dxf.insert(blockname='dot', insert=(y_cood, x_cood)) # 把dot块插入CAD图形的指定坐标处        drawing.add(blockref) # 把块写入到drawing.dxf中        drawing.add(text)  # 把指定坐标处文本写入到drawing.dxf中drawing.save()  # 保存drawing.dxf文件

得到DXF格式的CAD文件,可以在CAD里另存为DWG格式,将其通过外部参照插入到对应的CAD文件中就可以作为参照信息使用了。

2

提取CAD文件中指定位置的TEXT信息写入到已有Excel文件中

对于CAD图形中某个位置相同类型的TEXT信息的整理,如果用贱人工具,达不到批量导出并保存的效果;可以结合贱人工具和python的ezdxf库,将指定位置处的同图层TEXT的信息(包括坐标、文字、等信息)批量提取后写入Excel中。(反过来,也可以把指定位置处的信息用TEXT表示在该位置处的CAD图形中,最后将各个关键词提取出来)。具体代码如下:

#!/usr/bin/env python3 # 这一行是linux系统下运行时必需的# -*-coding: UTF-8-*-import ezdxf, xlwt, os, refrom xlutils.copy import copyfrom xlrd import open_workbookdef write_data_into_excel(excel_name, sheet_num, *args):    '''write data extract from cad files into excel files(.xls)       具体参考xlutils模块官方文档中xlutils.copy部分    '''    print("Begin to read excel files*****************")    rb = open_workbook(excel_name)    wb = copy(rb)        wn = wb.get_sheet(sheet_num) # get the sheet of wb    row_start = len(wn.get_rows()) # get the total rows of wn    for i in range(1, len(args)+1): # 这里要注意,从提取的信息从第二列开始写入        wn.write(row_start, i, args[i-1])  # 提取的信息格式为args=(项目1,x_cood,y_cood,项目2,项目3,项目4),所以应该是args的i-1项    wb.save(os.getcwd() + "/" + excel_name)def get_and_write_data(file_name, excel_name, sheet_num):    '''extract data from cad files(.dxf)'''    print("Begin to extract data from dxf files****************")    doc = ezdxf.readfile(os.getcwd() + "/%s" %file_name) # 打开当前目录下的dxf文件(本人操作的CAD文件有12份)    msp = doc.modelspace() # 打开dxf格式的文件    for text in msp.query("TEXT"): # 在当前dxf文件中查找TEXT文本        if text.dxf.layer == "ADD_PK": # 查找图层名为ADD_PK的文本            text_content = text.dxf.text  # 获得TEXT文本内容信息,格式为‘项目1/项目2/项目3/项目4’            text_x_cood = text.dxf.insert[1] # 获得TEXT的x坐标            text_y_cood = text.dxf.insert[0] # 获得TEXT的y坐标            text_name = text_content.split("/")[0] # 提取出TEXT中的第一项(即项目1)            pipe_diameter = text_content.split("/")[1] # 提取出TEXT中的第2项(即项目2)            elevation = text_content.split("/")[2] # 依次类推,对照上文的Excel表            node_num = text_content.split("/")[3]  # 同上            text_info = text_name, text_x_cood, text_y_cood, pipe_diameter, elevation, node_num            print(text_info)            print("Begin to write data into excel files******************")            write_data_into_excel(excel_name, sheet_num, *text_info)global excel_namefor root, dirs, files in os.walk(os.getcwd()): # 遍历当前目录下的dxf文件    for filename in files:        if ".xls" in filename:            # global excel_name (please notice this usage, it's wrong on Centos7 and can work on windows10)            excel_name = filename            print("[+]Get the excel file %s********************" % filename)        if ".dxf" in filename:            print("[+]Begin to operate %s********************" % filename)            get_and_write_data(filename, excel_name, int(re.findall(r"d*", filename)[5])-1)  # 本人将dxf文件保存为1.dxf, 2.dxf, ..., 12.dxf, 所以要减1才能对应到各自的sheet中

最后的效果就是从CAD中提取出来的TEXT信息写入到了对应的sheet表单中,并且是接着原来的Excel表添加的。具体效果图如下:

7e948a53b7aeb7f4be9b45fe8b8fd6e9.png

2b694c455b2e1c5fc7668bd92c2f6933.png
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将CAD中的多个文字提取Excel中,可以通过以下步骤实现: 1. 打开CAD软件并加载需要提取文字文件。 2. 在CAD的菜单栏中选择“编辑”或“修改”选项。 3. 在下拉菜单中选择“文字提取”选项。 4. 在弹出的文字提取对话框中,选择需要提取文字的范围。可以选择整个图纸范围,或者通过绘制一个包含所需文字的边界框来限定提取范围。 5. 确定提取范围后,点击“提取”按钮。 6. 在接下来的对话框中,选择“保存为文件”选项,并选择保存文件的路径和格式(例如,Excel文件)。 7. 确认设置后,点击“提取”按钮开始提取文字并保存到指定的Excel文件中。 8. CAD软件将会将提取文字导出到Excel文件中的一个表格中,每个文字对应一个单元格。 这样,你就成功地将CAD中的多个文字提取到了Excel中,可以方便地进行进一步处理和分析。 ### 回答2: CAD(Computer-Aided Design,计算机辅助设计)是一种广泛应用于工程设计和制造行业的软件。要从CAD提取多个文字Excel中,可以采取以下步骤: 1. 打开CAD软件,并打开包含所需文字的绘图文件。 2. 使用选择工具(如选择框或选择命令)选择要提取文字。您可以通过单击文字来选择单个文本,或通过拖动选择框来选择多个文字。 3. 将选择的文字复制到剪贴板。可以使用快捷键Ctrl+C或右键单击选择的文字并选择复制选项。 4. 打开Excel软件,并创建一个新的工作表或打开现有的工作表。 5. 选择要粘贴文字的单元格。 6. 使用粘贴选项将复制的文字粘贴到Excel中。可以使用快捷键Ctrl+V或右键单击选择的单元格并选择粘贴选项。 7. 检查粘贴后的文字是否正确,如果需要可以进行格式调整或进一步编辑。 通过以上步骤,您就可以将CAD中多个文字提取Excel中,以便更方便地进行整理、编辑和分析。 ### 回答3: 要将CAD中的多个文字提取Excel中,可以采用以下步骤: 1. 在CAD软件中打开需要提取文字的图纸。 2. 使用选择工具选择需要提取文字。可以使用框选工具选中一片区域,或者逐个选择每个文字对象。 3. 将选中的文字复制到剪贴板。可以使用快捷键Ctrl+C,或者点击鼠标右键选择复制。 4. 打开Excel软件,创建一个新的工作表。 5. 在Excel的工作表中选择一个合适的单元格,点击鼠标右键选择粘贴。可以使用快捷键Ctrl+V进行粘贴。 6. 粘贴后,可以对提取文字进行进一步的整理和格式化,如删除多余的空白行、调整字体样式等。 7. 如果还需要提取更多的文字,可以重复以上步骤,将其他需要的文字逐个粘贴到Excel中的不同单元格中。 需要注意的是,CAD中的文字对象可能具有不同的格式和样式,提取Excel中后可能需要进行额外的处理和调整,以满足具体的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值