excel根据字段进行拆分python代码

# -*- coding: utf-8 -*-
from tkinter import *
from tkinter import messagebox, filedialog
import pandas as pd
import os

class Application(Frame):
    '''一个经典的GUI程序类写法'''

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        '''创建登录界面的组件'''
        self.label01 = Label(self, text="文件路径:")
        self.label01.grid(row=0, column=0)

        self.entry01 = Entry(self)
        self.entry01.grid(row=0, column=1)
        Button(self, text="选择路径", command=self.select_path).grid(row=0, column=2)

        self.label02 = Label(self, text="文件名称:")
        self.label02.grid(row=1, column=0)

        self.entry02 = Entry(self)
        self.entry02.grid(row=1, column=1)

        self.label03 = Label(self, text="拆分字段:")
        self.label03.grid(row=2, column=0)

        self.entry03 = Entry(self)
        self.entry03.grid(row=2, column=1)

        Button(self, text="确定", command=self.find_and_copy_files_with_keyword).grid(row=3, column=1)

    def select_path(self):
        path = filedialog.askdirectory()
        self.entry01.insert(0, path)

    def find_and_copy_files_with_keyword(self):
        src_folder = self.entry01.get()
        file_name = self.entry02.get()
        keyword = self.entry03.get()

        if not src_folder or not file_name or not keyword:
            messagebox.showerror("错误", "所有字段都是必填的")
            return

        try:
            file_path = os.path.join(src_folder, file_name + ".xlsx")
            if not os.path.exists(file_path):
                messagebox.showerror("错误", "文件不存在")
                return

            # 尝试读取原始Excel文件,并指定engine参数
            try:
                df = pd.read_excel(file_path, engine='openpyxl')
            except ValueError as ve:
                messagebox.showerror("错误", f"文件格式错误: {str(ve)}")
                return
            except Exception as e:
                messagebox.showerror("错误", f"无法读取文件: {str(e)}")
                return

            if keyword not in df.columns:
                messagebox.showerror("错误", "拆分字段不存在于Excel文件中")
                return

            # 获取所有唯一的区域
            regions = df[keyword].unique()

            # 遍历每个区域并创建一个新的Excel文件
            for region in regions:
                # 根据区域过滤数据
                region_df = df[df[keyword] == region]

                # 创建一个新的Excel文件,文件名可以包含区域名称
                output_filename = os.path.join(src_folder, f"{region}.xlsx")

                # 将数据写入新的Excel文件
                try:
                    region_df.to_excel(output_filename, index=False, engine='openpyxl')
                except Exception as e:
                    messagebox.showerror("错误", f"无法写入文件: {str(e)}")
                    return

            messagebox.showinfo("完成", f"已拆分完成{len(regions)}个文件!")

        except Exception as e:
            messagebox.showerror("错误", f"发生错误: {str(e)}")


if __name__ == "__main__":
    root = Tk()
    root.geometry("400x200+200+300")
    root.title("小新拆分-V1.0")
    app = Application(master=root)
    root.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值