前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用xlrd、xlrt和xlutils读写xls文件

使用xlrd、xlrt和xlutils读写xls文件

作者头像
Hsinyan
发布2022-06-19 17:56:52
2.3K0
发布2022-06-19 17:56:52
举报

前言

记得我刚学Python的时候,我看了几个教程,好像都喜欢先教你怎么用Python操作Excel文件,说实话刚开始有被惊艳到,但是后来觉得操作起来也挺麻烦就没细学。再之,我在日常中对读取Excel文件进行数据分析的需求比较多,遇到这些问题肯定用的是pandas这个神器,读写Excel/csv文件都是极佳的。但是今天写项目需求的时候,需要往一个模板里面写入数据,这个时候pandas就爱莫能助了,还是得使用xlrdxlwtxlutils三件套来解决战斗。

理清三者关系

xlrdxlwtxlutils是用Python处理Excel文档(*.xls)的高效率工具。

其中xlrd只能用于读取xls文件,xlwt只能新建xls文件。等等,我上面的需求不是说要实现读取模板文件并且进行填写吗,xlutils就起到了一个纽带的作用,xlutils能够将xlrd.Book转为xlwt.Workbook,从而可以在现有xls文件的基础上进行修改。

示例代码如下。

代码语言:javascript
复制
import xlrd,xlwt
from xlutils.copy import copy

rd = xlrd.open_workbook("files/template.xls",formatting_info=True)  # 打开文件
workbook = copy(rd)  # 复制
worksheet = workbook.get_sheet(0)  # 获取第一个sheet

值得注意的是使用xlutils.copy方法得到的xlwt对象获取sheet的函数是get_sheet(index),跟原生的xlwt打开文件后获取sheet表不太一样。

如何设置字体、居中、大小、边框等等

代码语言:javascript
复制
def setStyle(name, height, color, bold=False, align=True, border=False):
    """
    xlwt字体写入设置
    """
    style = xlwt.XFStyle()  # 初始化样式
    font = xlwt.Font()  # 为样式创建字体
    # 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁
    font.name = name
    # 设置字体颜色
    font.colour_index = color
    # 字体大小
    font.height = height
    # 字体加粗
    font.bold = bold
    # 定义格式
    style.font = font

    if border:
        # 框线
        borders = xlwt.Borders()
        borders.left = 1
        borders.right = 1
        borders.top = 1
        borders.bottom = 1
        style.borders = borders

    if align:
        # 设置单元格对齐方式
        al = xlwt.Alignment()
        # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
        al.horz = 0x02
        # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
        al.vert = 0x01
        style.alignment = al

    return style

写入某个单元格

代码语言:javascript
复制
style = setStyle(name='宋体',height=240,color=256,bold=False,align=False,border=False)
worksheet.write(1,1,'text',style)

这里的height代表字号大小,换算公式为height = \text{word字号}\times20

name代表字体,boldalignborder分别控制是否加粗、居中对齐,所有边框。

write()函数前两个参数为写入单元格的位置,值得注意的是第二个数值参数是从0开始的。

写入合并的单元格

代码语言:javascript
复制
worksheet.write_merge(1, 1, 5, 6, '审核证明人:', style)

其中前两个参数代表合并的函数,两个都为1即代表不跨行,写入到第一行,后面的5和6代表第6列和第7列进行了合并,再后面传入的分别是文本和字体风格。

附如何在Django里提供xls文件下载

代码语言:javascript
复制
def export_xls(request)
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=DEMO.xls'
    rd = xlrd.open_workbook(
        "files/template.xls",
        formatting_info=True)  # 打开文件
    workbook = copy(rd)  # 复制
    workbook.save(response)
    return response

这里的template.xls即你的Excel模板文件

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 理清三者关系
  • 如何设置字体、居中、大小、边框等等
  • 写入某个单元格
  • 写入合并的单元格
  • 附如何在Django里提供xls文件下载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档