【办公自动化】用python的xlwings秒完excel工作喂饭级系列--批量修改数据格式(2)
前一期的内容,我们掌握了如何批量修改数据格式(1),相信您还想知道更多的批量处理是如何操作的。
今天,我们来学习下怎么用python的xlwings做批处理,这期的内容是如何批量修改表格数据格式(2)。
场景
上期您已经将10个报表的数据格式,进行了统一的修改。但是,很快您就想将这种格式做成模板的形式,这样下次您只需要运行代码,就能批量地生成多个相同格式的报表了。
于是您这次要做的,就是将格式代码修改地更加通用,也符合高效报表的标准。
思维
跟修改表头格式一样,我们也可以用相同的方法来完成修改数据格式的工作。不同的地是我们要操作的表头以下的数据格式,我们相应的代码来定位到这些位置就可以。
方法
xlwingsy已经为我们提供了相应的修改格式的方法,那就是sheet.range('A1').api.font,sheet.range('A1').color,
在下面我们会使用他们来帮我们完成修改格式的任务。
假如要写入格式的文件将被创建在d:\\财务\\工资发放 这个文件夹内,那么我们来看实现的代码。
为了让我们的报表更加符合要求,我们需要对上期完成的格式基础上,大动手术。
首先,要将第一行的数据清除,在这里我们放入标题。
接着,把所有的数据下移,并设定格式。
我们定位的数据内容在A3以下(包括A3)。并且为了更加方便地观察,我们首先在那10个文件中输入一些数据。
代码
import os
import xlwings as xw
file_path='d:\\财务\\工资发放\\'
file_list=os.listdir(file_path)
app=xw.App(visible=True,add_book=False)
for i in file_list:
book=app.books.open(file_path+'\\'+i)
sheet=book.sheets[0]
sheet.range('A1:E1').api.Font.Name='微软雅黑'
sheet.range('A1:E1').api.Font.Size=14
sheet.range('A1').value='工资发放明细表'
sheet.range('A2:E2').api.Font.Name='微软雅黑'
sheet.range('A2:E2').api.Font.Size=12
sheet.range('A2:E2').color=xw.utils.rgb_to_int((229,196,148))
sheet.range('A2:E2').value=['编号','姓名','考核','金额','状态']
sheet.range('A3:E3').api.Font.Name='宋体'
sheet.range('A3:E3').api.Font.Size=11
sheet.range('A3:E3').color=xw.utils.rgb_to_int((255,255,255))
sheet.range('A3:E3').value=['1001','tom',95,2000,'转账成功']
sheet.range('A1:E1').merge()
book.save()
book.close()
app.quit()
代码效果
如果您的程序正确运行了就会看到下面的效果:
代码详解
第1行:导入os这个库,用来定位到我们要操作的文件
第2行:导入xlwings这个库,用来操作我们的报表文件
第3行:用来存储要创建的excel报表的位置
第4行:利用os库查找出我们要操作的文件列表
第5行:用xlwings创建excel程序(App),将用它来操作我们的excel报表文件
第6-22行:这里大家看到了这几行是缩进到了for循环里面,在python中这种缩进一定要注意,缩进不对会导致错误。
首先设置标题的文字类型和大小,以及它的值:
sheet.range('A1:E1').api.Font.Name='微软雅黑'
sheet.range('A1:E1').api.Font.Size=14
sheet.range('A1').value='工资发放明细表'
接着设置表头的文字类型和大小,以及该行的颜色和它的值:
sheet.range('A2:E2').api.Font.Name='微软雅黑'
sheet.range('A2:E2').api.Font.Size=12
sheet.range('A2:E2').color=xw.utils.rgb_to_int((229,196,148))
sheet.range('A2:E2').value=['编号','姓名','考核','金额','状态']
然后设置数据的文字类型和大小,以及该行的颜色和它的值:
sheet.range('A3:E3').api.Font.Name='宋体'
sheet.range('A3:E3').api.Font.Size=11
sheet.range('A3:E3').color=xw.utils.rgb_to_int((255,255,255))
sheet.range('A3:E3').value=['1001','tom',95,2000,'转账成功']
最后合并第一行:
sheet.range('A1:E1').merge()
相比上期内容,这里的修改处是,我们使用了sheet.range('A1:E1').merge(),来合并连续的单元格。
注意事项
1,在写入数据的时候,如果是字符类的,我们需要用''引起来,如果是数字等非字符类的,就直接输入,每个单元格之间的数据用“,”,来隔开。注意所有的代码都要在英文输入法下敲入,除了''中的字符。
2,记得在我们写完数据后,最后再合并单元格,否则会更改该行以下的格式,就会造成如下图的样子:
3,为了防止我们更改了某行的背景色,而让系统默认该颜色值,我们在修改后,要记着将背景色给恢复回来,如下代码所示:
sheet.range('A2:E2').color=xw.utils.rgb_to_int((229,196,148))
sheet.range('A2:E2').value=['编号','姓名','考核','金额','状态']
前面因为修改了背景色,所以后面万一期间,我们恢复了回来(加粗显示的部分)
sheet.range('A3:E3').api.Font.Name='宋体'
sheet.range('A3:E3').api.Font.Size=11
sheet.range('A3:E3').color=xw.utils.rgb_to_int((255,255,255))
sheet.range('A3:E3').value=['1001','tom',95,2000,'转账成功']
4,命令模式下(就是一行行地输入的这种模式),当您敲错了代码,就会收到提示,这对新手来说比较好。因为一行一行地输入,当您看到一行行的代码没有报错时,也会获得一些小小的成功感。
5,如果不喜欢用命令的方式来写,您也可以通过文件菜单下的新建文件来打开编辑代码窗口。这样的好处也比较明显,就是您可以在写完代码后,就能保存下来,之后直接打开使用了;也可以将现有的代码拷入编辑窗口,就能运行。
6,在命令模式下,在您输入完整个程序后,需要按回车键,直到光标到达最左为止,这时候代码就会被运行。
7,xls是excel2003及以前版本生成的文件格式,而xlsx是excel2007及以后版本生成的文件格式。您需要知道自己系统中安装的excel的版本,对应地修改代码。
分析
关键的步骤主要有:用xlwings创建App并用来创建excel报表文件,用for循环来一个个打开excel报表,并修改数据格式。
本次我们比较陌生的代码只是合并单元格的代码,即:sheet.range('A1:E1').merge()。
拓展
我们可以用sheet.range('A1:E1').merge()来合并第一行的数据,同时也可以用sheet.range('A1:E1').unmerge()来解除合并。
好的颜色决定我们的报表好不好看,是非常关键的,所以在这里贴上一张用来查找颜色的图,希望给您写代码时有所帮助。
因为,代码有些多,当然都是重复性的。所以我们打算将调整数据的对齐等内容,在下一期中来学习。
最后
下期我们将继续看怎么批量修改Excel报表的数据格式,主要在于如何修改对齐方式等,总之,我们的目标是让它变得既美观又实用。希望您能来哦!有什么问题,请发在评论区哦。
编辑器的代码框有些问题,所以代码有些乱,请见谅!
其他内容链接
如果您还没有安装xlwings,请您看下面的,详细的内容:
如果您想知道如何用python的xlwings批量写数据到多个报表,请看下面:
如果您想全面地 了解xlwings,可以看下面的内容: