利用python编程实现两excel表格的快速信息融合(xls文件的读和写)

今天有朋友问我一个EXCEL的问题,她拿到了两个表,现在需要对表的内容进行融合,如下图所示:




图一所示的表格给出了相应字段的信息,图二就是需要填写的表格。

问题是,图二中存在单元格合并的问题,并且每一个人的信息后面还跟着一行“小计”,所以简单的excel复制粘贴不管用了。尝试使用excel中的vlookup函数,也不管用。总之就是这个合并单元格的问题很麻烦。而图一中的信息有几千条,要是人工一个字段一个字段的粘贴,估计是要死人的节奏。于是我想尝试用python来编写一个读写xls文件的程序,实现数据融合操作。

其中也费了很大的劲,参考了网上xlrt和xlwt模块的读写操作,发现读很容易,写就麻烦了。用网上的代码无法实现写入已有xls文件的操作。后来参考https://www.crifan.com/python_append_new_data_into_existing_excel_xls_file/ 这边的方法,成功实现了对已有xls文件的写入操作。

上面总结如下:

想要,往已经存在的xls文件中,写入新的行,新的数据,对应的逻辑为:

用xlrd.open_workbook打开已有的xsl文件
注意添加参数formatting_info=True,得以保存之前数据的格式
然后用,from xlutils.copy import copy;,之后的copy去从打开的xlrd的Book变量中,拷贝出一份,成为新的xlwt的Workbook变量
然后对于xlwt的Workbook变量,就是正常的:
通过get_sheet去获得对应的sheet
拿到sheet变量后,就可以往sheet中,写入新的数据
写完新数据后,最终save保存


还需要注意的是合并单元格以后,写操作的代码为:

result.write_merge(x, x + m, y, w + n, string, sytle)

x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。其中,x,y,w,h,都是以0开始计算的。


具体代码如下:

# -*- coding:utf-8 -*- 
import xlrd
import xlwt
from xlutils.copy import copy

def set_style():
  style = xlwt.XFStyle() # 初始化样式
  
  borders = xlwt.Borders()
  borders.left = 1
  borders.right = 1
  borders.top = 1
  borders.bottom = 1
  borders.bottom_colour=0x3A    
  style.borders = borders

  font = xlwt.Font()
  font.name = 'Times New Roman'
  style.font = font


  return style

if __name__ == '__main__':
    
    '''程序默认目的数据表在第一张'''
    '''程序直接覆盖目的数据表,务必进行备份以免出现错误不可回退'''
    
    rows = 66 #源数据行数
    yuan = '1.xls' #源
    mudi = '2.xls' #目的
    
    start_row = 3 #合并单元格的起始行数
    leap = 9      #合并单元格的数目
    delta = 2     #合并单元格的变化行数
    
    data = xlrd.open_workbook(yuan)
    source = data.sheets()[0]

    oldwb = xlrd.open_workbook(mudi,formatting_info = True)
    newwb= copy(oldwb)
    result = newwb.get_sheet(0)
    

    for i in range(0,rows):
        row = source.row_values(i)
        result.write_merge(start_row,start_row+leap,0,0,i+1,set_style())
        for j in range(1,5):
            result.write_merge(start_row,start_row+leap,j,j,row[j],set_style())
        start_row += leap + 2
        if start_row == 14:
            leap -= delta 
        
            
           
    newwb.save('2.xls')
最后记得保存。

上面有些增量的设定是根据上述问题中表格形状的实际情况设定的,反正具体问题具体分析。本文重点解决如何写入已有xls文件的问题。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值