【python】初学者WE

对多个excel文件的汇总与样式写入(xlrd,xlwt,xls

2019-03-29  本文已影响26人  米兰的小铁匠

前言

正序

import os,xlrd,xlwt
import datetime


dateT = datetime.datetime.now()
# 当前日期
dateTstr = dateT.strftime("%Y%m%d")
dateTstr01 = dateT.strftime("%Y-%m-%d")
# 昨天日期
yesterday = (datetime.date.today() + datetime.timedelta(days = -1)).strftime("%Y-%m-%d")


# 获取目标文件夹下的子目录
dir_list = []
list_test = []
path = os.listdir('D:\\总数据')
# 找出所有xlsx的excel文件
for i in path:
    if '.xlsx' in i:
        list_test.append(i)
print(list_test)
print("在默认文件夹下有%d个文档哦" % len(list_test))

运行结果:(请填入有excel文件的目录!)

运行结果
# 下面是将所有文件读数据到三维列表cell[][][]中(不包含表头)
for i in range(ge):
    fname = list_test[i]
    bk = xlrd.open_workbook("D:\\总数据\\"+ fname)
    try:
        sh = bk.sheet_by_name("Sheet1")
    except:
        print("在文件%s中没有找到Sheet1" % fname)
    # nrows代表行数
    nrows = sh.nrows
    print(nrows)
    matrix[i] = [0] * (nrows - 1)
    # ncols代表列数
    ncols = sh.ncols
    print(ncols)
    # 储存数据,方便后期写入
    for m in range(nrows - 1):
        matrix[i][m] = ["0"] * ncols
    for j in range(1, nrows):
        for k in range(0, ncols):
            matrix[i][j - 1][k] = sh.cell(j, k).value

注意

汇总的完整代码 供上(不谢!)

import os,xlrd,xlwt
import datetime

dateT = datetime.datetime.now()
# 当前日期
dateTstr = dateT.strftime("%Y%m%d")
dateTstr01 = dateT.strftime("%Y-%m-%d")
# 昨天日期
yesterday = (datetime.date.today() + datetime.timedelta(days = -1)).strftime("%Y-%m-%d")
# 获取目标文件夹下的子目录
dir_list = []
list_test = []
path = os.listdir('D:\\总数据')
# 找出所有xlsx的excel文件
for i in path:
    if '.xlsx' in i:
        list_test.append(i)
print(list_test)
print("在默认文件夹下有%d个文档哦" % len(list_test))
# 实现读写数据
ge = len(list_test)
matrix = [None] * ge
# 下面是将所有文件读数据到三维列表cell[][][]中(不包含表头)
for i in range(ge):
    fname = list_test[i]
    bk = xlrd.open_workbook("D:\\总数据\\"+ fname)
    try:
        sh = bk.sheet_by_name("Sheet1")
    except:
        print("在文件%s中没有找到Sheet1" % fname)
    # nrows代表行数
    nrows = sh.nrows
    print(nrows)
    matrix[i] = [0] * (nrows - 1)
    # ncols代表列数
    ncols = sh.ncols
    print(ncols)
    # 储存数据,方便后期编写
    for m in range(nrows - 1):
        matrix[i][m] = ["0"] * ncols
    for j in range(1, nrows):
        for k in range(0, ncols):
            matrix[i][j - 1][k] = sh.cell(j, k).value

# 下面这些变量需要您根据自己的具体情况选择
# 添加表头
biaotou = ['数据1','数据2']

# 在哪里搜索多个表格
filelocation = "D:\\总数据\\"
# 当前文件夹下搜索的文件名后缀
fileform = "xlsx"
# 将合并后的表格存放到的位置
filedestination = "D:\\总数据\\"
# 合并后的表格命名为file
file = "汇总表"

# 下面是写数据到新的表格test.xls中哦

filename = xlwt.Workbook()
# 设置新表的名称
sheet = filename.add_sheet("汇总")
# 下面是把表头写上
for i in range(0, len(biaotou)):
    sheet.write(0, i, biaotou[i])
    # 求和前面的文件一共写了多少行
zh = 1
for i in range(ge):
    for j in range(len(matrix[i])):
        for k in range(len(matrix[i][j])):
            sheet.write(zh, k, matrix[i][j][k])
        zh = zh + 1

print("我已经将%d个文件合并成1个文件,并命名为%s.xls" % (ge, file))
filename.save(filedestination + file + ".xls")
工作簿2 汇总表

目前我们已经对多个文件进行了汇总操作,但是对最终呈现的效果需要进一步要求,为表格内容进行样式设置;

# 读取指定目录的Excel文件
workfile = xlrd.open_workbook("D:\\总数据\\汇总表.xls")
table = workfile.sheet_by_name(u'汇总')#通过名称获取
t1 = table.row_values(0)#获取第一行的值,以列表形式返回
t2 = table.col_values(0)#获取第一列的值,以列表
# 形式返回
print(t2)
# 获取excel文件的行数与列数
nrows = table.nrows#行数
ncols = table.ncols#列数
workbook = xlsxwriter.Workbook("D:\\总数据\\汇总表.xls")  # 创建一个excel文件
worksheet = workbook.add_worksheet(u'汇总')  # 在文件中创建一个名为TEST的sheet,不加名字默认为sheet1

'''
ItemStyle = workbook.add_format({
        'font_size':10,                #字体大小
        'bold':1,               #是否粗体
        'bg_color':'#101010',          #表格背景颜色
        'font_color':'#FEFEFE',        #字体颜色
        'align':'center',              #对齐方式,left,center,rigth,top,vcenter,bottom,vjustify
        'top':2,                       #上边框,后面参数是线条宽度
        'left':2,                      #左边框
        'right':2,                     #右边框
        'bottom':2                     #底边框
        'text_wrap':1       #自动换行,可在文本中加 '\n'来控制换行的位置
        'num_format':'yyyy-mm-dd'      #设定格式为日期格式,如:2017-07-01
})
'''
# 设置一个加粗的格式对象,左右居中,上下居中,单元格宽度,字体大小
bold = workbook.add_format({'bold': False, 'align': 'center', 'valign': 'vcenter', 'border':1, 'font_size':11})
# 设置一个加粗的格式对象,左右居中,上下居中,单元格宽度,字体大小,背景颜色
bold_test = workbook.add_format({'bold': True, 'align': 'center', 'valign': 'vcenter','border':1, 'font_size':11,'bg_color':'#D9D9D9'})
# 设置表头样式
t = table.row_values(0)
for e,data_t in enumerate(t):
    # 设置行高
    worksheet.set_row(0, 20, bold_test)
    # 写入excel
    worksheet.write(0, int(e), data_t, bold_test)
# 设置表头以下的表格样式
for i in range(1,int(nrows)):
    t1 = table.row_values(i)  # 获取第i行的值,以列表形式返回
    print(t1)
    for j,data in enumerate(t1):# 输出循环次数
        # 设置行高
        worksheet.set_row(int(i), 20, bold)
        # 写excel
        worksheet.write(int(i) , int(j), data, bold)  # 使用行列的时候第一行起始为i,所以i,j代表着第i+1行的第j+1列
# 设置列宽(A到B列)
worksheet.set_column('A:B', 20)
workbook.close()
print('————excel设置成功————')

个人小话

“你以后想成为什么样的人? ”
“什么意思,难道我以后就不能成为我自己了吗? ”
——阿甘正传

进化图
上一篇 下一篇

猜你喜欢

热点阅读