You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决ezdxf读取openpyxl数据时变量重叠绘制的问题

问题分析与解决方案

问题根源

你遇到的叠加问题核心是循环复用了同一个DXF文档和模型空间。代码中doc和msp应该是在循环外定义的,导致每次迭代添加的图形、文本都会累积到同一个文档实例中,最终保存的每个DXF文件都包含之前所有循环的内容。

解决方案

每次循环迭代时,重新创建全新的DXF文档和模型空间,同时确保自定义图层在新文档中存在(新DXF文档默认没有自定义图层),这样每个生成的DXF文件都是独立的。

修改后的代码

# user selected file from GUI
xl = values["-xl_file-"]

wb = load_workbook(filename=xl)
sr = wb['Trim']

# variables for testing
rowcount = 12
x = 100
y = 10
rc = 1

for row in sr.iter_rows(min_row=12, min_col=3, max_row=16, max_col=3, values_only=True):
    for value in row:
        # skip blank rows
        if value is None:
            break
        
        # 每次循环新建DXF文档与模型空间
        import ezdxf
        doc = ezdxf.new(dxfversion='R2010')  # 根据需求选择DXF版本
        msp = doc.modelspace()
        
        # 创建所需的自定义图层(新文档默认无自定义图层)
        if not doc.layers.has("2"):
            doc.layers.add("2", color=2)
        if not doc.layers.has("3"):
            doc.layers.add("3", color=3)
        
        qty = sr.cell(row=rowcount, column=2).value
        name = sr.cell(row=rowcount, column=3).value
        points = [(0, 0), (x, 0), (x, y), (0, y), (0, 0)]
        msp.add_lwpolyline(points, dxfattribs={"layer": "3"})
        msp.add_text(name, dxfattribs={"layer": "2"}).set_pos((50, 3), align='MIDDLE_RIGHT')
        print(rc, name)
        msp.add_text(f"Part: {name}", dxfattribs={"layer": "2"}).set_pos((0, -5), align='MIDDLE_LEFT')
        msp.add_text(f"Qty: {qty}", dxfattribs={"layer": "2"}).set_pos((0, -10), align='MIDDLE_LEFT')
        doc.saveas(f"{xl[:-13]}{rowcount}.dxf")
    
    rowcount = rowcount + 1
    rc = rc + 1

关键改动说明

  • 把ezdxf.new()和模型空间获取逻辑放到循环内部,每次迭代生成全新的DXF文档,彻底避免内容累积
  • 添加图层创建逻辑,确保新文档中存在代码用到的"2"、"3"图层,避免图层不存在导致的报错或默认图层替代问题

内容的提问来源于stack exchange,提问作者Rand0mdude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:36:09