每日10行代码169:使用xlwings修改excel格式,设置中国式报表

背景:工作上,经常需要从数据库产出报表,由于这种报表需要提交给领导看,所以对格式的要求要比平常高不少,每次设置格式虽然花的时间不算太多,但是长期下来,积少成多,花在格式上的时间就会太多,为了方便调整格式,我写了下面的脚本,主要功能是设置中国式报表,具体为:表格上面有一行合并居中的标题,标题下面左边是查询日期,单位,表格最下面有合计行。

#python3

import xlwings as xw
path = r'E:\当前工作\分单位0624b1.xlsx'
wb = xw.Book(path)
sht = wb.sheets['SQL Results']

# 开始格式调整

# 1. 设置字体大小为14
sht['A1:L17'].font.size = 14
# 2.自动调整行高列宽
sht.autofit('c')

# 4.在开始插入两行
if sht['A2'].value is not None:
    sht.api.Rows(1).Insert()
    sht.api.Rows(1).Insert()

# 5. 输入表头
sht['A1'].value='分单位'
sht['A1'].font.size= 18
sht.range('A1:L1').api.Merge() 

# 把文字居中
sht['A1'].api.HorizontalAlignment = -4108 

sht['A1'].font.name= '黑体'
sht['A2'].value='查询日期:2022年6月24日'
sht['A2'].font.name= '黑体'
sht['A2'].font.size= 14

sht['L2'].value='单位:户,万元'
sht['L2'].api.HorizontalAlignment=-4152    # 把文字右对齐
sht['L2'].font.name= '黑体'
sht['L2'].font.size= 14


# 3.把文本转成数字 
# sht['c2'].value = int(sht['c2'].value)+0 
# sht.range('C2').api.NumberFormatLocal = "0"

for i in sht.range('c4:l17'):
    if i.value is None:
        i.value=0
    else:
        i.value=float(i.value)+0


columns_letters = ['C','D','E','F','G','H','I','J','K','L']
for c in columns_letters:
    sht[c+'18'].value= "=sum({}4:{}17)".format(c,c)


for i in range(7,13):
    sht.range('A3:l18').api.Borders(i).LineStyle=1

sht['b18'].value='合计'
sht['h18'].value='=G18/F18*100'
sht['h18'].api.NumberFormatLocal = "0.00"

原格式:
在这里插入图片描述
调整后:
在这里插入图片描述

主要改动格式如下:

  1. 合并居中
  2. 设置单元格的值
  3. 设置边框
  4. 自动调整行高列宽
  5. 设置字体类型和字体大小
  6. 把文本转数字
  7. 设置数字的小数位数
  8. 设置单元格的公式

几个心得体会:

  1. xlwings可以直接调用windows中的api,所以好多强大 的功能都是通过这个实现。
  2. 有些关键的操作,要注意放置的位置 ,比插入行。插入行后,有些单元格的位置就变了,这时设置格式的区域就要相应变化,因此为了程序能反复测试运行,最好是在插入行前加一个判断 。
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值