文章目录

  • 前言
  • 一、基本思路
  • 二、编码实现
  • 三、使用测试
    • 界面如图所示
    • 功能测试

前言

写这个小工具的原因是因为在工作中需要将两个excel里面的数据合并一个新的文件,起初尝试通过WPS进行合并,但是奈何WPS需要收费,所以就自己动手写一个,说干就干,于是乎就有了这个用python写的小工具


一、基本思路

通过excel文件的路径,读取每个文件当前活跃表格的标题,创建一个新的文件 “合并内容.xlsx” 文件,将要合并的两个文件的标题写入到新创建的文件中,当然重复的标题也会自动过滤的,然后将第一个文件的列标题和新创建的文件的列标题进行对比,如果存在新创建的文件中,然后通过迭代,将整列数据都写入到新创建的文件中,然后通过计算出新创建的文件的行数,在进行第二个文件的写入,步骤同第一个文件的写入一样
采用python的tkiner框架编写,界面简单,操作方便,可以将具有不同列名的两个excel表格文件 合并到一个新的excel文件中

二、编码实现

具体的代码实现如下,代码格式上,大家可以自己调整,也可以在原有的基础上进行添加新的功能:

from openpyxl import load_workbook
from openpyxl import Workbook
from tkinter import *
from tkinter import filedialog
import tkinter.messagebox#获取文件1的路径
def upload_file1(file1_entry):select_file1 = tkinter.filedialog.askopenfilename()file1_entry.insert(0,select_file1)
#获取文件2的路径
def upload_file2(file2_entry):select_file2 = tkinter.filedialog.askopenfilename()file2_entry.insert(0,select_file2)def merge_file(result_text,file1_path,file2_path):result_text.insert('end',"开始合并\n")try:# 读取excel文件excel_file1 = load_workbook(filename=file1_path)excel_file2 = load_workbook(filename=file2_path)write_excel_file = Workbook()sheet1 = excel_file1.activesheet2 = excel_file2.activeac_write_excel_obj = write_excel_file.activeresult_text.insert('end', "合并中........\n")write_excel_file_title_list = []column_title_not_in_write_list = []file1_title = []file2_title = []# 获取excel1的标题for title_index in range(1, sheet1.max_column + 1):file1_title.append(sheet1.cell(row=1, column=title_index).value)# 获取excel2的标题for title_index2 in range(1, sheet2.max_column + 1):file2_title.append(sheet2.cell(row=1, column=title_index2).value)# 判断列名是否存在合并的新文件中flag = False# 将合并单元格的标题写入合并文件中for title_index in range(1, sheet1.max_column + 1):ac_write_excel_obj.cell(row=1, column=title_index).value = sheet1.cell(row=1, column=title_index).value# 读取要写入文件的列数write_max_column_num = ac_write_excel_obj.max_column# 将合并新文件中的列名写入到列表中暂存for write_file_title_index in range(1, write_max_column_num + 1):write_excel_file_title_list.append(ac_write_excel_obj.cell(row=1, column=write_file_title_index).value)# 读取合并文件2中不存在合并文件中的列标题for title2_index in range(1, sheet2.max_column + 1):sheet2_title_name = sheet2.cell(row=1, column=title2_index).valuefor write_title_name in write_excel_file_title_list:if write_title_name == sheet2_title_name:flag = Truebreakif not flag:column_title_not_in_write_list.append(sheet2_title_name)else:flag = False# 将不存在与合并新文件中的列名写入到合并的新文件中for write_index in range(write_max_column_num + 1,write_max_column_num + int(len(column_title_not_in_write_list)) + 1):ac_write_excel_obj.cell(row=1, column=write_index).value = column_title_not_in_write_list.pop()# 获取第二次的合并新文件的全部列名write_excel_file_title_list = []for now_write_title_index in range(1, ac_write_excel_obj.max_column + 1):write_excel_file_title_list.append(ac_write_excel_obj.cell(row=1, column=now_write_title_index).value)# 将文件1的内容写入到合并的新文件中for index, item in enumerate(file1_title):file1_title_in_write_column_index = write_excel_file_title_list.index(item)for row in range(2, sheet1.max_row + 1):ac_write_excel_obj.cell(row=row, column=file1_title_in_write_column_index + 1).value = sheet1.cell(row=row,column=index + 1).value# 定义存储file2每一列的内容的暂存列表file2_buffer_list = []# 获取目前合并文件的最大行数now_max_row_number = ac_write_excel_obj.max_rowfor index, item in enumerate(file2_title):file2_title_in_write_column_index = write_excel_file_title_list.index(item)# 将本列的数据暂存在暂存列表中for shuju_row in range(2, sheet2.max_row + 1):file2_buffer_list.append(sheet2.cell(row=shuju_row, column=(index + 1)).value)print(file2_buffer_list)for row in range(now_max_row_number + 1, ((now_max_row_number + sheet2.max_row - 1) + 1)):ac_write_excel_obj.cell(row=row,column=(file2_title_in_write_column_index + 1)).value = file2_buffer_list.pop()write_excel_file.save("合并内容.xlsx")tkinter.messagebox.showinfo("成功信息", "合并成功,文件名 合并内容.xlsx")result_text.insert("end", "合并成功,关闭软件之后,文件才会出现\n")except:tkinter.messagebox.showinfo("错误信息","合并异常")result_text.insert("end","请检查文件路径或者文件格式是否正确\n")if __name__ == '__main__':root = Tk()root.geometry("600x600+300+80")tip_information = Label(root,justify="center",padx="10",pady="10",text="请上传xlsx后缀名文件,否则会出错").place(x=100,y=30,width=200,height=50)file1_upload_btn = Button(root, justify="center", padx="10", pady="10", text="文件1", width="100", height="50",command=lambda: upload_file1(file1_entry))file1_upload_btn.place(x=100, y=100, width=100, height=50)file1_entry = Entry(root, justify="center", width=180, relief="groove")file1_entry.place(x=210, y=100, width=180, height=50)file2_upload_btn = Button(root, justify="center", padx="10", pady="10", text="文件2", width="100", height="50",command=lambda: upload_file2(file2_entry))file2_upload_btn.place(x=100, y=160, width=100, height=50)file2_entry = Entry(root, justify="center", width=180, relief="groove")file2_entry.place(x=210, y=160, width=180, height=50)result_Text = Text(root, width=300, height=300)result_Text.place(x=100, y=290, width=300, height=300)start_upload_file_btn = Button(root, justify="center", padx="10", pady="10", text="开始上传", width="100", height="50",command=lambda: merge_file(result_Text, file1_entry.get(), file2_entry.get()))start_upload_file_btn.place(x=100, y=220, width=100, height=50)root.mainloop()

三、使用测试

界面如图所示

功能测试

点击文件1按钮,选择文件1,点击文件2,选择文件2,然后点击开始上传,等待一会就会出现结果,如果成功的话,就会出现,合并成功,合并的文件名为 ’合并内容.xlsx’ ,在小工具的同目录底下就可以看见一个最终合并的文件,也是一个excel文件,双机打开,就可以查看合并后的内容了,但是小工具的特点就是在合并的过程中,会将第二个文件的列名颠倒,是因为在程序代码编写中,使用了列表的pop方法,从尾部开始将列名弹出栈,所以导致了这样的效果,同时,第二个文件的内容也会颠倒添加到新创建的文件中,原因也是因为pop方法的使用,如果上传的文件错误,就会提示出文件异常的弹框,会提示你检查文件的格式或者文件的路径,如果你想二次上传文件1或者文件2,请把当前文件1或者文件2后面的文本框内的路径删除之后,在进行上传,否则就会两个路径合并到一起,出现在文本框中,导致最终的文件读取错误,导致合并文件失败

excel文件合并小工具相关推荐

  1. 用Python把它做出来:EXCEL文件合并/拆分工具 (含VBA版)

    前言: 大家好,这里是Seon塞翁.当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢?如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧!此时就需要一个通过几秒钟的 ...

  2. excel函数去重_Java 嵌入 SPL 轻松实现 Excel 文件合并

    大多数JAVA程序猿都选择使用POI或者HSSFWorkbook等第三方类库来实现Excel自动化合并,这样一来不仅需要噼里啪啦的敲好多代码,费事费力,而且用起来灵活度也不高,对Excel的格式要求也 ...

  3. c++读取excel_Java 嵌入 SPL 轻松实现 Excel 文件合并

    大多数JAVA程序猿都选择使用POI或者HSSFWorkbook等第三方类库来实现Excel自动化合并,这样一来不仅需要噼里啪啦的敲好多代码,费事费力,而且用起来灵活度也不高,对Excel的格式要求也 ...

  4. 怎么让两个java文件关联,怎么把多个excel文件合并成一个【几个excle合并成一个】...

    怎么把多个excel文件合并成一个 新建一个BOOK文件,按Alt F11这二个键,VBA编辑界面,点击编辑的菜单:"插入"--"",然后在里面完整复制下面的代 ...

  5. excel几个表合成一张_如何将几个excel文件合并_多个excel表合并成一个的方法

    Excel表格是我们在工作中经常用到的一个软件,是汇总数据的好帮手,一些用户会问,那应该怎么把很多个excel表格合并在一张表里面呢?其实方法很简单,今天小编就教大家多个excel表合并成一个的方法. ...

  6. Python实现多个excel文件合并源码及打包exe程序

    ##以下是源码filecombine.py,比较简单,有相应说明,也是结合别的代码自己修改的,用到的包需要提前装好. # -*- coding: utf-8 -*- import xlrd impor ...

  7. wps js宏开发表格数据归类拆分和excel文件合并的xlam加载宏插件

    前言 用wps js宏编辑器开发的表格数据拆分与合并的加载宏工具,写好代码把工作簿另存为xlam加载宏文件,然后添加到加载项即可使用.xlam文件你可以理解为没有工作表的工作簿,先看动画演示效果: 主 ...

  8. Aveiconifier是一个非常实用方便的制作ico格式文件的小工具~

    本文地址:http://www.jb51.net/article/8314.htm Aveiconifier是一个非常实用方便的制作ico格式文件的小工具~ 也许有一些对网页知识不是很了解的网友并不清 ...

  9. python 整合excel_Python将多个excel文件合并为一个文件

    # -*- coding: utf-8 -*- #将多个Excel文件合并成一个 import xlrd import xlsxwriter #打开一个excel文件 def open_xls(fil ...

最新文章

  1. 用python3编写彩虹的代码_[面试题目]如何用三个Div实现彩虹效果?
  2. java 默认函数,java 构造函数默认修饰符
  3. setsockopt
  4. Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold
  5. [译]Javascript数列的push和pop方法
  6. bootstrap table footerFormatter用法 统计列求和 sum、average等
  7. 增加表单的文字段的html的代码是,表单及表单新增元素(示例代码)
  8. 棋盘游戏(信息学奥赛一本通-T1451)
  9. 计算机主机图片开机按钮,解决电脑开机按钮无法使用方法
  10. java 泛型 泛型擦除(type erasure)
  11. 15-自己写字符串库函数
  12. jqGrid宽度自适应
  13. react native 页面跳转
  14. Command(命令)
  15. python入门容易进阶难_为什么Python入门容易,精通却很难!Python进阶之路!
  16. 郝斌数据结构与算法自学视频教程
  17. vue 开发app处理手机返回键问题
  18. win10设置电池养护模式
  19. 华为HG8347R V3R016C10S135光猫桥接 北京联通 恢复华为原版
  20. java截取图片截图画框

热门文章

  1. 手机dpi修改工具_修改手机的分辨率,让你的手机更流畅
  2. Apache配置文件中Order Allow Deny笔记心得
  3. ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\ABC\AppData\Roaming\
  4. C语言使用getch()读取方向键
  5. 用拼音输入希腊字母的方法
  6. 深圳大学计算机专业保研率,深圳最好的公立大学(本科阶段)南方科技大学,2018级保研率应该会提高到30%...
  7. Windows 7中C:/Users/用户名/AppData里面的文件概述
  8. matlab 动态识别,基于matlab脸部动态特征的人脸表情识别程序
  9. Zigbee学习(一)架构及入网
  10. Tailwind CSS