Python 模块:XlsxWriter 的使用

Stella981
• 阅读 573

一、安装 XlsxWriter

使用命令:

pip3 install xlsxwriter

Python 模块:XlsxWriter 的使用

二、验证是否安装成功

新建一个 .py 文件,输入下面代码:

import xlsxwriter

workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()

worksheet.write('A1', 'Hello world')

workbook.close()

运行程序,会发现同级目录下生成了一个 hello.xlsx 文件:

Python 模块:XlsxWriter 的使用

打开 hello.xlsx 文件,发现内容如下,表示安装成功:

Python 模块:XlsxWriter 的使用

三、创建一个简单的 XLSX 文件

假设我们有一些月度支出的数据,我们希望将其转换为 Excel XLSX 文件:

expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

下面是代码:

import xlsxwriter

# Create a workbook and add a worksheet.
# 创建一个工作簿并添加一张工作表
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
# 想写入工作表的数据
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# Start from the first cell. Rows and columns are zero indexed.
# 从第一个单元格开始,行和列的索引均为 0
row = 0
col = 0

# Iterate over the data and write it out row by row.
# 迭代数据并逐行写入
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

# Write a total using a formula.
# 写一个计算出总和的公式
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

运行程序,看到生成了 Expenses01.xlsx 文件,打开看到以下内容:

Python 模块:XlsxWriter 的使用

四、代码详解

下面开始详细解释上面的程序代码。

第一步是导入包:

import xlsxwriter

使用 Workbook() 创建一个工作簿,参数是工作簿的名字:

workbook = xlsxwriter.Workbook('Expenses01.xlsx')

注意:XlsxWriter 只能创建文件,不能读取或修改现有的文件。

然后使用 add_worksheet() 来添加一张工作表:

worksheet = workbook.add_worksheet()

默认工作表的名称是 Sheet1,Sheet2 等,但是也可以指定名称:

worksheet1 = workbook.add_worksheet()        # Defaults to Sheet1.
worksheet2 = workbook.add_worksheet('Data')  # Data.
worksheet3 = workbook.add_worksheet()        # Defaults to Sheet3.

我们使用工作表对象通过 write() 方法来写入数据:

worksheet.write(row, col, some_data)

注意:在 XlsxWriter 中,行和列都是零索引。第一个单元格 A1 是 (0, 0)。

在上述代码中通过迭代将数据写入表中:

# Iterate over the data and write it out row by row.
# 迭代数据并逐行写入
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

添加一个公式来计算第二列中的项目总和:

worksheet.write(row, 1, '=SUM(B1:B4)')

最后,通过 close() 方法关闭 Excel 文件:

workbook.close()

现在,就生成了一个 xlsx 文件,可以通过 Excel 和其他电子表格应用读取。

五、将不同类型的数据写入 XLSX 文件

上一个程序创建了一个使用 Python 和 XlsxWriter 模块格式化的简单电子表格。

这次扩展要写的数据,包括一些日期:

expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas',  '2013-01-14',  100],
    ['Food', '2013-01-16',  300],
    ['Gym',  '2013-01-20',   50],
)

这里的区别是,添加了一个带有格式的日期列,并使该列稍宽以适应日期。

因此,代码如下:

from datetime import datetime
import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()

# Add a bold format to use to highlight cells.
# 添加用于突出显示单元格的粗体格式
bold = workbook.add_format({'bold': 1})

# Add a number format for cells with money.
# 为显式钱的单元格添加数字格式
money_format = workbook.add_format({'num_format': '$#,##0'})

# Add an Excel date format.
# 添加 Excel 日期格式
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

# Adjust the column width.
# 调整列宽
worksheet.set_column(1, 1, 15)

# Write some data headers.
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas',  '2013-01-14',  100],
    ['Food', '2013-01-16',  300],
    ['Gym',  '2013-01-20',   50],
)

# Start from the first cell below the headers.
row = 1
col = 0

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    date = datetime.strptime(date_str, "%Y-%m-%d")

    worksheet.write_string  (row, col,     item              )
    worksheet.write_datetime(row, col + 1, date, date_format )
    worksheet.write_number  (row, col + 2, cost, money_format)
    row += 1

# Write a total using a formula.
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

workbook.close()

这个程序和上一个程序的区别是:为日期添加了一个新的 Format 对象,对数据类型有额外处理。

Excel 对待不同类型的输入数据,例如字符串和数字,处理通常不同,虽然通常对于用户是透明的。XlsxWriter 视图用 worksheet.write() 方法模拟这一点,通过将 Python 数据类型映射到 Excel 支持的类型上。

write() 方法作为几个更具体方法的通用别名:

  • write_string()

  • write_number()

  • write_blank()

  • write_formula()

  • write_datetime()

  • write_boolean()

  • write_url()

在这里的代码中,我们使用了这些方法中的一些来处理不同类型的数据:

worksheet.write_string  (row, col,     item              )
worksheet.write_datetime(row, col + 1, date, date_format )
worksheet.write_number  (row, col + 2, cost, money_format)

这主要是为了展示如果你需要更多的控制你写入工作表中的数据,你可以使用恰当的方法。在这个简单的例子里,write() 方法事实上解决得很好。

对于程序来说日期处理也是新的 。

Excel 中的日期和时间是应用了数字格式的浮点数,方便以正确的格式显示它们。如果日期和时间是 Python datetime 对象,那么 XlsxWriter 会自动进行所需的数字转换。但是,我们还需要添加数字格式来确保 Excel 将其显示为日期:

from datetime import datetime
...

date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
...

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    date = datetime.strptime(date_str, "%Y-%m-%d")
    ...
    worksheet.write_datetime(row, col + 1, date, date_format )
    ...

最后需要 set_column() 来调整 B 列的宽度以便于日期可以清晰地展示:

# Adjust the column width.
worksheet.set_column('B:B', 15)

运行程序,看到生成了 Expenses03.xlsx 文件,打开看到以下内容:

Python 模块:XlsxWriter 的使用

六、参考教程

Tutorial 1: Create a simple XLSX file — XlsxWriter Documentation

Tutorial 3: Writing different types of data to the XLSX File — XlsxWriter Documentation

Python中的模块--XlsxWriter - 简书 (jianshu.com)

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这