鱼C论坛

 找回密码
 立即注册
查看: 91|回复: 4

根据excel表格,替换cad中内容

[复制链接]
发表于 2024-11-9 13:36:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
需要用tkinter做一个界面
1,通过界面选定输入的excel文件,内容为每个“管线号”对应的编码替换内容,如
管线号   输入编码  变更后编码
   pipe1       01              1b
   pipe1       02              2b
   pipe1       03              1c
   pipe1       04              3b
   pipe1       05              1d
   pipe1       06              2c
   pipe2      01              1b
   pipe2      02              2b
   pipe2       03              1c
   pipe2       04              3b
   pipe2       05              1d
   pipe2       06              2c
2,通过界面指定需要替换里面内容的.dwg文件的文件夹,比如一个文件夹“要改的图”,里面放了pipe1.dwg,pipe2.dwg
3,做一个按钮,名称为运行,运行后,执行以下命令:
     在文件名中包含对应管线号的.dwg文件,对.dwg文件里内容为“输入编码”的文字,内容改为“变更后编码”,如pipe1_01里有文字内容为“01”,改为“1b”
4,全部运行结束后在界面显示“已完成”,提示关闭。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-9 13:36:17 | 显示全部楼层
为了实现这个需求,我们需要使用几个库来处理不同的任务:

1. **Tkinter** - 用于创建图形用户界面。
2. **OpenPyXL** 或 **pandas** - 用于读取Excel文件。
3. **PyAutoCAD** 或其他相关库 - 用于与AutoCAD交互。

需要注意:目前并没有直接支持修改AutoCAD文件(.dwg)的Python库,大多数需要借助AutoCAD软件本身的API进行操作。因此,在这里,我假设你有AutoCAD软件,并安装了适当的Python插件来与AutoCAD互动。

下面是一个简单的实现步骤:
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
import os

# 这个函数用来处理文件选择
def select_excel_file():
    file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
    if file_path:
        excel_entry.delete(0, tk.END)
        excel_entry.insert(0, file_path)

def select_dwg_directory():
    directory_path = filedialog.askdirectory()
    if directory_path:
        dwg_dir_entry.delete(0, tk.END)
        dwg_dir_entry.insert(0, directory_path)

def run_replacement():
    excel_path = excel_entry.get()
    dwg_directory = dwg_dir_entry.get()
    
    if not os.path.isfile(excel_path) or not os.path.isdir(dwg_directory):
        messagebox.showerror("错误", "请确保Excel文件和DWG文件夹已选择正确。")
        return
    
    # 使用pandas读取Excel内容
    df = pd.read_excel(excel_path)
    
    # 遍历Excel记录
    for _, row in df.iterrows():
        pipe_number = row['管线号']
        input_code = str(row['输入编码'])
        change_code = str(row['变更后编码'])
        
        # 基于管线号找到对应的.dwg文件
        dwg_file_path = os.path.join(dwg_directory, f"{pipe_number}.dwg")
        
        if os.path.exists(dwg_file_path):
            # 这里需要使用AutoCAD接口进行替换操作
            # 伪代码示意:AutoCADReplaceText(dwg_file_path, input_code, change_code)
            pass

    messagebox.showinfo("完成", "替换操作已完成!")

# 创建主界面
root = tk.Tk()
root.title("CAD编码替换工具")

# 创建和展示组件
tk.Label(root, text="选择Excel文件:").pack(pady=5)
excel_entry = tk.Entry(root, width=50)
excel_entry.pack(padx=10)
tk.Button(root, text="选择文件", command=select_excel_file).pack(pady=5)

tk.Label(root, text="选择DWG文件夹:").pack(pady=5)
dwg_dir_entry = tk.Entry(root, width=50)
dwg_dir_entry.pack(padx=10)
tk.Button(root, text="选择文件夹", command=select_dwg_directory).pack(pady=5)

tk.Button(root, text="运行", command=run_replacement).pack(pady=20)

root.mainloop()

请注意以上代码中的“AutoCADReplaceText”是伪代码,需要根据你和AutoCAD交互的具体库和方法来实现数据替换。您需要查阅相关库的文档来完成该部分代码。

此外,确保你拥有足够的权限和设置去自动操作AutoCAD,以避免权限或安全设置问题。希望这个指导能够帮助你开始制作你的工具界面。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-9 13:39:14 | 显示全部楼层
我前面说的不太准确,重新描述下,不好意思。。。
需要用tkinter做一个界面
1,通过界面选定输入的excel文件,内容为每个“管线号”对应的编码替换内容,如
管线号   输入编码  变更后编码
   pipe1       01              1b
   pipe1       02              2b
   pipe1       03              1c
   pipe1       04              3b
   pipe1       05              1d
   pipe1       06              2c
   pipe2      01              1b
   pipe2      02              2b
   pipe2       03              1c
   pipe2       04              3b
   pipe2       05              1d
   pipe2       06              2c
2,通过界面指定需要替换里面内容的.dwg文件的文件夹,比如一个文件夹“要改的图”,里面放了pipe1.dwg,pipe2.dwg
3,做一个按钮,名称为运行,运行后,执行以下命令:
     在文件名中包含对应管线号的.dwg文件,对.dwg文件里   cad文件里面的,内容为“输入编码”的文字,内容改为“变更后编码”,如pipe1_01里有文字内容为“01”,改为“1b”
4,全部运行结束后在界面显示“已完成”,提示关闭。
注意是cad图纸里面的文字有对应替换内容的进行替换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-9 13:40:26 | 显示全部楼层
需要用tkinter做一个界面
1,通过界面选定输入的excel文件,内容为每个“管线号”对应的编码替换内容,如
管线号   输入编码  变更后编码
   pipe1       01              1b
   pipe1       02              2b
   pipe1       03              1c
   pipe1       04              3b
   pipe1       05              1d
   pipe1       06              2c
   pipe2      01              1b
   pipe2      02              2b
   pipe2       03              1c
   pipe2       04              3b
   pipe2       05              1d
   pipe2       06              2c
2,通过界面指定需要替换里面内容的.dwg文件的文件夹,比如一个文件夹“要改的图”,里面放了pipe1.dwg,pipe2.dwg
3,做一个按钮,名称为运行,运行后,执行以下命令:
     在文件名中包含对应管线号的.dwg文件,对.dwg文件里   cad文件里面的,内容为“输入编码”的文字,内容改为“变更后编码”,如pipe1_01里有文字内容为“01”,改为“1b”
4,全部运行结束后在界面显示“已完成”,提示关闭。
注意是cad图纸里面的文字有对应替换内容的进行替换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-9 13:43:07 | 显示全部楼层
颂风侯 发表于 2024-11-09 13:39
我前面说的不太准确,重新描述下,不好意思。。。
需 ...


为了实现这个需求,你需要将几个组件结合起来使用。以下是实现该界面的详细步骤:

### 步骤

1. **创建Tkinter GUI**:用于选择Excel文件和DWG文件夹。
2. **处理Excel文件**:使用pandas读取数据。
3. **替换DWG文件中的内容**:通过与AutoCAD的交互实现替换操作。由于Python没有直接编辑DWG文件的功能,所以需要借助AutoCAD的API进行文本替换。

### 注意

1. 确保AutoCAD安装并配置了Python接口或插件,以支持Python操作AutoCAD。
2. 可能需要安装相关的库,如`pandas`。

### 示例代码
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
import os
# 这里需要AutoCAD库支持,PyAutocad可以协助进行CAD操作
# from pyautocad import Autocad, APoint, aDouble

def select_excel_file():
    file_path = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx;*.xls")])
    if file_path:
        excel_entry.delete(0, tk.END)
        excel_entry.insert(0, file_path)

def select_dwg_directory():
    directory_path = filedialog.askdirectory()
    if directory_path:
        dwg_dir_entry.delete(0, tk.END)
        dwg_dir_entry.insert(0, directory_path)

def run_replacement():
    excel_path = excel_entry.get()
    dwg_directory = dwg_dir_entry.get()

    if not os.path.isfile(excel_path) or not os.path.isdir(dwg_directory):
        messagebox.showerror("错误", "请确保Excel文件和DWG文件夹已选择正确。")
        return

    try:
        df = pd.read_excel(excel_path)
    except Exception as e:
        messagebox.showerror("错误", f"无法读取Excel文件: {e}")
        return

    # 伪代码:逐个访问dwg并替换内容
    for _, row in df.iterrows():
        pipe_number = row['管线号']
        input_code = str(row['输入编码'])
        change_code = str(row['变更后编码'])

        dwg_file_path = os.path.join(dwg_directory, f"{pipe_number}.dwg")
        
        if os.path.exists(dwg_file_path):
            # Autocad对象初始化,假设为现有实例
            # acad = Autocad()
            # 载入文件进行替换,这部分需要根据你的CAD API实现
            # doc = acad.open_document(dwg_file_path)
            # Perform required text replacements using CAD APIs here
            
            pass
    
    messagebox.showinfo("完成", "替换操作已完成!")

# 创建主界面
root = tk.Tk()
root.title("CAD编码替换工具")

# 展示组件
tk.Label(root, text="选择Excel文件:").pack(pady=5)
excel_entry = tk.Entry(root, width=50)
excel_entry.pack(padx=10)
tk.Button(root, text="选择文件", command=select_excel_file).pack(pady=5)

tk.Label(root, text="选择DWG文件夹:").pack(pady=5)
dwg_dir_entry = tk.Entry(root, width=50)
dwg_dir_entry.pack(padx=10)
tk.Button(root, text="选择文件夹", command=select_dwg_directory).pack(pady=5)

tk.Button(root, text="运行", command=run_replacement).pack(pady=20)

root.mainloop()

### 注意

1. **AutoCAD交互**:目前代码中与AutoCAD的交互部分是伪代码,请根据AutoCAD API接口来完成替换功能。
2. **AutoCAD开启**:确保AutoCAD运行并为Python代码提供接口支持。

### 后续步骤

请核对并完善AutoCAD部分的代码,具体有赖于AutoCAD的Python API的实际使用文档。如果需要,可以使用AutoLISP脚本来协助完成更复杂的任务。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表