背景: 我们有项目问题记录的表格,每一个项目都会反馈来一个execl表格,表格的格式都是统一的,我需要定期把这些项目上反馈来的表格进行统计,但是表格非常多,我要每个都统计出来在来相加,这样操作很麻烦,所以我想有没有一个方法可以把所有的execl 都合并成为一个execl ,然后再去做统计分析 。这样会节省不少时间。最后我发现可以用python 来做合并execl的事情。
1、目录结构
- util : 是工具包,里面是封装的execl的类,实现了execl的基本操作
- sources : 这里存放的需要进行合并的所有execl文件
- results : 存放合并后的execl文件
- main : 主函数 实现execl合并的方法
2、实现过程
ExcelUtil类的实现
在util包里面创建excel_util.py文件
导入相关的模块,实现ExcelUtil的初始化方法
初始化方法的时候,要传入execl文件的路径excel_path,不传是使用一个默认地址,index 是指定execl的哪个sheet,不传默认操作的是第一个sheet
# --coding:utf-8--
# ! python3
import xlrd
from xlutils.copy import copy
import os
import json
import codecs
class ExcelUtil:
def __init__(self, excel_path=None, index=None):
if excel_path == None:
self.excel_path = "E:\\python\\问题列表文档\\execl合并\\results\\result.xlsx"
else:
self.excel_path = excel_path
if index == None:
self.index = 0 # 0 代表第一个sheet
else:
self.index = index
self.data = xlrd.open_workbook(self.excel_path) #将整个execl内容读到self.data里面
self.table = self.data.sheets()[self.index] #在从data里面获取指定sheet的内容
获取sheet中的行数
def get_lines(self):
# 行数
rows = self.table.nrows
if rows >= 1:
return rows
return None
获取sheet中某个单元格的数据,需要传入行和列
def get_col_value(self, row, col):
# print
if self.get_lines() > row:
data = self.table.cell(row, col).value
return data
return None
获取整个sheet中的数据,并且存放到一个list中
获取sheet数据,按照每行一个list,添加到一个大的list里面
def get_data(self):
result = []
rows = self.get_lines()
if rows != None:
for i in range(rows):
col = self.table.row_values(i)
result.append(col)
return result
return None
给单元格写入数据,需要传入行和列,还有要写入的内容
def write_value(self, row, col, value):
read_value = xlrd.open_workbook(self.excel_path)
write_data = copy(read_value) #将execl的内容读取出来拷贝一份
write_data.get_sheet(self.index).write(row, col, value) #写入数据
write_data.save(self.excel_path) #保存数据
添加新的sheet, 要传入sheet的名称
def add_excel_sheet(self,sheetname):
rb = xlrd.open_workbook(self.excel_path, formatting_info=True)
# make a copy of it
wb = copy(rb)
# add sheet to workbook with existing sheets
wb.add_sheet(sheetname)
wb.save(self.excel_path)
execl 的合并
在main包下面创建combine.py的文件
合并execl 要用到pandas模块
# --coding:utf-8--
# ! python3
import os
import pandas as pd
class CombineExcel(object):
'''合并sources目录下的所有excel文件'''
def __init__(self,pwd=None):
'''pwd为要合并的当前目录'''
if pwd == None:
self.pwd = 'sources'
else:
self.pwd = pwd
合并的方法,需要传入index指定哪个sheet, 合并后的文件保存路径,以及合并的sheet名称
def combine_all(self,index,file_name,re_sheetname='sheet1'):
'''合并文件夹下的excel
index:指定要合并excel文件的哪个sheet,取值0,1,2,.......
file_name:合并后生成的excel文件的保存路径
re_sheetname:合并后sheet的名字,默认为sheet1
'''
# 新建列表,存放文件名
file_list = []
# 新建列表存放每个文件数据(依次读取多个相同结构的execl文件并创建DataFrame)
dfs = []
for root, dirs, files in os.walk(self.pwd):
for file in files:
file_path = os.path.join(root, file)
file_list.append(file_path)
print(file_path)
df = pd.read_excel(io=file_path, sheet_name=index, header=None)
dfs.append(df)
df = pd.concat(dfs)
df.to_excel(file_name, sheet_name=re_sheetname, index=False)
通过CombineExcel 类就可以把execl合并,合并后还需要统计分析,需要用到ExcelUtil类的方法。
数据统计分析
在main包中创建了statistics_main.py 就是来对合并后的execlt统计分析的。文章来源:https://www.toymoban.com/news/detail-565405.html
#--coding:utf-8--
#! python3
import sys
sys.path.append('E:\python\问题列表文档\execl合并')
from util.excel_util import ExcelUtil
from main.combine import CombineExcel
import os
import xlrd
from xlutils.copy import copy
class Statistics(object):
'''统计每个项目问题列表的解决情况,和每个组的问题解决情况统计'''
def __init__(self,excel_path,index):
self.excel_path = excel_path
self.index = index
self.ex = ExcelUtil(self.excel_path, self.index)
这里的统计分析代码比较多,而且统计的代码跟自己的execl的内容有关,需要自己去实现,但是都是对execl的操作,方法在ExcelUtil中都已经实现了,只需要调用即可。文章来源地址https://www.toymoban.com/news/detail-565405.html
到了这里,关于用python合并execl做统计分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!