当工作碰到需要将几个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,最后结果:

使用python合并excel的更多相关文章

  1. python合并多个excel

    前言 1.工作中,经常需要合并多个Excel文件.如果文件数量比较多,则工作量大,易出错,此时,可以使用Python来快速的完成合并. 2.使用方法:将需要合并的多个Excel文件放到同一个文件夹下, ...

  2. Python合并多个Excel数据

    安装模块 1.找到对应的模块  http://www.python-excel.org/ 2.用pip install 安装 pip install xlrdpip install XlsxWrite ...

  3. python操作excel表格(xlrd/xlwt)

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  4. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  5. python 处理 Excel 表格

    see: http://www.cnblogs.com/sunada2005/p/3193300.html 一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表 ...

  6. python读写Excel文件的函数--使用xlrd/xlwt

    python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket  The ...

  7. Python操作excel表格

    用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...

  8. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  9. Python处理Excel和PDF文档

    一.使用Python操作Excel Python来操作Excel文档以及如何利用Python语言的函数和表达式操纵Excel文档中的数据. 虽然微软公司本身提供了一些函数,我们可以使用这些函数操作Ex ...

随机推荐

  1. Spring 2017 Assignments1

    一.作业要求 原版:http://cs231n.github.io/assignments2017/assignment1/ 翻译:http://www.mooc.ai/course/268/lear ...

  2. php cmd命令行 导入 与备份

  3. 轻松pick移动开发第二篇,rem布局

    一.为什么要使用rem布局 前面我写了flex布局的优点,分配伸缩盒容器中子盒子占的份数及排列方式,使其不受屏幕缩放的影响,使布局变得简单.然而,在有些时候,不可避免要给盒子设置高度的值,怎么让高度也 ...

  4. cython 第一次接触

    https://www.cnblogs.com/kaituorensheng/p/4452881.html

  5. Spring学习之旅(十一)--JDBC

    JDBC 是数据持久化的一种比较常见的方案,Spring 也对它进行了支持. 在开始 JDBC 的使用之前,我们要先做下一些准备工作. 配置数据源 在 Spring 上下文中可以数据源 Bean 有如 ...

  6. Java-手动搭建SSM(Maven)

    一.环境部署 操作系统:windows10专业版 jdk:1.8.0_144 IDE:eclipse-oxygen 服务器:tomcat 9.0 数据库:mysql 5.7.18 Maven:3.54 ...

  7. 刚当上IT项目经理应该做些什么?

  8. Trace 2018徐州icpc网络赛 思维+二分

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy) ...

  9. codeforces 735C. Tennis Championship(贪心)

    题目链接 http://codeforces.com/contest/735/problem/C 题意:给你一个数n表示有几个人比赛问最多能赢几局,要求两个比赛的人得分不能相差超过1即得分为2的只能和 ...

  10. lightoj 1248-G - Dice (III) (概率dp)

    题意:给你n个面的骰子,问扔出所有面的期望次数. 虽然这题挺简单的但还是要提一下.这题题目给出了解法. E(m)表示得到m个不同面的期望次数. E(m+1)=[((n-m)/n)*E(m)+1]+(m ...