Python XlsxWriter - 重要类

XlsxWriter 库由以下类组成。 这些类中定义的所有方法都允许以编程方式对 XLSX 文件执行不同的操作。 这些类是 −

  • Workbook 类
  • Worksheet 类
  • Format 类
  • Chart 类
  • Chartsheet 类
  • Exception 类

Workbook 类

这是 XlsxWriter 模块公开的主类,也是您需要直接实例化的唯一类。 它表示写入磁盘上的 Excel 文件。

wb=xlsxwriter.Workbook('filename.xlsx')

Workbook类定义了以下方法 −

Sr.No Workbook 类 & 描述
1

add_worksheet()

将新工作表添加到工作簿。

2

add_format()

用于创建用于将格式应用到单元格的新 Format 对象。

3

add_chart()

创建一个新的图表对象,可以通过 insert_chart() Worksheet 方法插入到工作表中

4

add_chartsheet()

将新的图表工作表添加到工作簿。

5

close()

关闭工作簿对象并写入 XLSX 文件。

6

define_name()

在工作簿中创建定义的名称以用作变量。

7

add_vba_project()

用于使用二进制 VBA 项目文件向工作簿添加宏或函数。

8

worksheets()

返回工作簿中工作表的列表。


Worksheet 类

工作表类表示 Excel 工作表。 此类的对象处理诸如将数据写入单元格或格式化工作表布局等操作。 它是通过从 Workbook() 对象调用 add_worksheet() 方法创建的。

Worksheet 对象可以访问以下方法 −

write()

将通用数据写入工作表单元格。

参数

  • row − 单元格行(零索引)。

  • col − 单元格列(零索引)。

  • *args − 传递给子方法的附加参数,例如数字、字符串和 cell_format。

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

write_string()

将字符串写入由行和列指定的单元格。

参数

  • row (int) − 单元格行(零索引)。

  • col (int) − 单元格列(零索引)。

  • string (string) − 要写入单元格的字符串。

  • cell_format (Format) − 可选格式对象。

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

  • -2 − 字符串被截断为 32k 个字符。

write_number()

将数字类型写入由行和列指定的单元格。

参数

  • row (int) − 单元格行(零索引)。

  • col (int) − 单元格列(零索引)。

  • string (string) − 要写入单元格的字符串。

  • cell_format (Format) − 可选格式对象。

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

write_formula()

将公式或函数写入由行和列指定的单元格。

参数

  • row (int) − 单元格行(零索引)。

  • col (int) − 单元格列(零索引)。

  • formula (string) −写入单元格的公式。

  • cell_format (Format) − 可选格式对象。

  • value − 可选结果。 计算公式时的值。

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

insert_image()

用于将图像插入到工作表中。 图像可以是 PNG、JPEG、GIF、BMP、WMF 或 EMF 格式。

参数

  • row (int) − 单元格行(零索引)。

  • col (int) − 单元格列(零索引)。

  • filename − 图像文件名(如果需要,带有路径)。

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

insert_chart()

用于将图表插入到工作表中。 图表对象是通过 Workbook add_chart() 方法创建的。

参数

  • row (int) − 单元格行(零索引)。

  • col (int) − 单元格列(零索引)。

  • chart − 图表对象。

conditional_format()

用于根据用户定义的条件向单元格或单元格区域添加格式。

参数

  • first_row (int) − 范围的第一行。(全零索引)

  • first_col (int) − 范围的第一列。

  • last_row (int) − 范围的最后一行。

  • last_col (int)− 范围的最后一列。

  • options (dict) − 条件格式选项。 必须是包含描述条件格式的类型和样式的参数的字典

返回

  • 0 − 成功

  • -1 − 行或列超出工作表边界。

  • -2 − 参数或选项不正确。

add_table()

用于将一系列单元格分组到 Excel 表格中。

参数

  • first_row (int) − 范围的第一行。 (全零索引)

  • first_col (int) − 范围的第一列。

  • last_row (int) − 范围的最后一行。

  • last_col (int) − 范围的最后一列。

  • options (dict) − 表格格式选项。

autofilter()

在工作表中设置自动筛选区域。 它将下拉列表添加到二维工作表数据范围的标题中。 用户可以根据简单的条件过滤数据。

参数

  • first_row (int) − 范围的第一行。 (全零索引)

  • first_col (int) − 范围的第一列。

  • last_row (int) − 范围的最后一行。

  • last_col (int) − 范围的最后一列。


Format 类

格式对象是通过调用工作簿add_format() 方法创建的。 此对象可用的方法和属性与字体、颜色、图案、边框、对齐方式和数字格式有关。

字体格式化方法和属性 −

方法名称 说明 属性
set_font_name() 字体类型 'font_name'
set_font_size() 字体大小 'font_size'
set_font_color() 字体颜色 'font_color'
set_bold() 粗体 'bold'
set_italic() 斜体 'italic'
set_underline() 下划线 'underline'
set_font_strikeout() Strikeout 'font_strikeout'
set_font_script() 上标/下标 'font_script'

对齐格式化方法和属性

方法名称 说明 属性
set_align() 水平对齐 'align'
set_align() 垂直对齐 'valign'
set_rotation() 旋转 'rotation'
set_text_wrap() 文本换行 'text_wrap'
set_reading_order() 阅读顺序 'reading_order'
set_text_justlast() 最后对齐 'text_justlast'
set_center_across() 居中 'center_across'
set_indent() 缩进 'indent'
set_shrink() 缩小以适合 'shrink'

Chart 类

图表对象是通过指定图表类型的 Workbook 对象的 add_chart() 方法创建的。

chart = workbook.add_chart({'type': 'column'})

通过调用insert_chart() 方法将图表 对象插入到工作表中。

worksheet.insert_chart('A7', chart)

XlxsWriter 支持以下图表类型 −

  • area − 创建面积(实线)样式图表。

  • bar − 创建条形图(转置直方图)图表。

  • column − 创建柱形(直方图)图表。

  • line − 创建线条样式图表。

  • pie − 创建饼图样式图表。

  • doughnut − 创建圆环样式图表。

  • scatter − 创建散点样式图表。

  • stock − 创建股票样式图表。

  • radar − 创建雷达样式图表。

Chart类定义了以下方法 −

add_series(options)

将数据系列添加到图表。 可以给出以下属性 −

  • Values, categories
  • name
  • line, border
  • fill , pattern , gradient
  • data_labels, points

set_x_axis(options)

设置图表X轴选项包括

  • name, name_font
  • num_font, num_format
  • line, fill, pattern, gradient
  • min, max
  • position_axis
  • label_position, label_align
  • date_axis, text_axis
  • minor_unit_type, major_unit_type

set_y_axis(options)

设置图表 Y 轴选项包括 −

  • name, name_font
  • num_font, num_format
  • line, fill, pattern, gradient
  • min, max
  • position_axis
  • label_position, label_align
  • date_axis, text_axis
  • minor_unit_type, major_unit_type

set_size()

该方法用于设置图表的维度。 可以通过设置宽度和高度或设置 x_scaley_scale 来修改图表的大小。

set_title(options)

设置图表标题选项。

参数

  • options (dict) − 图表大小选项的字典。

  • name − 设置图表的名称(标题)。 名称显示在图表上方。

  • name_font − 设置图表标题的字体属性。

  • overlay − 允许标题覆盖在图表上。

  • layout − 以图表相对单位设置标题的 (x, y) 位置。

set_legend()

此方法使用以下属性格式化图表图例 −

  • none
  • position, font, border
  • fill, pattern, gradient

Chartsheet 类

XLSX 文件中的图表是只包含图表而没有其他数据的工作表。 通过调用 Workbook 对象的 add_chartsheet() 方法创建一个新的 chartsheet 对象 −

chartsheet = workbook.add_chartsheet()

Chartsheet 类的某些功能类似于数据工作表的功能,例如选项卡选择、页眉、页脚、页边距和打印属性。 但是,它的主要目的是显示单个图表,而普通数据工作表可以包含一个或多个嵌入图表。

chartsheet 图表的数据必须存在于单独的工作表中。 因此,它总是与至少一个数据工作表一起创建,使用 set_chart() 方法。

chartsheet = workbook.add_chartsheet()
chart = workbook.add_chart({'type': 'column'})
chartsheet.set_chart(chart)

请记住,Chartsheet 只能包含一个图表。


示例

以下代码在工作表名称 sheet1 中写入数据系列,但打开一个新的图表表以根据 sheet1 中的数据添加柱形图。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()

cs = wb.add_chartsheet()
chart = wb.add_chart({'type': 'column'})

data = [
   [10, 20, 30, 40, 50],
   [20, 40, 60, 80, 100],
   [30, 60, 90, 120, 150],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2]) 

chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

cs.set_chart(chart)
cs.activate()

wb.close()

输出

图表表类

异常类

XlsxWriter 识别各种运行时错误或异常,这些错误或异常可以使用 Python 的错误处理技术捕获,以避免损坏 Excel 文件。 XlsxWriter中的Exception类如下 −

Sr.No 异常类 & 描述
1

XlsxWriterException

XlsxWriter 的基本异常。

2

XlsxFileError

所有文件相关错误的基本异常。

3

XlsxInputError

所有输入数据相关错误的基本异常。

4

FileCreateError

在将 xlsx 文件写入磁盘或文件已在 Excel 中打开时出现文件权限错误或 IO 错误时发生。

5

UndefinedImageSize

如果图像不包含高度或宽度信息,则使用 insert_image() 方法引发。 在工作簿 close() 期间引发异常。

6

UnsupportedImageFormat

如果图像不是受支持的文件格式之一,则引发:PNG、JPEG、GIF、BMP、WMF 或 EMF。

7

EmptyChartSeries

将图表添加到没有数据系列的工作表时会发生此异常。

8

InvalidWorksheetName

如果工作表名称太长或包含无效字符。

9

DuplicateWorksheetName

当工作表名称已经存在时会引发此异常。

异常 FileCreateError

假设名为 hello.xlsx 的工作簿已使用 Excel 应用程序打开,则以下代码将引发 FileCreateError

import xlsxwriter
workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()
workbook.close()

运行此程序时,错误信息显示如下 −

PermissionError: [Errno 13] Permission denied: 'hello.xlsx'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
   File "hello.py", line 4, in <module>
   workbook.close()
File "e:\xlsxenv\lib\site-packages\xlsxwriter\workbook.py", line 326, in close
   raise FileCreateError(e)
xlsxwriter.exceptions.FileCreateError: [Errno 13] Permission denied: 'hello.xlsx'

处理异常

为此我们可以使用Python的异常处理机制。

import xlsxwriter
try:
   workbook = xlsxwriter.Workbook('hello.xlsx')
   worksheet = workbook.add_worksheet()
   workbook.close()
except:
   print ("The file is already open")

现在将显示自定义错误消息。

(xlsxenv) E:\xlsxenv>python ex34.py
The file is already open

异常 EmptyChartSeries

图表添加数据系列时引发异常的另一种情况。

import xlsxwriter
workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})
worksheet.insert_chart('A7', chart)
workbook.close()

这会导致 EmptyChartSeries 异常 −

xlsxwriter.exceptions.EmptyChartSeries: Chart1 must contain at least one data series.