【Python】python一键合并上千个Excel表

文章目录

  • 一、老板的需求总是莫名奇妙
    • 二、别人不帮你,你帮你自己
      • 三、上干货,看不懂,我买飞机票给你
        • 四、上代码:(每一步都有注释,完全不用担心,全网最良心)
        • 五、不是程序员,也别慌
            • 六、分享交流

一、老板的需求总是莫名奇妙

  • 老板需求:
       _一天老板说,嘿!放牛娃,将这些excel表合并到一个总表里,下班前交给我_
       老板话刚讲完,我心里就想,这还不简单么,excel不就是有合并表的功能么!!简单的要死!哈哈哈哈哈哈
       可当我拿到excel表后,自己傻眼了,上千个,一两三个在excel里还行,这么多咋搞?????不信看下图
    【Python】python一键合并上千个Excel表【Python】python一键合并上千个Excel表

  • 搬救兵:
       顿时我就慌了,这么多我真没有在Excel里合并过,我就找了同事,同事说这还不简单,就在Excel里面写脚本呀!!,我暗暗的说,我不会,然后他甩了一句话给我,_你不会你活该,谁叫你不学呀,你不会百度呀!!反正领导不是让我做,气死你_
       虽然我知道我的同事性格就是这样,但是我在那刻我还是很想打他,真想打他一顿,但是最后我只说了一句,我就不用Excel,我也能够搞定,你有什么可豪横的

二、别人不帮你,你帮你自己

  • 有事找度娘:
       首先,我在网上,csdn找了相关的文章,大多都是鱼龙混杂,可能作者自己会,但是分享给人,别人却看不懂,完全按照作者的来操作,却得不出结果,失败告终
  • 程序员就拿出自己的本领
       寻找无果后,我决定自己写一个python程序,将思路捋了一波后,就开始着手写了

三、上干货,看不懂,我买飞机票给你

  • 思路分析一波:

`"""

思路分析:

1. 创建一个空表名叫"总表",表格形式须和合并表的一样

2. 获取需要合并文件夹中的所有excel表的名字(文件名)

3. 开始遍历excel表

4. 先读取数据,然后写入事先创建好总表中

5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。

6. 遍历结束,保存总表的数据

"""`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

  • 所需技能包

如果上述说的不会,咋办??没事!!我帮你找出来了

  • 相关技能包文章:
    1)python操作Excel表让你体验光速便捷—读操作

  1. python操作Excel表让你体验光速便捷—写操作
  2. python操作Excel表让你体验光速便捷—写操作之xlutils库(推荐使用)
  3. python操作Excel表让你体验光速便捷—读写操作之pandas库(神来之笔,带你飞,全套)

四、上代码:(每一步都有注释,完全不用担心,全网最良心)

完整代码:

`import os

import xlwt

import xlrd

import xlutils.copy

import time

"""

公司老板需求:

1. 将上千个Excel表合并成一个表里

2. 不管你用什么方法,实现效果就行

"""

# #################################### 代码走起来呀!!!

"""

思路分析:

1. 创建一个空表名叫"总表",表格形式须和合并表的一样

2. 获取需要合并文件夹中的所有excel表的名字(文件名)

3. 开始遍历excel表

4. 先读取数据,然后写入事先创建好总表中

5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。

6. 遍历结束,保存总表的数据

"""

"""

项目运行:

1. 将所有需要合并的表放到一个文件夹中,名叫excels

2. autoMerge.py文件和excels文件夹同级

3. 运行该.py文件,会在把合并表放到destDir夹中

"""

# 1.总表初始化(不友好,还需要自行写好表头列表,对非程序员不友好)

def initExcel(path,excelTitle,excel_sheet_Name):

"""

:param path: 合并总表的路径

:param excelTitle: 总表的表头

:param excel_sheet_Name: 合并总表的sheet名称

:return: 返回总表是否初始化成功

"""

try:

# 创建一个工作簿

book = xlwt.Workbook(encoding="utf-8")

# 创建表单

sheet = book.add_sheet(excel_sheet_Name)

# 写入表头

for i in range(0,len(excelTitle)):

sheet.write(0, i, excelTitle[i])

book.save(path)

return True

except Exception as e:

return False

# 1.1 总表初始化(用来解决上面的问题)

def initExcel2(destExcel_path, sourceExcel_path,total_sheet_name):

"""

:param destExcel_path: 合并总表excel的路径

:param sourceExcel_path: 需要合并excel的路径

:param total_sheet_name: 合并总表后sheet的名字

:return: 返回False or True

"""

try:

# 创建一个工作簿

book = xlwt.Workbook(encoding="utf-8")

# 创建表单,并给表单起个名字

sheet = book.add_sheet(total_sheet_name)

# 获取待需合并excel的所有文件

excel_name_list = get_All_Excelname(sourceExcel_path)

# 一个待合并execl的路径

excel_path = sourceExcel_path + "/" + excel_name_list[0]

# 获取excel的sheet

excel_sheet = get_excel_sheet(excel_path)

# 获取excel的表头数据

excel_title_list = excel_sheet.row_values(0)

# 写入表头

for i in range(0,len(excel_title_list)):

sheet.write(0, i, excel_title_list[i])

book.save(destExcel_path)

return True

except Exception as e:

return False

# 2.获取需要合并的所有的excel文件名

def get_All_Excelname(path):

"""

:param path: 待合并excel文件的路径

:return:

"""

excelName_list = os.listdir(path)

# print(excelName_list)

return excelName_list

# 返回excel表的sheet对象

def get_excel_sheet(path):

# 打开指定路径的excle表

book = xlrd.open_workbook(path)

# 获取excle中的表单

sheet = book.sheet_by_index(0)

# 返回sheet对象

return sheet

# 返回总表的wtbook,sheet对象

def get_total_excel_sheet(path):

"""

:param path: 存放总表的path

:return:

"""

book = xlrd.open_workbook(path, formatting_info=True)

wtbook = xlutils.copy.copy(book)

wtsheet = wtbook.get_sheet(0)

return wtbook,wtsheet

# 4. 开始遍历(合并excel表)

def writeExcel(destExcel_path,source_path,excelName_list):

"""

:param destExcel_path: 合并总表存放的路径

:param source_path: 需要合并excel的路径

:param excelName_list: 需要合并excel表的文件名称

:return:

"""

# 用来记录总表中的行数

total_excel_row = 1

# 获取总表的book,sheet

total_book,total_sheet = get_total_excel_sheet(destExcel_path)

for excelName in excelName_list:

# 文件路径

excelPath = source_path + excelName

# 获取表的sheet对象

sheet = get_excel_sheet(excelPath)

# 获取行数

n_rows = sheet.nrows

# 开始遍历读取数据,并写入数据

for row_index in range(1,n_rows):

# 获取一行的数据,列表形式

row_data_list = sheet.row_values(row_index)

# 将数据写入到总表中

for j in range(0,len(row_data_list)):

total_sheet.write(total_excel_row,j,str(row_data_list[j]))

# 每写一行,总表行数加1

total_excel_row = total_excel_row + 1

total_book.save(destExcel_path)

print("数据合并已完成")

print("合并后的数据共有%d条" % (total_excel_row - 1))

# 创建文件夹

def makeDir(path):

"""

:param path: 传入需要创建文件夹的路径

:return:

"""

if not os.path.exists(path):

os.mkdir(path)

def main():

# 待需合并的excel文件夹路径

source_excel_path = "./excels/"

# 存放合并后的excel表文件夹路径

dest_dir = "./destDir"

# 创建文件夹

makeDir(dest_dir)

# 合并excel表名

total_excel_name = "总表.xls"

# 合并表存放路径

total_excel_path = dest_dir + "/" + total_excel_name

# 合并总表中的sheet的名字

total_excel_sheet_name = "汇总表"

# 初始化表

flag = initExcel2(total_excel_path,source_excel_path,total_excel_sheet_name)

if flag:

excelName_list = get_All_Excelname("./excels")

# 打印有多少个excel表

print("总共有%d个excel表需要合并" %len(excelName_list))

# 写数据

writeExcel(total_excel_path,source_excel_path, excelName_list)

else:

print("初始化表失败")

if __name__ == '__main__':

main()

time.sleep(3)`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

* 22

* 23

* 24

* 25

* 26

* 27

* 28

* 29

* 30

* 31

* 32

* 33

* 34

* 35

* 36

* 37

* 38

* 39

* 40

* 41

* 42

* 43

* 44

* 45

* 46

* 47

* 48

* 49

* 50

* 51

* 52

* 53

* 54

* 55

* 56

* 57

* 58

* 59

* 60

* 61

* 62

* 63

* 64

* 65

* 66

* 67

* 68

* 69

* 70

* 71

* 72

* 73

* 74

* 75

* 76

* 77

* 78

* 79

* 80

* 81

* 82

* 83

* 84

* 85

* 86

* 87

* 88

* 89

* 90

* 91

* 92

* 93

* 94

* 95

* 96

* 97

* 98

* 99

* 100

* 101

* 102

* 103

* 104

* 105

* 106

* 107

* 108

* 109

* 110

* 111

* 112

* 113

* 114

* 115

* 116

* 117

* 118

* 119

* 120

* 121

* 122

* 123

* 124

* 125

* 126

* 127

* 128

* 129

* 130

* 131

* 132

* 133

* 134

* 135

* 136

* 137

* 138

* 139

* 140

* 141

* 142

* 143

* 144

* 145

* 146

* 147

* 148

* 149

* 150

* 151

* 152

* 153

* 154

* 155

* 156

* 157

* 158

* 159

* 160

* 161

* 162

* 163

* 164

* 165

* 166

* 167

* 168

* 169

* 170

* 171

* 172

* 173

* 174

* 175

* 176

* 177

* 178

* 179

* 180

* 181

* 182

* 183

* 184

* 185

* 186

* 187

* 188

* 189

* 190

看到这,都不留个赞说不过去了吧吧!!!!

运行结果:
【Python】python一键合并上千个Excel表
【Python】python一键合并上千个Excel表

五、不是程序员,也别慌

   为了顾及非程序也能够运行这个程序,我将它打包成一个自动合并工具,即.exe程序,看图!!

【Python】python一键合并上千个Excel表
只要按照说明书那样操作,那就完事了(非常简单,双击运行即可),看到这,再不点个赞,我可要打人了哈!!!!!!!!

这么好用的工具如何获取呢?
   关注我的公众号,阅读这篇文章–>python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架),文章末尾,赞赏1块钱截图并发我微信,我本人亲自发你哟!!

   吐槽一波:我知道有些大佬肯定会喷,会唾弃我,如果你介意那1块钱,那就复制上面那代码,直接运行就好,没有必要喷哟!毕竟原创不易呀,吃土年代,需要生存。!!!!

   有问题可以留言交流呀!!!!,也可以分享你的解决方案!!!

以上是 【Python】python一键合并上千个Excel表 的全部内容, 来源链接: utcz.com/a/90596.html

回到顶部