Python Openpyxl
- 1. openpyxl是什么?
- 2. Openpyxl 使用步骤
- 3. Openpyxl 按列迭代
- 4. Openpyxl 复制工作表
- 5. Openpyxl 统计
- 6. Openpyxl 维度
- 7. Openpyxl 工作表
- 8. Openpyxl 冻结窗格
- 9. Openpyxl 公式
- 10. OpenPyXL 图片
1. openpyxl是什么?
openpyxl是一个用于操作Excel文件的Python库,可以通过编写Python代码读取和写入Excel文件,实现对Excel文件的读取、操作和处理。它支持Excel 2007及其以后版本的.xlsx文件格式,并且具有较好的性能和灵活性,可以方便地进行Excel文件的处理和操作。openpyxl可以在Windows、Linux、macOS等多个平台上运行,同时也是一个开源的库
2. Openpyxl 使用步骤
1.安装openpyxl 要使用openpyxl,首先需要安装该库。在命令行中输入以下命令可以安装openpyxl:
1pip install openpyxl
2.导入openpyxl 安装openpyxl后,我们需要在Python脚本中导入它。以下是导入openpyxl的示例代码:
import openpyxl
创建新文件
在第一个示例中,我们使用openpyxl创建一个新的 xlsx 文件。
write_xlsx.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4import time
5
6book = Workbook()
7sheet = book.active
8
9sheet['A1'] = 56
10sheet['A2'] = 43
11
12now = time.strftime("%Y-%m-%d")
13sheet['A3'] = now
14
15book.save("sample.xlsx")
在示例中,我们创建一个新的 xlsx 文件。 我们将数据写入三个单元格。
1from openpyxl import Workbook
从openpyxl模块,我们导入Workbook类。 工作簿是文档所有其他部分的容器。
1book = Workbook()
我们创建一个新的工作簿。 始终使用至少一个工作表创建一个工作簿。
1sheet = book.active
我们获得对活动工作表的引用。
1sheet['A1'] = 56
2sheet['A2'] = 43
我们将数值数据写入单元格 A1 和 A2。
1now = time.strftime("%Y-%m-%d")
2sheet['A3'] = now
我们将当前日期写入单元格 A3。
1book.save("sample.xlsx")
我们使用save()方法将内容写入sample.xlsx文件。

2.1. Openpyxl 写入单元格
写入单元格有两种基本方法:使用工作表的键(例如 A1 或 D3),或通过cell()方法使用行和列表示法。
write2cell.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7
8sheet['A1'] = 1
9sheet.cell(row=2, column=2).value = 2
10
11book.save('write2cell.xlsx')
在示例中,我们将两个值写入两个单元格。
1sheet['A1'] = 1
在这里,我们将数值分配给 A1 单元。
1sheet.cell(row=2, column=2).value = 2
在这一行中,我们用行和列表示法写入单元格 B2。

2.2. Openpyxl 附加值
使用append()方法,我们可以在当前工作表的底部附加一组值。

appending_values.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7
8rows = (
9 (88, 46, 57),
10 (89, 38, 12),
11 (23, 59, 78),
12 (56, 21, 98),
13 (24, 18, 43),
14 (34, 15, 67)
15)
16
17for row in rows:
18 sheet.append(row)
19
20book.save('appending.xlsx')
在示例中,我们将三列数据附加到当前工作表中。
1rows = (
2 (88, 46, 57),
3 (89, 38, 12),
4 (23, 59, 78),
5 (56, 21, 98),
6 (24, 18, 43),
7 (34, 15, 67)
8)
数据存储在元组的元组中。
1for row in rows:
2 sheet.append(row)
我们逐行浏览容器,并使用append()方法插入数据行。
2.3. OpenPyXL 读取单元格
在下面的示例中,我们从sample.xlsx文件中读取先前写入的数据。
read_cells.py
1#!/usr/bin/env python
2
3import openpyxl
4
5book = openpyxl.load_workbook('sample.xlsx')
6
7sheet = book.active
8
9a1 = sheet['A1']
10a2 = sheet['A2']
11a3 = sheet.cell(row=3, column=1)
12
13print(a1.value)
14print(a2.value)
15print(a3.value)

该示例加载一个现有的 xlsx 文件并读取三个单元格。
1book = openpyxl.load_workbook('sample.xlsx')
使用load_workbook()方法打开文件。
1a1 = sheet['A1']
2a2 = sheet['A2']
3a3 = sheet.cell(row=3, column=1)
我们读取 A1,A2 和 A3 单元的内容。 在第三行中,我们使用cell()方法获取 A3 单元格的值。
1$ ./read_cells.py
256
343
410/26/16
2.4. OpenPyXL 读取多个单元格
我们有以下数据表:

我们使用范围运算符读取数据。
read_cells2.py
1#!/usr/bin/env python
2
3import openpyxl
4
5book = openpyxl.load_workbook('items.xlsx')
6
7sheet = book.active
8
9cells = sheet['A1': 'B6']
10
11for c1, c2 in cells:
12 print("{0:8} {1:8}".format(c1.value, c2.value))
在示例中,我们使用范围运算从两列读取数据。
1cells = sheet['A1': 'B6']
在这一行中,我们从单元格 A1-B6 中读取数据。
1for c1, c2 in cells:
2 print("{0:8} {1:8}".format(c1.value, c2.value))
format()功能用于在控制台上整洁地输出数据。
1$ ./read_cells2.py
2Items Quantity
3coins 23
4chairs 3
5pencils 5
6bottles 8
7books 30
2.5. Openpyxl 按行迭代
iter_rows()方法将工作表中的单元格返回为行。

iterating_by_rows.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7
8rows = (
9 (88, 46, 57),
10 (89, 38, 12),
11 (23, 59, 78),
12 (56, 21, 98),
13 (24, 18, 43),
14 (34, 15, 67)
15)
16
17for row in rows:
18 sheet.append(row)
19
20for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=3):
21 for cell in row:
22 print(cell.value, end=" ")
23 print()
24
25book.save('iterbyrows.xlsx')
该示例逐行遍历数据。
1for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=3):
我们提供了迭代的边界。
1$ ./iterating_by_rows.py
288 46 57
389 38 12
423 59 78
556 21 98
624 18 43
734 15 67
3. Openpyxl 按列迭代
iter_cols()方法将工作表中的单元格作为列返回。
iterating_by_columns.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7
8rows = (
9 (88, 46, 57),
10 (89, 38, 12),
11 (23, 59, 78),
12 (56, 21, 98),
13 (24, 18, 43),
14 (34, 15, 67)
15)
16
17for row in rows:
18 sheet.append(row)
19
20for row in sheet.iter_cols(min_row=1, min_col=1, max_row=6, max_col=3):
21 for cell in row:
22 print(cell.value, end=" ")
23 print()
24
25book.save('iterbycols.xlsx')
该示例逐列遍历数据。
1$ ./iterating_by_columns.py
288 89 23 56 24 34
346 38 59 21 18 15
457 12 78 98 43 67
4. Openpyxl 复制工作表
1import openpyxl
2
3workbook = openpyxl.load_workbook('example.xlsx')
4
5# 复制工作表
6copied_sheet = workbook.copy_worksheet(workbook['Sheet1'])
7copied_sheet.title = 'Copy of Sheet1'
8
9# 保存工作簿
10workbook.save('example_with_copy.xlsx')
5. Openpyxl 统计
对于下一个示例,我们需要创建一个包含数字的 xlsx 文件。 例如,我们使用RANDBETWEEN()函数在 10 列中创建了 25 行数字。
mystats.py
1#!/usr/bin/env python
2
3import random
4import openpyxl
5import statistics as stats
6
7# book = openpyxl.Workbook()
8
9# sheet = book.active
10
11# rows = (
12
13# (
14
15# random.randint(20, 100),
16
17# random.randint(20, 100),
18
19# random.randint(20, 100),
20
21# random.randint(20, 100),
22
23# random.randint(20, 100),
24
25# random.randint(20, 100),
26
27# ),
28
29# (
30
31# random.randint(20, 100),
32
33# random.randint(20, 100),
34
35# random.randint(20, 100),
36
37# random.randint(20, 100),
38
39# random.randint(20, 100),
40
41# random.randint(20, 100),
42
43# ),
44
45# (
46
47# random.randint(20, 100),
48
49# random.randint(20, 100),
50
51# random.randint(20, 100),
52
53# random.randint(20, 100),
54
55# random.randint(20, 100),
56
57# random.randint(20, 100),
58
59# ),
60
61# (
62
63# random.randint(20, 100),
64
65# random.randint(20, 100),
66
67# random.randint(20, 100),
68
69# random.randint(20, 100),
70
71# random.randint(20, 100),
72
73# random.randint(20, 100),
74
75# ),
76
77# (
78
79# random.randint(20, 100),
80
81# random.randint(20, 100),
82
83# random.randint(20, 100),
84
85# random.randint(20, 100),
86
87# random.randint(20, 100),
88
89# random.randint(20, 100),
90
91# ),
92
93# (
94
95# random.randint(20, 100),
96
97# random.randint(20, 100),
98
99# random.randint(20, 100),
100
101# random.randint(20, 100),
102
103# random.randint(20, 100),
104
105# random.randint(20, 100),
106
107# ),
108
109# (
110
111# random.randint(20, 100),
112
113# random.randint(20, 100),
114
115# random.randint(20, 100),
116
117# random.randint(20, 100),
118
119# random.randint(20, 100),
120
121# random.randint(20, 100),
122
123# ),
124
125# (
126
127# random.randint(20, 100),
128
129# random.randint(20, 100),
130
131# random.randint(20, 100),
132
133# random.randint(20, 100),
134
135# random.randint(20, 100),
136
137# random.randint(20, 100),
138
139# ),
140
141# (
142
143# random.randint(20, 100),
144
145# random.randint(20, 100),
146
147# random.randint(20, 100),
148
149# random.randint(20, 100),
150
151# random.randint(20, 100),
152
153# random.randint(20, 100),
154
155# ),
156
157# (
158
159# random.randint(20, 100),
160
161# random.randint(20, 100),
162
163# random.randint(20, 100),
164
165# random.randint(20, 100),
166
167# random.randint(20, 100),
168
169# random.randint(20, 100),
170
171# ),
172
173# (
174
175# random.randint(20, 100),
176
177# random.randint(20, 100),
178
179# random.randint(20, 100),
180
181# random.randint(20, 100),
182
183# random.randint(20, 100),
184
185# random.randint(20, 100),
186
187# ),
188
189# )
190
191
192
193# for row in rows:
194
195# sheet.append(row)
196
197# book.save("numbers.xlsx")
198
199book = openpyxl.load_workbook("numbers.xlsx", data_only=True)
200sheet = book.active
201
202rows = sheet.rows
203values = []
204
205for row in rows:
206for cell in row:
207values.append(cell.value)
208print("Number of values: {0}".format(len(values)))
209print("Sum of values: {0}".format(sum(values)))
210print("Minimum value: {0}".format(min(values)))
211print("Maximum value: {0}".format(max(values)))
212print("Mean: {0}".format(stats.mean(values)))
213print("Median: {0}".format(stats.median(values)))
214print("Standard deviation: {0}".format(stats.stdev(values)))
215print("Variance: {0}".format(stats.variance(values)))
在示例中,我们从工作表中读取所有值并计算一些基本统计信息。
1import statistics as stats
导入statistics模块以提供一些统计功能,例如中值和方差。
1book = openpyxl.load_workbook('numbers.xlsx', data_only=True)
使用data_only选项,我们从单元格而不是公式中获取值。
1rows = sheet.rows
我们得到所有不为空的单元格行。
1for row in rows:
2 for cell in row:
3 values.append(cell.value)
在两个 for 循环中,我们从单元格中形成一个整数值列表。
1print("Number of values: {0}".format(len(values)))
2print("Sum of values: {0}".format(sum(values)))
3print("Minimum value: {0}".format(min(values)))
4print("Maximum value: {0}".format(max(values)))
5print("Mean: {0}".format(stats.mean(values)))
6print("Median: {0}".format(stats.median(values)))
7print("Standard deviation: {0}".format(stats.stdev(values)))
8print("Variance: {0}".format(stats.variance(values)))
我们计算并打印有关值的数学统计信息。 一些功能是内置的,其他功能是通过statistics模块导入的。
1$ ./mystats.py
2Number of values: 312
3Sum of values: 15877
4Minimum value: 0
5Maximum value: 100
6Mean: 50.88782051282051
7Median: 54.0
8Standard deviation: 28.459203819700967
9Variance: 809.9262820512821
5.1. Openpyxl 过滤器&排序数据
工作表具有auto_filter属性,该属性允许设置过滤条件和排序条件。


请注意,Openpyxl 设置了条件,但是我们必须在电子表格应用中应用它们。
filter_sort.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5wb = Workbook()
6sheet = wb.active
7
8data = [
9 ['Item', 'Colour'],
10 ['pen', 'brown'],
11 ['book', 'black'],
12 ['plate', 'white'],
13 ['chair', 'brown'],
14 ['coin', 'gold'],
15 ['bed', 'brown'],
16 ['notebook', 'white'],
17]
18
19for r in data:
20 sheet.append(r)
21
22sheet.w.ref = 'A1:B8'
23sheet.auto_filter.add_filter_column(1, ['brown', 'white'])
24sheet.auto_filter.add_sort_condition('B2:B8')
25
26wb.save('filtered.xlsx')
在示例中,我们创建一个包含项目及其颜色的工作表。 我们设置一个过滤器和一个排序条件。
6. Openpyxl 维度
为了获得那些实际包含数据的单元格,我们可以使用维度。
dimensions.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7sheet["A3"] = 39
8sheet["B3"] = 19
9sheet["C3"] = 19
10sheet["D3"] = 19
11
12print(sheet.dimensions)
13print("Minimum row: {0}".format(sheet.min_row))
14print("Maximum row: {0}".format(sheet.max_row))
15print("Minimum column: {0}".format(sheet.min_column))
16print("Maximum column: {0}".format(sheet.max_column))
17
18rows = [
19
20(88, 46, 46, 46),
21(89, 38, 38, 38),
22(23, 59, 59, 59),
23(56, 21, 21, 21),
24(24, 18, 18, 18),
25(34, 15, 15, 15),
26]
27
28
29
30for row in rows:
31
32sheet.append(row)
33
34print(sheet.dimensions)
35print("Minimum row: {0}".format(sheet.min_row))
36print("Maximum row: {0}".format(sheet.max_row))
37print("Minimum column: {0}".format(sheet.min_column))
38print("Maximum column: {0}".format(sheet.max_column))
39
40for c1, c2, c3, c4 in sheet[sheet.dimensions]:
41print(c1.value, c2.value, c3.value, c4.value)
42
43book.save("dimensions.xlsx")
A3:D3
Minimum row: 3
Maximum row: 3
Minimum column: 1
Maximum column: 4
A3:D9
Minimum row: 3
Maximum row: 9
Minimum column: 1
Maximum column: 4
39 19 19 19
88 46 46 46
89 38 38 38
23 59 59 59
56 21 21 21
24 18 18 18
34 15 15 15
该示例计算两列数据的维数。
1sheet['A3'] = 39
2sheet['B3'] = 19
3
4rows = [
5 (88, 46),
6 (89, 38),
7 (23, 59),
8 (56, 21),
9 (24, 18),
10 (34, 15)
11]
12
13for row in rows:
14 sheet.append(row)
我们将数据添加到工作表。 请注意,我们从第三行开始添加。
1sheet['A3'] = 39
2sheet['B3'] = 19

1print(sheet.dimensions)

dimensions属性返回非空单元格区域的左上角和右下角单元格。
1print("Minimum row: {0}".format(sheet.min_row))
2print("Maximum row: {0}".format(sheet.max_row))

使用min_row和max_row属性,我们可以获得包含数据的最小和最大行。
1print("Minimum column: {0}".format(sheet.min_column))
2print("Maximum column: {0}".format(sheet.max_column))

1sheet["A3"] = 39
2sheet["B3"] = 19
3sheet["C3"] = 19
4sheet["D3"] = 19
5
6print(sheet.dimensions)
7print("Minimum column: {0}".format(sheet.min_column))
8print("Maximum column: {0}".format(sheet.max_column))s

通过min_column和max_column属性,我们获得了包含数据的最小和最大列。
1for c1, c2 in sheet[sheet.dimensions]:
2 print(c1.value, c2.value)
我们遍历数据并将其打印到控制台。
1$ ./dimensions.py
2A3:B9
3Minimum row: 3
4Maximum row: 9
5Minimum column: 1
6Maximum column: 2
739 19
888 46
989 38
1023 59
1156 21
1224 18
1334 15
7. Openpyxl 工作表
每个工作簿可以有多个工作表。

让手动创建一张包含这三张纸的工作簿。
sheets.py
1#!/usr/bin/env python
2
3import openpyxl
4
5book = openpyxl.load_workbook("sheets.xlsx")
6print(book.sheetnames)
7active_sheet = book.active
8print(type(active_sheet))
9sheet = book["March"]
10print(sheet.title)
该程序可用于 Excel 工作表。
1print(book.sheetnames)
sheetnames 返回工作簿中可用工作表的名称。
1active_sheet = book.active
2print(type(active_sheet))
我们获取活动表并将其类型打印到终端。
1sheet = book["March"]
我们使用book[“March”]获得对工作表的引用。
1print(sheet.title)
检索到的工作表的标题将打印到终端。
1$ ./sheets.py
2['January', 'February', 'March']
3
4<class 'openpyxl.worksheet.worksheet.Worksheet'>
5
6March
这是程序的输出。
sheets2.py
1#!/usr/bin/env python
2
3import openpyxl
4
5book = openpyxl.load_workbook("sheets.xlsx")
6book.create_sheet("April")
7print(book.sheetnames)
8
9sheet1 = book["January"]
10book.remove(sheet1)
11print(book.sheetnames)
12
13book.create_sheet("January", 0)
14print(book.sheetnames)
15book.save("sheets2.xlsx")
在此示例中,我们创建一个新工作表。
1book.create_sheet("April")
使用create_sheet()方法创建一个新工作表。
1print(book.sheetnames)
工作表名称也可以使用sheetnames属性显示。
1book.remove(sheet1)
可以使用remove()方法将工作表删除。
1book.create_sheet("January", 0)
可以在指定位置创建一个新工作表。 在我们的例子中,我们在索引为 0 的位置创建一个新工作表。
1$ ./sheets2.py
2['January', 'February', 'March', 'April']
3['February', 'March', 'April']
4['January', 'February', 'March', 'April']
可以更改工作表的背景颜色。
sheets3.py
1#!/usr/bin/env python
2
3import openpyxl
4
5book = openpyxl.load_workbook('sheets.xlsx')
6
7sheet = book["March"]
8sheet.sheet_properties.tabColor = "0072BA"
9
10book.save('sheets3.xlsx')

该示例修改了标题为“ March”的工作表的背景颜色。
1sheet.sheet_properties.tabColor = "0072BA"
我们将tabColor属性更改为新颜色。
第三工作表的背景色已更改为某种蓝色。
7.1. Openpyxl 合并单元格
单元格可以使用merge_cells()方法合并,而可以不使用unmerge_cells()方法合并。 当我们合并单元格时,除了左上角的所有单元格都将从工作表中删除。
merging_cells.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4from openpyxl.styles import Alignment
5
6book = Workbook()
7sheet = book.active
8sheet["A1"] = "Weather"
9sheet["B1"] = "Temperature"
10sheet["A2"] = "Sunny day"
11sheet["B2"] = "25°C"
12
13sheet.merge_cells('A1:B2')
14
15cell = sheet.cell(row=1, column=1)
16cell.value = 'Sunny day'
17cell.alignment = Alignment(horizontal='center', vertical='center')
18
19book.save('merging.xlsx')
在该示例中,我们合并了四个单元格:A1,B1,A2 和 B2。 最后一个单元格中的文本居中。
1from openpyxl.styles import Alignment
为了使文本在最后一个单元格中居中,我们使用了openpyxl.styles模块中的Alignment类。
1sheet.merge_cells('A1:B2')
我们用merge_cells()方法合并四个单元格。
1cell = sheet.cell(row=1, column=1)
我们得到了最后一个单元格。
1cell.value = 'Sunny day'
2cell.alignment = Alignment(horizontal='center', vertical='center')

我们将文本设置为合并的单元格并更新其对齐方式。
8. Openpyxl 冻结窗格
冻结窗格时,在滚动到工作表的另一个区域时,我们会保持工作表的某个区域可见。
freezing.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4from openpyxl.styles import Alignment
5
6book = Workbook()
7sheet = book.active
8
9 sheet.freeze_panes = 'B2'
10
11book.save('freezing.xlsx')
该示例通过单元格 B2 冻结窗格。
1sheet.freeze_panes = 'B2'
要冻结窗格,我们使用freeze_panes属性。
9. Openpyxl 公式
下一个示例显示如何使用公式。 openpyxl不进行计算; 它将公式写入单元格。
formulas.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4
5book = Workbook()
6sheet = book.active
7
8rows = (
9 (34, 26),
10 (88, 36),
11 (24, 29),
12 (15, 22),
13 (56, 13),
14 (76, 18)
15)
16
17for row in rows:
18 sheet.append(row)
19
20cell = sheet.cell(row=7, column=2)
21cell.value = "=SUM(A1:B6)"
22cell.font = cell.font.copy(bold=True)
23
24book.save('formulas.xlsx')
在示例中,我们使用SUM()函数计算所有值的总和,并以粗体显示输出样式。
1rows = (
2 (34, 26),
3 (88, 36),
4 (24, 29),
5 (15, 22),
6 (56, 13),
7 (76, 18)
8)
9
10for row in rows:
11 sheet.append(row)
我们创建两列数据。
1cell = sheet.cell(row=7, column=2)
我们得到显示计算结果的单元格。
1cell.value = "=SUM(A1:B6)"
我们将一个公式写入单元格。
1cell.font = cell.font.copy(bold=True)
我们更改字体样式。

10. OpenPyXL 图片
在下面的示例中,我们显示了如何将图像插入到工作表中。
write_image.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4from openpyxl.drawing.image import Image
5
6book = Workbook()
7sheet = book.active
8
9img = Image("icesid.png")
10sheet['A1'] = 'This is Sid'
11
12sheet.add_image(img, 'B2')
13
14book.save("sheet_image.xlsx")
在示例中,我们将图像写到工作表上。
1from openpyxl.drawing.image import Image
我们使用openpyxl.drawing.image模块中的Image类。
1img = Image("icesid.png")
创建一个新的Image类。 icesid.png图像位于当前工作目录中。
1sheet.add_image(img, 'B2')
我们使用add_image()方法添加新图像。

10.1. Openpyxl 图表
openpyxl库支持创建各种图表,包括条形图,折线图,面积图,气泡图,散点图和饼图。
根据文档,openpyxl仅支持在工作表中创建图表。 现有工作簿中的图表将丢失。
create_bar_chart.py
1#!/usr/bin/env python
2
3from openpyxl import Workbook
4from openpyxl.chart import (
5 Reference,
6 Series,
7 BarChart
8)
9
10book = Workbook()
11sheet = book.active
12
13rows = [
14 ("USA", 46),
15 ("China", 38),
16 ("UK", 29),
17 ("Russia", 22),
18 ("South Korea", 13),
19 ("Germany", 11)
20]
21
22for row in rows:
23 sheet.append(row)
24
25data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
26categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
27
28chart = BarChart()
29chart.add_data(data=data)
30chart.set_categories(categs)
31
32chart.legend = None
33chart.y_axis.majorGridlines = None
34chart.varyColors = True
35chart.title = "Olympic Gold medals in London"
36
37sheet.add_chart(chart, "A8")
38
39book.save("bar_chart.xlsx")
在此示例中,我们创建了一个条形图,以显示 2012 年伦敦每个国家/地区的奥运金牌数量。
1from openpyxl.chart import (
2 Reference,
3 Series,
4 BarChart
5)
openpyxl.chart模块具有使用图表的工具。
1book = Workbook()
2sheet = book.active
创建一个新的工作簿。
1rows = [
2 ("USA", 46),
3 ("China", 38),
4 ("UK", 29),
5 ("Russia", 22),
6 ("South Korea", 13),
7 ("Germany", 11)
8]
9
10for row in rows:
11 sheet.append(row)
我们创建一些数据并将其添加到活动工作表的单元格中。
1data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
对于Reference类,我们引用表中代表数据的行。 在我们的案例中,这些是奥运金牌的数量。
1categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
我们创建一个类别轴。 类别轴是将数据视为一系列非数字文本标签的轴。 在我们的案例中,我们有代表国家名称的文本标签。
1chart = BarChart()
2chart.add_data(data=data)
3chart.set_categories(categs)
我们创建一个条形图并为其设置数据和类别。
1chart.legend = None
2chart.y_axis.majorGridlines = None
使用legend和majorGridlines属性,可以关闭图例和主要网格线。
1chart.varyColors = True
将varyColors设置为True,每个条形都有不同的颜色。
1chart.title = "Olympic Gold medals in London"
为图表设置标题。
1sheet.add_chart(chart, "A8")
使用add_chart()方法将创建的图表添加到工作表中。

10.2. Openpyxl 如何拷贝一个工作表到别一个工作表
1# importing openpyxl module`
2
3mport openpyxl as xl;
4
5# opening the source excel file
6
7filename ="C:\\Users\\Admin\\Desktop\\trading.xlsx"
8
9wb1 = xl.load_workbook(filename)
10
11ws1 = wb1.worksheets[0]
12
13# opening the destination excel file
14
15filename1 ="C:\\Users\\Admin\\Desktop\\test.xlsx"
16
17wb2 = xl.load_workbook(filename1)
18
19ws2 = wb2.active
20
21# calculate total number of rows and
22
23# columns in source excel file
24
25mr = ws1.max_row
26
27mc = ws1.max_column
28
29# copying the cell values from source
30
31# excel file to destination excel file
32
33for i in range (1, mr + 1):
34
35 for j in range (1, mc + 1):
36
37 # reading cell value from source excel file
38
39 c = ws1.cell(row = i, column = j)
40
41 # writing the read value to destination excel file
42
43 ws2.cell(row = i, column = j).value = c.value
44
45# saving the destination excel file
46
47wb2.save(str(filename1))