excel 同格式文件python 拼接

今天帮一个朋友处理了几千个小文件拼接,开始使用excel自带功能,发现很容易出现各种小问题,于是就用python写了一下,这类的操作有共通性,所以做一个记录。

#相同格式excel文件合并程序,最简易程序,未做容错处理
import os
import xlrd  #读Excel文件包
import xlsxwriter   #将写Excel包

#打开excel文件
def openExcel(file):
    f = xlrd.open_workbook(file)
    return f

#获取excel中所有的sheet表
def getSheet(f):
    return f.sheets()


#读取文件内容,排除“合计”行,拼接文件内容,并返回行内容
def getFile(file,shnum):
    f=openExcel(file)
    table=f.sheets()[shnum]
    num=table.nrows
    keyword="合计"
    for row in range(4,num):
        rdata=table.row_values(row)
        row_values = [str(i) for i in table.row_values(row)]
        if len(''.join(row_values)) and (keyword not in ''.join(row_values)):
            datavalue.append(rdata)
    return datavalue

#获取sheet表的个数
def getshnum(f):
    x=0
    sh=getSheet(f)
    for sheet in sh:
        x+=1
    return x

#函数入口
if __name__=='__main__':
    #定义要合并的excel文件列表
    source_dir = "F:/工资调整另一部分"
    allxls = os.listdir(source_dir)
   # allxls=['F:/test/excel1.xlsx','F:/test/excel2.xlsx'] #列表中的为要读取文件的路径
    #存储所有读取的结果
    datavalue=[]
    filename = os.path.join(source_dir, allxls[0])
    wb = xlrd.open_workbook(filename)
    sheet = wb.sheets()[0]
    #以下为获取表头部分,一般没有必要,可以合并完成后,直接手动黏贴
    datavalue.append(sheet.row_values(0))
    datavalue.append(sheet.row_values(1))
    datavalue.append(sheet.row_values(2))
    datavalue.append(sheet.row_values(3))
    num=0;
    for fl in allxls:
        num+=1
        fname=os.path.join(source_dir, fl);
        print("[remind]当前文件是"+fname+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~")#此行用于排查错误,
        # 因为中间报了lrd.biffh.XLRDError: Unsupported format,
        # or corrupt file: Expected BOF record; found b'\x03ccz    ',
        # 后经排查,是因为多了一个隐藏文件,删除后问题解决
        f=openExcel(fname)
        x=getshnum(f)#获取sheet的个数
        for shnum in range(x):
            print("[remind]正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容")
            rvalue=getFile(fname,shnum)
    print("[remind]读取完成.共读取"+str(num)+"个文件")
    #定义最终合并后生成的新文件
    endfile='F:/all11.xlsx'
    wb=xlsxwriter.Workbook(endfile)
    #创建一个sheet工作对象
    ws=wb.add_worksheet()
    for a in range(len(rvalue)):
        for b in range(len(rvalue[a])):
            c=rvalue[a][b]
            ws.write(a,b,c)
    wb.close()

    print("[remind]文件合并完成")

代码里面有基本的注释。正常情况代码可以直接使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值