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。