一、安装 XlsxWriter
使用命令:
pip3 install xlsxwriter

二、验证是否安装成功
新建一个 .py 文件,输入下面代码:
1import xlsxwriter 2 3workbook = xlsxwriter.Workbook('hello.xlsx') 4worksheet = workbook.add_worksheet() 5 6worksheet.write('A1', 'Hello world') 7 8workbook.close()
运行程序,会发现同级目录下生成了一个 hello.xlsx 文件:

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

三、创建一个简单的 XLSX 文件
假设我们有一些月度支出的数据,我们希望将其转换为 Excel XLSX 文件:
1expenses = ( 2 ['Rent', 1000], 3 ['Gas', 100], 4 ['Food', 300], 5 ['Gym', 50], 6)
下面是代码:
1import xlsxwriter 2 3# Create a workbook and add a worksheet. 4# 创建一个工作簿并添加一张工作表 5workbook = xlsxwriter.Workbook('Expenses01.xlsx') 6worksheet = workbook.add_worksheet() 7 8# Some data we want to write to the worksheet. 9# 想写入工作表的数据 10expenses = ( 11 ['Rent', 1000], 12 ['Gas', 100], 13 ['Food', 300], 14 ['Gym', 50], 15) 16 17# Start from the first cell. Rows and columns are zero indexed. 18# 从第一个单元格开始,行和列的索引均为 0 19row = 0 20col = 0 21 22# Iterate over the data and write it out row by row. 23# 迭代数据并逐行写入 24for item, cost in (expenses): 25 worksheet.write(row, col, item) 26 worksheet.write(row, col + 1, cost) 27 row += 1 28 29# Write a total using a formula. 30# 写一个计算出总和的公式 31worksheet.write(row, 0, 'Total') 32worksheet.write(row, 1, '=SUM(B1:B4)') 33 34workbook.close()
运行程序,看到生成了 Expenses01.xlsx 文件,打开看到以下内容:

四、代码详解
下面开始详细解释上面的程序代码。
第一步是导入包:
import xlsxwriter
使用 Workbook() 创建一个工作簿,参数是工作簿的名字:
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
注意:XlsxWriter 只能创建文件,不能读取或修改现有的文件。
然后使用 add_worksheet() 来添加一张工作表:
worksheet = workbook.add_worksheet()
默认工作表的名称是 Sheet1,Sheet2 等,但是也可以指定名称:
1worksheet1 = workbook.add_worksheet() # Defaults to Sheet1. 2worksheet2 = workbook.add_worksheet('Data') # Data. 3worksheet3 = workbook.add_worksheet() # Defaults to Sheet3.
我们使用工作表对象通过 write() 方法来写入数据:
worksheet.write(row, col, some_data)
注意:在 XlsxWriter 中,行和列都是零索引。第一个单元格 A1 是 (0, 0)。
在上述代码中通过迭代将数据写入表中:
1# Iterate over the data and write it out row by row. 2# 迭代数据并逐行写入 3for item, cost in (expenses): 4 worksheet.write(row, col, item) 5 worksheet.write(row, col + 1, cost) 6 row += 1
添加一个公式来计算第二列中的项目总和:
worksheet.write(row, 1, '=SUM(B1:B4)')
最后,通过 close() 方法关闭 Excel 文件:
workbook.close()
现在,就生成了一个 xlsx 文件,可以通过 Excel 和其他电子表格应用读取。
五、将不同类型的数据写入 XLSX 文件
上一个程序创建了一个使用 Python 和 XlsxWriter 模块格式化的简单电子表格。
这次扩展要写的数据,包括一些日期:
1expenses = ( 2 ['Rent', '2013-01-13', 1000], 3 ['Gas', '2013-01-14', 100], 4 ['Food', '2013-01-16', 300], 5 ['Gym', '2013-01-20', 50], 6)
这里的区别是,添加了一个带有格式的日期列,并使该列稍宽以适应日期。
因此,代码如下:
1from datetime import datetime 2import xlsxwriter 3 4# Create a workbook and add a worksheet. 5workbook = xlsxwriter.Workbook('Expenses03.xlsx') 6worksheet = workbook.add_worksheet() 7 8# Add a bold format to use to highlight cells. 9# 添加用于突出显示单元格的粗体格式 10bold = workbook.add_format({'bold': 1}) 11 12# Add a number format for cells with money. 13# 为显式钱的单元格添加数字格式 14money_format = workbook.add_format({'num_format': '$#,##0'}) 15 16# Add an Excel date format. 17# 添加 Excel 日期格式 18date_format = workbook.add_format({'num_format': 'mmmm d yyyy'}) 19 20# Adjust the column width. 21# 调整列宽 22worksheet.set_column(1, 1, 15) 23 24# Write some data headers. 25worksheet.write('A1', 'Item', bold) 26worksheet.write('B1', 'Date', bold) 27worksheet.write('C1', 'Cost', bold) 28 29# Some data we want to write to the worksheet. 30expenses = ( 31 ['Rent', '2013-01-13', 1000], 32 ['Gas', '2013-01-14', 100], 33 ['Food', '2013-01-16', 300], 34 ['Gym', '2013-01-20', 50], 35) 36 37# Start from the first cell below the headers. 38row = 1 39col = 0 40 41for item, date_str, cost in (expenses): 42 # Convert the date string into a datetime object. 43 date = datetime.strptime(date_str, "%Y-%m-%d") 44 45 worksheet.write_string (row, col, item ) 46 worksheet.write_datetime(row, col + 1, date, date_format ) 47 worksheet.write_number (row, col + 2, cost, money_format) 48 row += 1 49 50# Write a total using a formula. 51worksheet.write(row, 0, 'Total', bold) 52worksheet.write(row, 2, '=SUM(C2:C5)', money_format) 53 54workbook.close()
这个程序和上一个程序的区别是:为日期添加了一个新的 Format 对象,对数据类型有额外处理。
Excel 对待不同类型的输入数据,例如字符串和数字,处理通常不同,虽然通常对于用户是透明的。XlsxWriter 视图用 worksheet.write() 方法模拟这一点,通过将 Python 数据类型映射到 Excel 支持的类型上。
write() 方法作为几个更具体方法的通用别名:
-
write_string()
-
write_number()
-
write_blank()
-
write_formula()
-
write_datetime()
-
write_boolean()
-
write_url()
在这里的代码中,我们使用了这些方法中的一些来处理不同类型的数据:
1worksheet.write_string (row, col, item ) 2worksheet.write_datetime(row, col + 1, date, date_format ) 3worksheet.write_number (row, col + 2, cost, money_format)
这主要是为了展示如果你需要更多的控制你写入工作表中的数据,你可以使用恰当的方法。在这个简单的例子里,write() 方法事实上解决得很好。
对于程序来说日期处理也是新的 。
Excel 中的日期和时间是应用了数字格式的浮点数,方便以正确的格式显示它们。如果日期和时间是 Python datetime 对象,那么 XlsxWriter 会自动进行所需的数字转换。但是,我们还需要添加数字格式来确保 Excel 将其显示为日期:
1from datetime import datetime 2... 3 4date_format = workbook.add_format({'num_format': 'mmmm d yyyy'}) 5... 6 7for item, date_str, cost in (expenses): 8 # Convert the date string into a datetime object. 9 date = datetime.strptime(date_str, "%Y-%m-%d") 10 ... 11 worksheet.write_datetime(row, col + 1, date, date_format ) 12 ...
最后需要 set_column() 来调整 B 列的宽度以便于日期可以清晰地展示:
1# Adjust the column width. 2worksheet.set_column('B:B', 15)
运行程序,看到生成了 Expenses03.xlsx 文件,打开看到以下内容:

六、参考教程
Tutorial 1: Create a simple XLSX file — XlsxWriter Documentation
Tutorial 3: Writing different types of data to the XLSX File — XlsxWriter Documentation