Python实用工具:XlsxWriter 从入门到实战,轻松生成专业Excel文件

一、XlsxWriter 库概述

XlsxWriter 是一款专注于生成 Excel 2007 及以上版本 .xlsx 格式文件的 Python 库,核心作用是创建带格式、图表、公式的全新Excel文件,原理是直接按Office标准格式写入文件,无需依赖Microsoft Excel。优点是功能全面、格式支持丰富、兼容性强,缺点是无法读取或修改已有Excel文件。该库采用 BSD 开源许可证,可自由商用与修改。

二、XlsxWriter 安装方法

在使用 XlsxWriter 之前,我们需要先通过 Python 官方的包管理工具 pip 进行安装,这是最快捷、最稳定的安装方式,无论是 Windows、macOS 还是 Linux 系统,都可以通过统一的命令完成安装操作。

打开电脑的命令提示符(CMD)、PowerShell 或者终端(Terminal),输入以下安装命令:

pip install XlsxWriter

等待命令执行完成,当界面出现 Successfully installed XlsxWriter-x.x.x 这样的提示时,就代表安装成功了。如果你的电脑中同时安装了 Python2 和 Python3,为了避免安装到错误的环境中,可以使用 pip3 install XlsxWriter 命令进行安装,确保库被安装到 Python3 环境下。

安装完成后,我们可以简单验证一下是否安装成功,在 Python 交互环境中输入 import xlsxwriter,如果没有报错,就说明 XlsxWriter 已经可以正常使用了,接下来就可以开始编写代码生成 Excel 文件。

三、XlsxWriter 基础使用教程

3.1 创建第一个简单的 Excel 文件

XlsxWriter 的基础使用逻辑非常清晰,一共分为三步:创建工作簿(Workbook)、创建工作表(Worksheet)、向工作表中写入数据,最后关闭工作簿即可生成完整的 Excel 文件。

下面是创建最简单 Excel 文件的代码示例,每一行代码都附带详细注释,方便零基础小白理解:

# 导入 XlsxWriter 库
import xlsxwriter

# 1. 创建一个名为 demo.xlsx 的工作簿对象
workbook = xlsxwriter.Workbook('demo.xlsx')

# 2. 在工作簿中创建一个工作表,默认名称为 Sheet1
worksheet = workbook.add_worksheet()

# 3. 向工作表中写入数据,格式:write(行, 列, 内容)
# Excel 中行和列的索引从 0 开始,(0,0) 代表 A1 单元格
worksheet.write(0, 0, 'Hello')
worksheet.write(0, 1, 'XlsxWriter')
worksheet.write(1, 0, 'Python')
worksheet.write(1, 1, 'Excel')

# 4. 关闭工作簿,完成文件写入
workbook.close()

代码说明:

  • 首先导入 xlsxwriter 库,这是使用所有功能的前提;
  • xlsxwriter.Workbook('demo.xlsx') 用于创建工作簿,括号内的字符串是生成 Excel 文件的名称;
  • add_worksheet() 用于创建工作表,不传入参数时默认工作表名为 Sheet1,也可以自定义名称,例如 add_worksheet('学生成绩')
  • write() 方法是核心写入方法,前两个参数分别是行号和列号,第三个参数是要写入单元格的内容;
  • 最后必须调用 workbook.close(),否则文件无法正常保存,这是很多新手容易忽略的细节。

运行这段代码后,会在 Python 脚本的同级目录下生成一个名为 demo.xlsx 的 Excel 文件,打开后可以看到 A1、B1、A2、B2 单元格已经成功写入对应内容。

3.2 自定义工作表名称

在实际使用中,默认的 Sheet1 无法满足需求,我们可以通过 add_worksheet() 方法的参数自定义工作表名称,让 Excel 文件结构更清晰,代码如下:

import xlsxwriter

# 创建工作簿
workbook = xlsxwriter.Workbook('自定义工作表.xlsx')

# 创建多个自定义名称的工作表
worksheet1 = workbook.add_worksheet('产品清单')
worksheet2 = workbook.add_worksheet('销售数据')
worksheet3 = workbook.add_worksheet('库存统计')

# 分别向不同工作表写入数据
worksheet1.write('A1', '产品名称')
worksheet2.write('A1', '销售日期')
worksheet3.write('A1', '库存数量')

# 关闭工作簿
workbook.close()

代码说明:

  • 一个 Excel 文件中可以创建多个工作表,每个工作表都有独立的名称;
  • 除了使用行号列号定位单元格,还可以使用 Excel 原生的单元格地址,例如 A1B5,使用起来更直观;
  • 多个工作表之间互不影响,可分别写入不同的数据内容。

3.3 写入不同类型的数据

XlsxWriter 支持写入字符串、数字、日期、公式等多种数据类型,无需手动转换格式,库会自动识别处理,下面演示不同数据类型的写入方法:

import xlsxwriter
from datetime import datetime

workbook = xlsxwriter.Workbook('数据类型.xlsx')
worksheet = workbook.add_worksheet()

# 写入字符串
worksheet.write(0, 0, '商品名称')
# 写入数字
worksheet.write(0, 1, 100)
# 写入浮点数
worksheet.write(0, 2, 99.99)
# 写入日期
worksheet.write(0, 3, datetime.now())
# 写入计算公式(求和公式)
worksheet.write(0, 4, '=B1+C1')

workbook.close()

代码说明:

  • 写入日期时需要导入 datetime 模块,库会自动将日期格式转换为 Excel 可识别的格式;
  • 写入公式时直接按照 Excel 公式语法编写字符串即可,打开 Excel 后会自动计算结果;
  • 无论写入哪种数据类型,都使用 write() 方法,库会自动匹配对应的写入逻辑,降低使用门槛。

四、XlsxWriter 格式设置功能

4.1 设置单元格字体格式

为了让 Excel 文件更美观、易读,我们可以通过 add_format() 方法创建格式对象,设置字体、字号、颜色、加粗、斜体等样式,这是 XlsxWriter 非常实用的功能之一。

代码示例:

import xlsxwriter

workbook = xlsxwriter.Workbook('字体格式.xlsx')
worksheet = workbook.add_worksheet()

# 创建字体格式对象
bold_format = workbook.add_format({
    'bold': True,  # 加粗
    'font_size': 14,  # 字号
    'font_color': 'red',  # 字体颜色
    'font_name': '微软雅黑'  # 字体
})

# 创建居中对齐格式
center_format = workbook.add_format({
    'align': 'center',  # 水平居中
    'valign': 'vcenter',  # 垂直居中
    'italic': True  # 斜体
})

# 应用格式写入数据
worksheet.write(0, 0, '标题', bold_format)
worksheet.write(1, 0, '内容', center_format)

workbook.close()

代码说明:

  • add_format() 接收一个字典参数,键是格式属性,值是对应的样式;
  • 常用字体属性:bold(加粗)、font_size(字号)、font_color(颜色)、font_name(字体)、italic(斜体);
  • 一个格式对象可以重复使用,应用到多个单元格中,提高代码复用率。

4.2 设置单元格边框和背景色

除了字体格式,还可以设置单元格的边框样式、背景填充颜色,让表格的边界更清晰,重点数据更突出,代码如下:

import xlsxwriter

workbook = xlsxwriter.Workbook('边框背景.xlsx')
worksheet = workbook.add_worksheet()

# 创建带边框和背景色的格式
cell_format = workbook.add_format({
    'border': 1,  # 边框宽度
    'border_color': 'black',  # 边框颜色
    'bg_color': '#FFFF00',  # 背景色(黄色)
    'align': 'center'
})

# 批量写入带格式的数据
data = [
    ['姓名', '年龄', '性别'],
    ['张三', 20, '男'],
    ['李四', 22, '女']
]

for row_num, row_data in enumerate(data):
    for col_num, col_data in enumerate(row_data):
        worksheet.write(row_num, col_num, col_data, cell_format)

workbook.close()

代码说明:

  • border 设置边框宽度,数值越大边框越粗,border_color 自定义边框颜色;
  • bg_color 支持颜色名称和十六进制颜色码,满足个性化配色需求;
  • 通过循环嵌套可以批量为表格数据应用格式,适合处理大量数据的场景。

4.3 设置列宽和行高

当单元格内容过长或过短时,默认的列宽行高会影响显示效果,XlsxWriter 提供了 set_column()set_row() 方法分别设置列宽和行高。

代码示例:

import xlsxwriter

workbook = xlsxwriter.Workbook('列宽行高.xlsx')
worksheet = workbook.add_worksheet()

# 写入数据
worksheet.write(0, 0, '这是一段很长的文本内容,测试列宽是否适配')
worksheet.write(1, 0, '测试行高')

# 设置列宽:set_column(起始列, 结束列, 宽度)
worksheet.set_column(0, 0, 30)

# 设置行高:set_row(行号, 高度)
worksheet.set_row(0, 30)
worksheet.set_row(1, 20)

workbook.close()

代码说明:

  • set_column(0, 0, 30) 表示将第 1 列(A列)的宽度设置为 30;
  • set_row(0, 30) 表示将第 1 行的高度设置为 30;
  • 可以批量设置多列或多行,例如 set_column(0, 2, 20) 表示将 A、B、C 三列宽度都设为 20。

五、XlsxWriter 高级功能:插入图表

XlsxWriter 支持插入柱状图、折线图、饼图、条形图等多种图表类型,可直接通过代码生成可视化图表,无需手动在 Excel 中制作,适合自动化生成报表的场景。

5.1 插入柱状图

代码示例:

import xlsxwriter

workbook = xlsxwriter.Workbook('柱状图.xlsx')
worksheet = workbook.add_worksheet()

# 准备图表数据
chart_data = [
    ['月份', '销售额'],
    ['1月', 1000],
    ['2月', 1500],
    ['3月', 1200],
    ['4月', 1800],
    ['5月', 2000]
]

# 写入数据
for row_num, row_data in enumerate(chart_data):
    worksheet.write_row(row_num, 0, row_data)

# 创建柱状图对象
chart = workbook.add_chart({'type': 'column'})

# 配置图表数据系列
chart.add_series({
    'name': '销售额',
    'categories': ['Sheet1', 1, 0, 5, 0],  # 横坐标数据
    'values': ['Sheet1', 1, 1, 5, 1],       # 纵坐标数据
    'fill': {'color': 'blue'}                # 柱子颜色
})

# 设置图表标题和坐标轴名称
chart.set_title({'name': '月度销售额统计表'})
chart.set_x_axis({'name': '月份'})
chart.set_y_axis({'name': '销售额(元)'})

# 将图表插入到工作表中
worksheet.insert_chart('A7', chart)

workbook.close()

代码说明:

  • add_chart({'type': 'column'}) 创建柱状图,修改 type 值可切换图表类型,如 line(折线图)、pie(饼图);
  • add_series() 配置图表数据,categories 是横坐标,values 是纵坐标,格式为 [工作表名, 起始行, 起始列, 结束行, 结束列]
  • set_title()set_x_axis()set_y_axis() 分别设置图表标题和坐标轴名称,让图表更易懂;
  • insert_chart() 将图表插入到指定单元格位置。

六、XlsxWriter 实际业务案例:学生成绩统计表

下面结合实际业务场景,使用 XlsxWriter 生成一份完整的学生成绩统计表,包含表头格式、数据写入、公式计算、列宽设置等功能,贴近真实开发需求。

完整代码示例:

import xlsxwriter

# 创建工作簿
workbook = xlsxwriter.Workbook('学生成绩统计表.xlsx')
worksheet = workbook.add_worksheet('成绩表')

# 定义表头格式:加粗、居中、边框、背景色
header_format = workbook.add_format({
    'bold': True,
    'align': 'center',
    'valign': 'vcenter',
    'border': 1,
    'bg_color': '#00BFFF',
    'font_color': 'white',
    'font_size': 12
})

# 定义数据格式:居中、边框
data_format = workbook.add_format({
    'align': 'center',
    'valign': 'vcenter',
    'border': 1
})

# 定义总分格式:加粗、居中、边框、红色
total_format = workbook.add_format({
    'bold': True,
    'align': 'center',
    'valign': 'vcenter',
    'border': 1,
    'font_color': 'red'
})

# 表头数据
headers = ['学号', '姓名', '语文', '数学', '英语', '总分']
# 学生成绩数据
student_data = [
    ['001', '张三', 85, 92, 88],
    ['002', '李四', 78, 95, 90],
    ['003', '王五', 90, 86, 94],
    ['004', '赵六', 82, 88, 85]
]

# 写入表头
worksheet.write_row(0, 0, headers, header_format)

# 写入学生成绩数据
for row_num, row_data in enumerate(student_data, start=1):
    worksheet.write_row(row_num, 0, row_data, data_format)
    # 写入总分公式(语文+数学+英语)
    worksheet.write(row_num, 5, f'=C{row_num+1}+D{row_num+1}+E{row_num+1}', total_format)

# 设置列宽
worksheet.set_column(0, 5, 12)

# 关闭工作簿
workbook.close()

代码说明:

  • 该案例模拟了学校学生成绩统计场景,包含学号、姓名、各科成绩、总分等字段;
  • 为不同区域设置不同格式,表头突出显示,总分用红色加粗标注;
  • 通过公式自动计算总分,无需手动计算,提升效率;
  • 统一设置列宽,保证表格内容完整显示,打开后即可直接使用。

运行代码后生成的 Excel 文件,结构清晰、样式美观,可直接用于教学、办公等场景,充分体现了 XlsxWriter 在自动化办公中的实用价值。

相关资源

  • Pypi地址:https://pypi.org/project/XlsxWriter
  • Github地址:https://github.com/jmcnamara/XlsxWriter
  • 官方文档地址:https://xlsxwriter.readthedocs.io/

关注我,每天分享一个实用的Python自动化工具。