Python之Excel自动化处理(二)

一、Excel设置样式

image-20220311105729117

1.1、常用方法与属性

函数名&属性含义
xlwt.Font()创建字体样式
font.name设置字体类型
font.colour_index设置字体颜色
font.height设置字体大小
font.bold设置字体是否为加粗
font.underline设置字体下划线
font.italic设置字体斜体
xlwt.Alignment()创建字体位置样式
alignment.horz设置字体横向位置 #1左 2中 3右
alignment.vert设置字体纵向位置 #0上 1中 2下
row.height_mismatch设置是否开启行高设置 True为开启
row.height设置单元格行高,值为256*像素点
col.width设置单元格宽度,值为256*像素点
xlwt.Borders()创建边框样式
border.left设置左边框粗细
细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
border.right设置右边框粗细
细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
border.top设置上边框粗细
细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
border.bottom设置下边框粗细
细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
border.left_colour设置左边框颜色
border.right_colour设置右边框颜色
border.top_colour设置上边框颜色
border.bottom_colour设置下边框颜色
xlwt.Pattern()创建背景颜色样式
pattern.pattern设置背景样式
xlwt.XFStyle()设置总样式对象,用于应用到单元格
xlwt.easyxf()设置总样式对象

1.2、代码

1.2.1、字体
import xlwt


# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
ft = xlwt.Font()
ft.name = '微软雅黑' # 设置字体
ft.height = 30*20 # 设置字体大小
ft.bold = True # 设置字体加粗
ft.underline = True # 设置字体下划线
ft.italic = True # 设置字体斜体
ft.colour_index = 2 # 设置字体颜色


# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.font = ft
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/03_excel样式.xlsx')
1.2.2、边框
import xlwt


# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
boder = xlwt.Borders()
# 线的种类
# 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
boder.top = 1
boder.bottom = 6
boder.left = 4
boder.right = 5
# 线的颜色
boder.top_colour = 3
boder.bottom_colour = 4
boder.left_colour = 7
boder.right_colour = 6


# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.borders = boder
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/04_excel样式_边框.xlsx')
1.2.3、内容位置
import xlwt


# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
align = xlwt.Alignment()
# 设置 上下位置 0 上 1 中  2 下
align.vert = 1
# 设置 左右位置 1左 2中 3右
align.horz = 2


# 设置单元格大小
# 如果要设置单元格高度,需要开启设置高度属性
ws.row(2).height_mismatch= True # 开启设置高度权限
ws.row(2).height = 50 *256
ws.col(2).width = 50 * 50


# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.alignment = align
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/05_excel样式_内容位置.xlsx')
1.2.4、背景颜色
import xlwt


# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 实心颜色
pattern.pattern_fore_colour = 6


# 创建一个样式对象
style1 = xlwt.XFStyle()
style1.pattern = pattern


# 通过easyxf()设置样式
style2 = xlwt.easyxf('font:bold on,colour_index 5;align: vert center,horiz center')
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
ws.write(3,3,'吕小布',style2)
# 保存数据
wb.save('./create_data/06_excel样式_背景颜色.xlsx')

二、Excel数据汇总

image-20220311110039048

数据汇总是Excel中常用的功能,而在Python中使用通过遍历所有单元格即可实现

2.1、代码

import xlrd
from xlutils.copy import copy


def read_data():
  wb = xlrd.open_workbook('./base_data/data01.xlsx')
  sh = wb.sheet_by_index(0)
  fen_type = {}    # {a:110,b:300}
  count_price = []  # [1,2,3,4,5,6]


  for r in range(sh.nrows):
    count = sh.cell_value(r,3) * sh.cell_value(r,4)
    count_price.append(count)
    key = sh.cell_value(r,0)
    if fen_type.get(key):
      fen_type[key] += count
    else:
      fen_type[key] = count
  return fen_type,count_price # 各分类的总价值, 每个单品的总价值


def save(fen,count):
  wb = xlrd.open_workbook('./base_data/data01.xlsx')
  sh_t = wb.sheet_by_index(0)
  wb2 = copy(wb)
  sh = wb2.get_sheet(0)
  for r in range(sh_t.nrows):
    sh.write(r,sh_t.ncols,count[r])
  
  sh2 = wb2.add_sheet('汇总的数据')
  for i,key in enumerate(fen.keys()):
    sh2.write(i,0,key)
    sh2.write(i,1,fen.get(key))
  wb2.save('./create_data/05_汇总数据.xlsx')


if __name__ == "__main__":
  f,c = read_data()
  save(f,c)

问题

xlrd.biffh.XLRDError: Excel xlsx file; not supported

解决方案

更换版本

pip uninstall xlrd

pip install xlrd==1.2.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟之编程

您的支持将成为我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值