Python实战(02):使用xlwt写入Excel文件

news/2024/7/21 4:17:50 标签: excel

xlwt写入Excel文件

    • 一、基本概念
    • 二、写入Excel
    • 三、设置样式
    • 四、实战
    • 五、相关链接

一、基本概念

在Excel中主要涉及到三个概念:Workbooks,Sheets,Cells。其中Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。一般读取和写入Excel基本上按如下三步操作:打开Workbook,定位Sheet,操作Cell。下面分读和写分别介绍python的几个常见的处理方式。

二、写入Excel

下面我们使用一个案例来演示Python写入Excel的过程。模拟一份学生信息,将学生信息写入到一个Excel文件中。
在这里插入图片描述

  1. 引入库xlwt
import xlwt

如果没有xlwt库的话可以使用pip导入该库:

pip install xlwt
  1. 获取一个Workbook,设置编码集为“UTF-8”
work_book = xlwt.Workbook(encoding="UTF-8")
  1. 在Workbooks中生成一个Sheet
worksheet = work_book.add_sheet(sheet_name)
  1. 将记录写入到单元格中
# row 代表行,col代表列,data代表要填写的内容
worksheet.write(row, col, data)
  1. 保存Workbook保存文件中
work_book.save(self.filename)

三、设置样式

但是在实际场景中,制作的Excel远不止写入数据那么简单,有时为了达到美观,会涉及到复杂的表格样式。例如:

  • 设置字体、字体大小、字体颜色、文字位置、加粗、斜体等
  • 合并单元格,行合并、列合并和区域合并
  • 设置背景颜色
  • 设置边框的属性
  • 设置行宽

下面我们逐个来演示如何设置这个表格样式

  1. 设置字体
style = xlwt.XFStyle()  # 初始化样式
font = xlwt.Font()  # 为样式创建字体
font.name = "黑体"  # 设置字体为“黑体”,默认是“Arial”
font.height = 100   # 设置字体大小为100,默认是200
font.bold = True    # 字体是否加粗
font.underline = True # 下划线
font.italic = True    # 斜体字
style.font = font     # 设置样式
worksheet.write(row, col, data, style)  # 写入数据是带上样式
  1. 合并单元格,行合并、列合并和区域合并
# 合并从(0,0)单元格到(0,2)单元格,及合并第一行的3个单元格
worksheet.write_merge(0, 0, 0, 2, "hello world")
# 行合并,并带有其他样式
worksheet.write_merge(0, 0, 0, 2, "hello world",style)
# 合并从(0,0)单元格到(2,0)单元格,及合并第一列的3个单元格
worksheet.write_merge(0, 0, 2, 0, "hello world")
# 合并从(0,0)单元格到(2,2)单元格,及合并第一行的3*3共9个单元格区域
worksheet.write_merge(0, 0, 2, 2, "hello world")
  1. 设置背景色
pattern = xlwt.Pattern()  # 一个实例化的样式类
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 固定的样式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']  # 背景颜色
style.pattern = pattern
worksheet.write(row, col, data, style)  # 写入数据是带上样式
  1. 设置边框的属性
borders = xlwt.Borders()  # 为样式创建边框,默认没有边框
borders.left = 1    # 设置左边框宽度为1
borders.right = 1
borders.top = 1
borders.bottom = 1
style.borders = borders
worksheet.write(row, col, data, style)  # 写入数据是带上样式
  1. 设置行宽
# 设置列的宽度
worksheet.col(i).width = 150 * 30

四、实战

下面我们演示一个实际案例,使用xlwt库写入如下表格信息:
在这里插入图片描述

完整代码演示:

# -*- coding: utf-8 -*-

# 写excel
import xlwt


class WriteExcel:

    # 初始化
    def __init__(self, filename, sheet_name):
        self.work_book = xlwt.Workbook(encoding="UTF-8")
        self.worksheet = self.work_book.add_sheet(sheet_name)
        self.filename = filename
        self.row = 0

    # 保存Excel
    def save(self):
        self.work_book.save(self.filename)

    # 设置样式
    def set_style(self, name, height, bold=False, format_str='', align='center'):
        style = xlwt.XFStyle()  # 初始化样式
        font = xlwt.Font()  # 为样式创建字体
        font.name = name  # 字体
        font.bold = bold
        font.height = height

        borders = xlwt.Borders()  # 为样式创建边框
        borders.left = 1
        borders.right = 1
        borders.top = 1
        borders.bottom = 1

        alignment = xlwt.Alignment()  # 设置排列
        if align == 'center':
            alignment.horz = xlwt.Alignment.HORZ_CENTER
            alignment.vert = xlwt.Alignment.VERT_CENTER
        elif align == 'left':
            alignment.horz = xlwt.Alignment.HORZ_LEFT
            alignment.vert = xlwt.Alignment.VERT_BOTTOM
        else:
            alignment.horz = xlwt.Alignment.HORZ_RIGHT
            alignment.vert = xlwt.Alignment.VERT_BOTTOM

        style.font = font
        style.borders = borders
        style.num_format_str = format_str
        style.alignment = alignment
        return style

    # 设置标题的格式
    def set_title_style(self):
        return self.set_style('黑体', 300, bold=True, format_str='')

    # 设置表头的格式
    def set_head_style(self):
        head_style = self.set_style('Times New Roman', 220, bold=True, format_str='')
        pattern = xlwt.Pattern()  # 一个实例化的样式类
        pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 固定的样式
        pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']  # 背景颜色
        head_style.pattern = pattern
        return head_style

    # 设置明细行的格式
    def set_default_style(self):
        return self.set_style('Times New Roman', 200, bold=False, format_str='', align='right')

    # 添加标题
    def add_title(self, title):
        self.worksheet.write_merge(0, 0, 0, 2, title, self.set_title_style())
        self.row += 1

    # 写入文件头
    def add_head(self, key, value):
        # 向单元格中写入内容
        self.worksheet.write(self.row, 0, key)
        self.worksheet.write(self.row, 1, value)
        self.row += 1

    # 写入明细
    def add_list(self, table_head, table_detail):
        self.row += 1
        for i, value in enumerate(table_head):
            self.worksheet.write(self.row, i, value, self.set_head_style())
            self.worksheet.col(i).width = 150 * 30
        for rows in table_detail:
            self.row += 1
            for i, key in enumerate(rows):
                self.worksheet.write(self.row, i, rows[key], self.set_default_style())


if __name__ == "__main__":
    list_head = ["学号", "姓名", "性别"]
    list_detail = [{"student_id": "1001", "name": "张三", "sex": "男"},
                   {"student_id": "1002", "name": "李四", "sex": "女"},
                   {"student_id": "1003", "name": "王五", "sex": "男"}]

    writeExcel = WriteExcel("writeExcel.xlsx", "学生信息")
    writeExcel.add_title("XX班级学生信息表")
    writeExcel.add_head("学院名:", "A学院")
    writeExcel.add_head("班级名:", "B系一班")
    writeExcel.add_head("人数:", "50")
    writeExcel.add_list(list_head, list_detail)
    writeExcel.save()

运行代码如下:
在这里插入图片描述
表格内容如下:
在这里插入图片描述

五、相关链接

如下链接还可了解Python其他相关内容,希望相关内容能给予帮助。谢谢!
链接1:Python实战:Python读取Excel文件


http://www.niftyadmin.cn/n/1186196.html

相关文章

Python实战(03):使用selenium框架实现百度查询

使用selenium框架实现百度查询一、前言二、安装1.安装selenium2.安装ChromeDriver3.配置驱动三、简单实用四、实战五、相关链接一、前言 最近正在学习使用阿里云RPA内容,发现使用的是python开发,不过目前阿里云RPA是闭源的。但是个人感觉和自动化开发基…

Python实战(04):使用qrcode生成二维码

使用qrcode生成二维码前言一、简单生成二维码二、自定义二维码三、实战前言 现如今,生活中使用到二维码的场景可以说随处可见。特别是手机支付中,通过手机扫描二维码跳转到支付页面,这种场景相信大家不会陌生。 我们日常最常使用到的二维码…

Python实战(05):使用Matplotlib让排序算法动起来

使用Matplotlib让排序算法动起来一、前言二、准备三、源码四、可视化效果一、前言 算法在大学计算机里面是必修的课程,而排序算法又是算法内容里面的重中之重。了解算法有助于提升编程能力、增强自身逻辑思考能力、提升代码质量。但是好想学好算法也是有一定的难度…

Android Studio调试工具总结

前言:写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;当我们的程序出现bug时,调试可以快速的找到bug。进入调试状态,我们可以清楚的了解程序的整个执行过程,可以对内存的数据进行监视。…

Python实战(06):Pillow处理图片功能一览

Pillow处理图片功能一览一、前言二、安装pillow三、pillow操作图片2.1 打开图片、保存图片2.2 图片放缩2.3 图片过滤2.4 图片裁剪2.5 图片旋转2.6 镜像转换2.7 图片模式调整四、实战一、前言 最近在写博文的内容中经常要使用到python处理图片,感觉对图片的了解不是…

Python实战(07):使用selenium刷访问量

闲来无事,用selenium写了一个简单的刷访问量的程序。 注:代码使用了selenium框架,所以大家运行下列代码时请先安装号selenium的环境。 # -*- coding: utf-8 -*-import time from selenium import webdriverdef open_blog():# 打开浏览器drive…

Python基础:实现动态运行python代码

纸上得来终觉浅,绝知此事要躬行。------ 宋陆游《冬夜读书示子聿》 实现动态运行python代码一、前言二、预备知识点2.1.eval() 函数2.2.exec()函数2.3.eval与exec的使用及区别三、详解动态的执行python3.1. 执行一行字符串表达式3.2.执行代码块3.3.执行函数3.4.执行…

Python实战(08):使用python实现多线程

他山之石,可以攻玉 ------《诗经小雅鹤鸣》 使用python实现多线程一、前言二、Python实现多线程1. 通过 _thread 实现多线程2. 通过threading.Thread进行创建多线程3. 通过继承threading.Thread定义子类创建多线程一、前言 如果大家对什么是线程、什么是进程仍存有…