7 教程3:将不同类型的数据写入到 XLSX 文件中
优质
小牛编辑
133浏览
2023-12-01
在上一节中,我们使用Python和XlsxWriter模块创建了一个设置了简单格式的电子表格。
这次,我们继续扩展要写入的数据,在其中添加一些日期:
expenses = (
['Rent', '2013-01-13', 1000],
['Gas', '2013-01-14', 100],
['Food', '2013-01-16', 300],
['Gym', '2013-01-20', 50],
)
相应的电子表格如下所示:
这里的区别在于,我们添加了带有格式的Date列,并使该列更加宽一点以显示完整的日期数据。
为此,我们可以如下所示扩展上一节的程序:
from datetime import datetime
import xlsxwriter
workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': 1})
money_format = workbook.add_format({'num_format': '$#,##0'})
# 添加一个数字的日期格式
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
# 设置指定列的宽度
worksheet.set_column(1, 1, 15)
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)
expenses = (
['Rent', '2013-01-13', 1000],
['Gas', '2013-01-14', 100],
['Food', '2013-01-16', 300],
['Gym', '2013-01-20', 50],
)
row = 1
col = 0
for item, date_str, cost in (expenses):
# 日期格式化
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
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)
workbook.close()
上述代码与上一个程序之间最主要的区别在于,我们为日期添加了一个新的format
对象,并对数据类型进行了其他处理。
Excel通常用不同的方式自动对用户的输出进行数据类型的处理,比如字符串和数字。XlsxWriter尝试在工作表中对此进行模拟,write()
方法通过将Python数据类型映射到Excel支持的类型来自动处理数据类型。
write()
方法是其他几个特点方法的通用别名:
- write_string()
- write_number()
- write_blank()
- write_formula()
- write_datetime()
- write_boolean()
- write_url()
在上面的代码中,我们使用了部分的显示write方法:
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()
方法调整列的宽度,以使日期栏可以显示完整:
worksheet.set_column('B:B', 15)
至此,我们就完成了教程部分。
在下一部分中,我们将从Workbok
类开始详细地介绍API。