当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法好啊。短短100行代码解决,无论几十张,几百张表,瞬间搞定。

首先需要安装两个模块:xlrd(读取excel),xlsxwriter(写入excel)

pip install xlrd
pip install xlsxwriter

安装好以后,直接上代码。如下:

 # -*- coding: UTF-8 -*-
# Filename : Merge_excel.py
# author by : Awrrays import xlrd,xlsxwriter # 打开表格
def openxls(file):
try:
fx = xlrd.open_workbook(file)
return fx
except Exception as e:
print('读取文件错误,错误为:{0}'.format(e)) # 获取所有sheet
def getsheets(fx):
return fx.sheets() # 获取某个sheet的行数
def getrows(fx,sheet_num):
table = fx.sheets()[sheet_num]
rows = table.nrows
return rows # 获取某个文件的内容并返回所有行的内容
def getdump(fl,sheet_num):
fx = openxls(fl)
table = fx.sheet_by_name(sheet_name[sheet_num])
row_num = getrows(fx,sheet_num)
row_len = len(rows)
for row in range(0,row_num):
data = table.row_values(row)
rows.append(data)
dump.append(rows[row_len:])
return dump
# 定义要合并的所有文件
allxls = ["E:/test/test1.xlsx",'E:/test/test2.xlsx','E:/test/test3.xlsx']
# 定义合并后的文件
endxls = "E:/test/test.xlsx" # 存储一个sheet的结果
sheet_value = []
# 存储各sheet的名称
sheet_name = []
# 存储一行内容
rows = []
# 存储所有读取的结果
dump = [] # 读取第一个待读文件,获取sheet数
fx = openxls(allxls[0])
sheets = getsheets(fx)
x = 0
for sheet in sheets:
sheet_name.append(sheet.name)
sheet_value.append([])
x += 1 # 依次读取各sheet的内容
for sheet_num in range(0,x):
# 依次获取每个文件当前sheet的内容
for fl in allxls:
print('正在读取文件{0}的第{1}个标签....'.format(fl,sheet_num))
dump = getdump(fl,sheet_num)
sheet_value[sheet_num].append(dump) file_num = len(allxls)
endvlue = [] # 获取各sheet的内容
def get_sheet_value(k):
for z in range(k,k+file_num):
endvlue.append(sheet_value[0][0][z])
return endvlue # 打开合并完成后的文件
wb = xlsxwriter.Workbook(endxls)
# 创建一个工作表
ws = wb.add_worksheet()
polit = 0
line_num = 0
# 依次遍历每个sheet中的内容
for s in range(0,x * file_num,file_num):
file_value = get_sheet_value(s)
table_value = file_value[polit:]
# 将每一个sheet中的内容写入新文件
for a in range(0,len(table_value)):
# 将sheet行写入到新文件
for b in range(0,len(table_value[0])):
# 将每一行的内容写入新文件
for c in range(0,len(table_value[0][0])):
data = table_value[a][b][c]
ws.write(line_num,c,data)
line_num += 1
# 设置分隔点
polit = len(file_value)
wb.close()

ok,最后结果:

最新文章

  1. 在 MAC OS X 安装 ADB (Android调试桥)
  2. Mongodb和Hive详细对比
  3. drop和delete的区别是什么
  4. [转载] linux 程序运行过程中替换文件
  5. MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络
  6. Nonlinear Transform
  7. 黑马程序员-- C语言执行过程及注意点
  8. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
  9. 去除VisualStudio中拼写错误检测的红色波浪线
  10. R语言 模糊c均值(FCM)算法程序(转)
  11. 使用VideoView开发视频总结
  12. SpringMVC之Http标准的头部信息
  13. Android ble蓝牙使用注意
  14. servlet获取request数据的乱码解决
  15. docker学习构建镜像---第三章节
  16. Lua IUP 环境搭建
  17. JavaEE学习之Spring AOP
  18. java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
  19. ThinkPHP redirect 传参
  20. 【CF605E】Intergalaxy Trips(贪心,动态规划)

热门文章

  1. C++ “::” 作用域符 双冒号
  2. 史上最全面的SignalR系列教程-4、SignalR 自托管全解(使用Self-Host)-附各终端详细实例
  3. 基于Spring Boot自建分布式基础应用
  4. 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行
  5. 【码上开心】Windows环境mysql数据库使用(一) 安装Mysql数据库
  6. Spring Boot集成quartz实现定时任务并支持切换任务数据源
  7. ionic 删除返回按钮文字,及自定义nav两侧的按钮和title格式
  8. MSIL实用指南-Action的生成和调用
  9. (五十二)c#Winform自定义控件-LED数字
  10. selenium webdriver (python)第三版.pdf