目录

8 Workbook 类

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

Workbook类是XlsxWriter模块的主要类,并且是唯一需要直接实例化的类。

Workbook类表示整个电子表格,就像在Excel中看到的那样,它在内部表示在磁盘上写入的Excel文件。

构造函数

Workbook(filename[, options]) 创建一个新的XlsxWriter工作簿对象。

  • 参数:

    • filename(字符串)——表示需要创建的Excel的文件名。
    • options(字典)——工作簿的参数选项。
  • 返回值:一个Workbook对象

Workbook()构造函数通过接受一个给定的文件名来创建一个新的Excel工作簿。

import xlsxwriter

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

worksheet.write(0, 0, 'Hello Excel')

workbook.close()

这个构造函数的选项有:

  • constant_memory:减少内存的使用量,以便可以写入大文件:

    workbook = xlsxwriter.Workbook(filename, {'constant_memory': True})
    

    请注意,在这种模式下,通过workbook的write_()方法在新行中写入数据时,将会写入一行数据,然后将其丢弃。因此,一旦激活该模式,就应当按照顺序写入数据。所以,add_table()merge_range()在此模式在不可用。

  • tmpdir:XlsxWriter在生成最终的XLSX文件之前,会将Excel工作簿存储在临时文件中。临时文件在系统的temp目录中创建。如果你的程序无法访问系统默认的临时目录,或者改临时目录没有足够的空间,则可以使用tmpdir选项指定备用的目录:

    workbook = xlsxwriter.Workbook(filename, {'tmpdir': '/home/user/tmp'})
    

    临时目录必须已经存在,XlsxWriter不会去创建它。

  • in_memory:为了避免在生成最终的XLSX文件时使用临时文件,例如有些服务器不允许使用临时文件。则需要将in_memory选项设置为True

    workbook = xlsxwriter.Workbook(filename, {'in_memory': True})
    

    此选项将会覆盖constant_memory选项。

  • strings_to_numbers:为了避免在使用write()方法写入数据时出现Excel关于“数字存储为文本”的警告,在可能的情况下使用将字符串转换为数字的方法float()。默认值为False。要启用此选项,请使用:

    workbook = xlsxwriter.Workbook(filename, {'strings_to_numbers': True})
    
  • strings_to_formulaswrite()方法自动将字符串识别转换为公式,默认为True,如果需要禁用,请使用:

    workbook = xlsxwriter.Workbook(filename, {'strings_to_formulas': False})
    
  • strings_to_urlswrite()方法自动将字符串识别转换为URL链接,默认为True,如果需要禁用,请使用:

    workbook = xlsxwriter.Workbook(filename, {'strings_to_urls': False})
    
  • max_url_length:设置工作表中超链接的最大长度,默认值为2079,最小值为255。Excel 2015之前的Excel版本将超链接和锚定/位置限制为每个255个字符。此后的版本最多支持2079个字符。可以通过此选项进行设置:

    workbook = xlsxwriter.Workbook(filename, {'max_url_length': 255})
    
  • nan_inf_to_errors:启用write()write_number()方法将nan、inf、-inf转换为Excel错误。Excel不会讲nan和inf作为数字处理,所以作为解决方法,它们会被映射到产生错误代码的公式#NUM#DIV/0!。默认为False。如果要启用,请使用:

    workbook = xlsxwriter.Workbook(filename, {'nan_inf_to_errors': True})
    
  • default_date_format:设置默认的日期时间格式字符串:

    xlsxwriter.Workbook(filename, {'default_date_format': 'dd/mm/yy'})
    
  • remove_timezone:Excel中不支持日期中的时区,而XlsxWriter并没有任何安全的方法来处理Python中带时区的日期时间,因此用户应该自行转换或删除时区。或者使用remove_timezone选项将datetime值中的时区剥离,默认为False。如果要启用此选项,请使用:

    workbook = xlsxwriter.Workbook(filename, {'remove_timezone': True})
    
  • date_1904:默认情况下XlsxWriter以1900为时间的起始,如果要更改此设置,可以将date_1904设置为True

    workbook = xlsxwriter.Workbook(filename, {'date_1904': True})
    

当你指定文件名的时候,建议使用.xlsx为扩展名,否则打开文件时Excel会出现警告。

Workbook()方法还可以通过with方法来工作,在这种情况下,它就不需要显示地使用close()方法关闭工作簿:

with xlsxwriter.Workbook('hello_world.xlsx') as workbook:
    worksheet = workbook.add_worksheet()

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

还可以使用BytesIO将文件写入到内存中,如下所示:

from io import BytesIO

output = BytesIO()
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet()

worksheet.write('A1', 'Hello')
workbook.close()

xlsx_data = output.getvalue()

如果要避免使用任何临时文件并将其保存在内存中,请使用上面提到的in_memory选项。