在工作中经过会遇到大量格式一致,内容不同的Excel表格文件,需要将这里面的内容整理到一个Excel文件中的情形。一般情况下,都是将这些Excel表格文件一个一个地打开,将里面的内容复制,然后粘贴到一个新的Excel表格文件中。不仅费时费力还容易出错,Excel文件比较少还好,要是有几十个几百个,那会把自己逼疯了去。今天,州的先生(https://zmister.com)来介绍一下使用Python快速处理这种繁琐的Excel整理工作,代码少,速度快,效果好!

一、应用场景

很多贸易类型的公司都会不定期地对公司的产品进行内购处理,既能给实惠予员工,又能清理库存。在这里,我们假设行政小姐姐需要制作一个“员工内购信息登记表”的模板Excel,让所有员工填好之后,私信发给自己,自己再进行整理汇总所有的内购信息。模板如下图所示:




python 复写excel python复制excel_批处理


原本以为没有多少员工会买,但是却收到了将近一百份的Excel。这要是一个一个复制粘贴,那不得整得手抽筋。


python 复写excel python复制excel_python 复写excel_02


嗯,是时候让Python上场了。

二、批处理Excel

在这里,我们需要使用到两个核心的模块:xlrdxlsxwriter

xlrd用于读取Excel文件内容,xlsxwriter用于创建和写入Excel内容。引入相关的模块:


import xlsxwriter
import os.path
import xlrd


我们首先实例化一个xlsxwriter的Workbook(),这将创建一个Excel文件:


workbook = xlsxwriter.Workbook('./员工内购信息登记表-汇总.xlsx')


然后,利用add_worksheet()方法添加一个工作簿:


worksheet = workbook.add_worksheet()


我们看到表格模板中的第一行是标题,它的格式是加粗居中,并且合并了几个单元格,我们通过代码来实现:


# 粗体居中格式
boold_center = workbook.add_format({'bold':True,'align':'center'})
# 写入标题
worksheet.merge_range("A1:E1", "员工内购信息登记表",boold_center)


在这里,我们通过add_format()方法创建了一个格式,通过merge_range()方法合并了几个单元格。下面是各个数据项的名称,它们是:部门、姓名、物品编号、数量和收货地址,均需要设置加粗格式:


# 添加一个粗体格式
bold = workbook.add_format({'bold': True})
# 在Excel中写入项目名称
worksheet.write('A2',"部门",bold)
worksheet.write('B2',"姓名",bold)
worksheet.write('C2',"物品编号",bold)
worksheet.write('D2',"数量",bold)
worksheet.write('E2',"收货地址",bold)


通过write()方法可以直接在指定单元格中写入内容,这样就完成了标题和数据项的写入,下面轮到实际的数据值了。

我们通过os.listdir()方法遍历指定目录下的文件,然后通过xlrd模块的open_workbook()方法打开遍历到的Excel文件,随后读取相应单元格的内容,接着将内容写入到新创建的Excel文件的工作簿,最后关闭新建的Excel:


n = 3
for i in os.listdir('./'):
    # print(n)
    if i.startswith('~') is False and i.endswith('xlsx'):
        # print(i)
        file = xlrd.open_workbook(i)
        info = file.sheet_by_index(0)
        department = info.cell(2,0).value # 部门
        name = info.cell(2,1).value # 姓名
        product_no = info.cell(2,2).value # 物品编号
        num = info.cell(2,3).value # 数量
        address = info.cell(2,4).value # 地址
        worksheet.write("A{}".format(n),department)
        worksheet.write("B{}".format(n),name)
        worksheet.write("C{}".format(n),product_no)
        worksheet.write("D{}".format(n),num)
        worksheet.write("E{}".format(n),address)
        print("完成{}数据提取".format(i))
        n += 1
workbook.close()


这样,就完成了这个Excel表格内容批处理代码的编写。

运行上述代码,几秒钟后,我们就可以得到一个名为“员工内购信息登记表-汇总.xlsx”的Excel文件:


python 复写excel python复制excel_Python_03


里面已经把所有Excel文件里面的数据都整理汇总到了一起,如下图所示:


python 复写excel python复制excel_Python_04


这样,我们就通过Python用几十行代码轻松地处理了这个繁琐的Excel整理工作。

学会了吗?欢迎留言讨论~