27 worksheet.write()

优质
小牛编辑
118浏览
2023-12-01

write(row, col, *args) 将数据写入sheet工作表的指定单元格中。

  • 参数:
    • row:单元格的行索引(起始为0)
    • col:单元格的列索引(起始为0)
    • args:传递给子方法的其他参数
  • 返回值:
    • 0:写入成功
    • -1:写入失败
    • 调用的write方法的其他值

Excel中区别划分了数字、字符串、空格、公式和超链接等数据类型。在XlsxWriter中,为了简化数据写入的过程,write()方法充当了以下几个具体方法的通用别名:

  • write_string()
  • write_number()
  • write_blank()
  • write_formula()
  • write_datetime()
  • write_boolean()
  • write_url()

write()方法处理数据类型的规则如下:

  • 数据类型为intlongfloatdecimal.Decimalfractions.Fraction时,使用write_number()方法写入;
  • 数据类型为datetime.datedatetime.datetimedatetime.timedatetime.timedelta时,使用write_datetime()方法写入;
  • None和空字符串使用write_blank()发写入;
  • bool类型的数据使用write_boolean()方法写入;

然后按照如下方式处理字符串:

  • 以等号“=”开头的字符串用于匹配公式,并使用write_formula()方法写入。这可以被覆盖;
  • 与支持的超链接URL类型匹配的字符串将使用write_url()方法写入;
  • Workbook()构造函数的strings_to_numbers选项值为True时,使用float()转换为数字的字符串将使用write_number()方法写入,以避免Excel出现“数字存储为文本”的警告;
  • 不符合以上任何条件的字符串都将使用write_string()方法写入;

如果上述类型均不匹配,则使用float()方法计算该值,以查看它是否对应于用户的float类型,如果是,则使用write_number()方法写入。

最后,如果这些数据类型都不匹配,则会触发TypeError异常。当时也可以使用下面会介绍到的add_write_handler()方法和用户自定义的数据类型来处理其他用户输入的数据类型。

下面是一些例子:

worksheet.write(0, 0, 'Hello')          # write_string()
worksheet.write(1, 0, 'World')          # write_string()
worksheet.write(2, 0, 2)                # write_number()
worksheet.write(3, 0, 3.00001)          # write_number()
worksheet.write(4, 0, '=SIN(PI()/4)')   # write_formula()
worksheet.write(5, 0, '')               # write_blank()
worksheet.write(6, 0, None)             # write_blank()

这将创建如下图所示的工作表:

> 注意! Workbook()构造函数中有三个可选参数选项,可用于重写write()方法中的字符串处理,下面显示了这些默认选项及其默认值:

xlsxwriter.Workbook(filename, {'strings_to_numbers':  False,
                               'strings_to_formulas': True,
                               'strings_to_urls':     True})

write()方法支持两种指定单元格的方式:行列法和单元格名称表示法:

# These are equivalent.
worksheet.write(0, 0, 'Hello')
worksheet.write('A1', 'Hello')

write()有一个字方法cell_format参数,能够用来将格式应用在单元格。这个参数是可选的,但是当指定的时候,必须是有效的format格式对象:

cell_format = workbook.add_format({'bold': True, 'italic': True})

worksheet.write(0, 0, 'Hello', cell_format)  # Cell is bold and italic.