首页 > 其他分享 >记录一个按列内容拆分Excel文件的小方法

记录一个按列内容拆分Excel文件的小方法

时间:2024-05-22 22:31:09浏览次数:14  
标签:sheet sub combox win Excel 按列 split 拆分

import tkinter as tk
import os
import tkinter.filedialog
import tkinter.simpledialog
import pandas as pd
import tkinter.messagebox
import tkinter.ttk
import traceback

global column, sheet_ori
global combox_2


# 按内容分类
def split_by_group():
    # 获取需要拆分文件的路径,表明,列名
    split_excel = tkinter.filedialog.askopenfilename(title='选择需要拆分的excel文件')
    sub_win = tk.Tk()
    sub_win.geometry("350x150")
    file = pd.ExcelFile(split_excel)
    sheets = file.sheet_names
    combox_1 = tk.ttk.Combobox(sub_win, width=20)
    combox_1['values'] = sheets
    combox_1["state"] = "readonly"
    label1 = tk.Label(sub_win,text='选择工作表')
    label1.grid(row=0,column=0)
    combox_1.grid(row=0, column=1)

    def split_process(*args):
        # 新建拆分结果路径
        global combox_2, sheet_ori
        notice = tkinter.messagebox.showinfo(title='信息提示!', message='选取拆分文件生成路径')
        split_col = combox_2.get()
        parent_dir = tk.filedialog.askdirectory()
        print(parent_dir)
        middleware_file_path = os.path.join(parent_dir, "拆分文件")
        if not os.path.exists(middleware_file_path):
            os.makedirs(middleware_file_path)
        # 读取拆分文件,并进行拆分动作
        df = pd.read_excel(split_excel, dtype=str, sheet_name=sheet_ori)
        a = 0
        for i, value in df.groupby(split_col):
            a = a + 1
            name_1 = value[split_col].tolist()[0]
            print(name_1)
            value.to_excel(os.path.join(middleware_file_path, str(name_1) + ".xlsx"), index=None)

    # 用获取的表名获取全部列名
    def appear(*args):
        global combox_2, sheet_ori
        sheet_ori = combox_1.get()  # 选择后激活获取
        print(sheet_ori)
        df_total = pd.read_excel(file, sheet_name=sheet_ori)
        columns = df_total.columns.values.tolist()
        print(columns)
        label2 = tk.Label(sub_win,text='选择拆分依据列')
        label2.grid(row=1, column=0)
        combox_2 = tk.ttk.Combobox(sub_win, width=20)
        combox_2['values'] = columns
        combox_2['state'] = 'readonly'
        combox_2.grid(row=1, column=1)
        label1 = tk.Label(sub_win, text="选择完拆分列后" + "\n" + "选择结果生成文件夹" + "\n" + "选择完成后开始运行" + "\n" + '不选择则生成在软件本体文件夹')
        label1.grid(row=2, column=0)

        combox_2.bind('<<ComboboxSelected>>', split_process)

    combox_1.bind('<<ComboboxSelected>>', appear)
    sub_win.update()
    sub_win.mainloop()
    res = traceback.format_exc()
    return res


split_by_group()

标签:sheet,sub,combox,win,Excel,按列,split,拆分
From: https://www.cnblogs.com/AZ26/p/18207269

相关文章

  • 记录一个按文档长度分割Excel文件的方法
    importtkinterastkimportpandasaspdimporttkinter.filedialogimportosimporttracebackwindows=tk.Tk()####按长度拆分——自定义函数##拆分函数defdivision_by_length(iterable,length):iterable_len=len(iterable)start=0while1:......
  • 记录一个批量拆分数据粘贴到各个表里的小脚本
    importosimporttkinterastkimporttkinter.filedialogfromtkinterimportttkimporttkinter.messageboxfromtkinterimportscrolledtextimportxlwingsasxwfrompandasimportExcelFilefrompandasimportread_excelglobaldf_total,cbox_sheet_ori,cbo......
  • 记录一次Xlwings操作excel替换内容
    importosimporttkinter.filedialogimportxlwingsasxwclassSubstitute:path=tkinter.filedialog.askdirectory(title='!!!!!!!!!!!!!!!!!请选择excel存放路径')#修改此处替换文本,前为原文本,后为新文本,最后一组后面不需要逗号dict1={'购销合同':'买卖合同','货物运输合......
  • FI凭证拆分
    因为BUZEI只有3位,所以FI凭证限制了最大只能有999行项目。项目背景:有个采购预制了发票之后,不愿意拆分发票(将一张发票分成几张发票)。场景一、收款发票过账场景二、物料移动(超出999)场景三、付款发票过账最开始预计的方案:一.开发程序,将预制的发票,拆分成多张预制发票(最大249行一......
  • Python教程:拆分多级目录的方法
    实现多级目录差分,举例说明如下:假设现有的目录结构如下:1、2、2.1、2.2、2.3、2.4、3、4、5、6、6.1、6.1.1、6.1.2、6.1.3、6.1.4、6.2、6.3、6.4、7、8、9、10。经过差分后,得到的各级目录为:一级目录:1、2、3、4、5、6、7、8、9、10二级目录:2.1、2.2、2.3、2.4和6.1、6.2、6......
  • winform开发excel
         Excel的二次开发方法有很多,下面主要介绍一个asponse.cell的使用方法,通过winform制造excel的小软件进行处理excel。 软件主要功能是先检查三个表中数据是否正确,比如是表头及列头等,然后将切割表和材料的数据进行组合,存放到数据跟踪表里。下面是加载到内存过程  ......
  • C#使用开源操作库MiniExcel操作Excel
    简介MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel尝试以Stream角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。特点低内存耗用,避免OOM、频繁F......
  • Ement-Plus框架的列表table导出excel数据表
    1.页面预览2.搜索条件区域code <!--查询--><divclass="table-container"><el-form:inline="true":model="queryForm"class="query-form"ref="queryFormRef"><el-form-itemlabe......
  • Excel提高效率和二次开发
       在我们实际工作或生活,很多地方用到excel,excel可存放和管理大量数据。一般情况下,我们可以用excel内置的公司进行处理,比如常用的sum函数求和和vlookup函数进行匹配等,公式几乎可以处理日常生活的任何事情。但是有时候会遇到一些大量或重复的工作,比如要实现对某些数据进复杂......
  • java+mybatis+easyExcel快速导入excel数据到MySQL
    这里有一些数据需要导入数据库。demo地址:importExcel使用步骤如下:一、修改database相关内容 1.修改application.properties文件中数据库地址及信息二、新建实体类1.新建excel数据所符合的实体类,这里举例Excel中有如下数据,表头字段为“username”。数据......