Maison > développement back-end > Tutoriel Python > Comment utiliser Python pour faire fonctionner l'artefact Excel openpyxl

Comment utiliser Python pour faire fonctionner l'artefact Excel openpyxl

PHPz
Libérer: 2023-05-12 10:01:05
avant
2513 Les gens l'ont consulté

Excel xlsx

xlsx est l'extension de fichier du format de fichier de feuille de calcul Open XML utilisé par Microsoft Excel. Les fichiers xlsm prennent en charge les macros. xlsx est un format binaire propriétaire, tandis que xlsx est basé sur le format Office Open XML.

$ sudo pip3 install openpyxl
Copier après la connexion

Nous utilisons l'outil pip3 pour installer openpyxl. pip3工具安装openpyxl

Openpyxl 创建新文件

在第一个示例中,我们使用openpyxl创建一个新的 xlsx 文件。

write_xlsx.py

#!/usr/bin/env python
 
from openpyxl import Workbook
import time
 
book = Workbook()
sheet = book.active
 
sheet['A1'] = 56
sheet['A2'] = 43
 
now = time.strftime("%x")
sheet['A3'] = now
 
book.save("sample.xlsx")
Copier après la connexion

在示例中,我们创建一个新的 xlsx 文件。 我们将数据写入三个单元格。

from openpyxl import Workbook
Copier après la connexion

openpyxl模块,我们导入Workbook类。 工作簿是文档所有其他部分的容器。

book = Workbook()
Copier après la connexion

我们创建一个新的工作簿。 始终使用至少一个工作表创建一个工作簿。

sheet = book.active
Copier après la connexion

我们获得对活动工作表的引用。

sheet['A1'] = 56
sheet['A2'] = 43
Copier après la connexion

我们将数值数据写入单元格 A1 和 A2。

now = time.strftime("%x")
sheet['A3'] = now
Copier après la connexion

我们将当前日期写入单元格 A3。

book.save("sample.xlsx")
Copier après la connexion

我们使用save()方法将内容写入sample.xlsx文件。

Openpyxl 写入单元格

写入单元格有两种基本方法:使用工作表的键(例如 A1 或 D3),或通过cell()方法使用行和列表示法。

write2cell.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
sheet['A1'] = 1
sheet.cell(row=2, column=2).value = 2
 
book.save('write2cell.xlsx')
Copier après la connexion

在示例中,我们将两个值写入两个单元格。

sheet['A1'] = 1
Copier après la connexion

在这里,我们将数值分配给 A1 单元。

sheet.cell(row=2, column=2).value = 2
Copier après la connexion

在这一行中,我们用行和列表示法写入单元格 B2。

Openpyxl 附加值

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

appending_values.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
rows = (
    (88, 46, 57),
    (89, 38, 12),
    (23, 59, 78),
    (56, 21, 98),
    (24, 18, 43),
    (34, 15, 67)
)
 
for row in rows:
    sheet.append(row)
 
book.save('appending.xlsx')
Copier après la connexion

在示例中,我们将三列数据附加到当前工作表中。

rows = (
    (88, 46, 57),
    (89, 38, 12),
    (23, 59, 78),
    (56, 21, 98),
    (24, 18, 43),
    (34, 15, 67)
)
Copier après la connexion

数据存储在元组的元组中。

for row in rows:
    sheet.append(row)
Copier après la connexion

我们逐行浏览容器,并使用append()方法插入数据行。

OpenPyXL 读取单元格

在下面的示例中,我们从sample.xlsx文件中读取先前写入的数据。

read_cells.py

#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook('sample.xlsx')
 
sheet = book.active
 
a1 = sheet['A1']
a2 = sheet['A2']
a3 = sheet.cell(row=3, column=1)
 
print(a1.value)
print(a2.value) 
print(a3.value)
Copier après la connexion

该示例加载一个现有的 xlsx 文件并读取三个单元格。

book = openpyxl.load_workbook('sample.xlsx')
Copier après la connexion

使用load_workbook()方法打开文件。

a1 = sheet['A1']
a2 = sheet['A2']
a3 = sheet.cell(row=3, column=1)
Copier après la connexion

我们读取 A1,A2 和 A3 单元的内容。 在第三行中,我们使用cell()方法获取 A3 单元格的值。

$ ./read_cells.py 
56
43
10/26/16
Copier après la connexion

这是示例的输出。

OpenPyXL 读取多个单元格

我们有以下数据表:

我们使用范围运算符读取数据。

read_cells2.py

#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook('items.xlsx')
 
sheet = book.active
 
cells = sheet['A1': 'B6']
 
for c1, c2 in cells:
    print("{0:8} {1:8}".format(c1.value, c2.value))
Copier après la connexion

在示例中,我们使用范围运算从两列读取数据。

cells = sheet['A1': 'B6']
Copier après la connexion

在这一行中,我们从单元格 A1-B6 中读取数据。

for c1, c2 in cells:
    print("{0:8} {1:8}".format(c1.value, c2.value))
Copier après la connexion

format()功能用于在控制台上整洁地输出数据。

$ ./read_cells2.py 
Items    Quantity
coins          23
chairs          3
pencils         5
bottles         8
books          30
Copier après la connexion

Openpyxl 按行迭代

iter_rows()方法将工作表中的单元格返回为行。

iterating_by_rows.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
rows = (
    (88, 46, 57),
    (89, 38, 12),
    (23, 59, 78),
    (56, 21, 98),
    (24, 18, 43),
    (34, 15, 67)
)
 
for row in rows:
    sheet.append(row)
 
for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=3):
    for cell in row:
        print(cell.value, end=" ")
    print()    
 
book.save('iterbyrows.xlsx')
Copier après la connexion

该示例逐行遍历数据。

for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=3):
Copier après la connexion

我们提供了迭代的边界。

$ ./iterating_by_rows.py 
88 46 57 
89 38 12 
23 59 78 
56 21 98 
24 18 43 
34 15 67
Copier après la connexion

Openpyxl 按列迭代

iter_cols()方法将工作表中的单元格作为列返回。

iterating_by_columns.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
rows = (
    (88, 46, 57),
    (89, 38, 12),
    (23, 59, 78),
    (56, 21, 98),
    (24, 18, 43),
    (34, 15, 67)
)
 
for row in rows:
    sheet.append(row)
 
for row in sheet.iter_cols(min_row=1, min_col=1, max_row=6, max_col=3):
    for cell in row:
        print(cell.value, end=" ")
    print()    
 
book.save('iterbycols.xlsx')
Copier après la connexion

该示例逐列遍历数据。

$ ./iterating_by_columns.py 
88 89 23 56 24 34 
46 38 59 21 18 15 
57 12 78 98 43 67
Copier après la connexion

统计

对于下一个示例,我们需要创建一个包含数字的 xlsx 文件。 例如,我们使用RANDBETWEEN()函数在 10 列中创建了 25 行数字。

mystats.py

#!/usr/bin/env python
 
import openpyxl
import statistics as stats
 
book = openpyxl.load_workbook('numbers.xlsx', data_only=True)
 
sheet = book.active
 
rows = sheet.rows
 
values = []
 
for row in rows:
    for cell in row:
        values.append(cell.value)
 
print("Number of values: {0}".format(len(values)))
print("Sum of values: {0}".format(sum(values)))
print("Minimum value: {0}".format(min(values)))
print("Maximum value: {0}".format(max(values)))
print("Mean: {0}".format(stats.mean(values)))
print("Median: {0}".format(stats.median(values)))
print("Standard deviation: {0}".format(stats.stdev(values)))
print("Variance: {0}".format(stats.variance(values)))
Copier après la connexion

在示例中,我们从工作表中读取所有值并计算一些基本统计信息。

import statistics as stats
Copier après la connexion

导入statistics模块以提供一些统计功能,例如中值和方差。

book = openpyxl.load_workbook('numbers.xlsx', data_only=True)
Copier après la connexion

使用data_only选项,我们从单元格而不是公式中获取值。

rows = sheet.rows
Copier après la connexion

我们得到所有不为空的单元格行。

for row in rows:
    for cell in row:
        values.append(cell.value)
Copier après la connexion

在两个 for 循环中,我们从单元格中形成一个整数值列表。

print("Number of values: {0}".format(len(values)))
print("Sum of values: {0}".format(sum(values)))
print("Minimum value: {0}".format(min(values)))
print("Maximum value: {0}".format(max(values)))
print("Mean: {0}".format(stats.mean(values)))
print("Median: {0}".format(stats.median(values)))
print("Standard deviation: {0}".format(stats.stdev(values)))
print("Variance: {0}".format(stats.variance(values)))
Copier après la connexion

我们计算并打印有关值的数学统计信息。 一些功能是内置的,其他功能是通过statistics模块导入的。

$ ./mystats.py 
Number of values: 312
Sum of values: 15877
Minimum value: 0
Maximum value: 100
Mean: 50.88782051282051
Median: 54.0
Standard deviation: 28.459203819700967
Variance: 809.9262820512821
Copier après la connexion

Openpyxl 过滤器&排序数据

图纸具有auto_filter属性,该属性允许设置过滤条件和排序条件。

请注意,Openpyxl 设置了条件,但是我们必须在电子表格应用中应用它们。

filter_sort.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
wb = Workbook()
sheet = wb.active
 
data = [
    ['Item', 'Colour'],
    ['pen', 'brown'],
    ['book', 'black'],
    ['plate', 'white'],
    ['chair', 'brown'],
    ['coin', 'gold'],
    ['bed', 'brown'],
    ['notebook', 'white'],
]
 
for r in data:
    sheet.append(r)
 
sheet.auto_filter.ref = 'A1:B8'
sheet.auto_filter.add_filter_column(1, ['brown', 'white'])
sheet.auto_filter.add_sort_condition('B2:B8')
 
wb.save('filtered.xlsx')
Copier après la connexion

在示例中,我们创建一个包含项目及其颜色的工作表。 我们设置一个过滤器和一个排序条件。

Openpyxl 维度

为了获得那些实际包含数据的单元格,我们可以使用维度。

dimensions.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
sheet['A3'] = 39
sheet['B3'] = 19
 
rows = [
    (88, 46),
    (89, 38),
    (23, 59),
    (56, 21),
    (24, 18),
    (34, 15)
]
 
for row in rows:
    sheet.append(row)
 
print(sheet.dimensions)
print("Minimum row: {0}".format(sheet.min_row))
print("Maximum row: {0}".format(sheet.max_row))
print("Minimum column: {0}".format(sheet.min_column))
print("Maximum column: {0}".format(sheet.max_column))
 
for c1, c2 in sheet[sheet.dimensions]:
    print(c1.value, c2.value)
 
book.save('dimensions.xlsx')
Copier après la connexion

该示例计算两列数据的维数。

sheet['A3'] = 39
sheet['B3'] = 19
 
rows = [
    (88, 46),
    (89, 38),
    (23, 59),
    (56, 21),
    (24, 18),
    (34, 15)
]
 
for row in rows:
    sheet.append(row)
Copier après la connexion

我们将数据添加到工作表。 请注意,我们从第三行开始添加。

print(sheet.dimensions)
Copier après la connexion

dimensions属性返回非空单元格区域的左上角和右下角单元格。

print("Minimum row: {0}".format(sheet.min_row))
print("Maximum row: {0}".format(sheet.max_row))
Copier après la connexion

使用min_rowmax_row

Openpyxl Créer un nouveau fichier #🎜🎜##🎜🎜#Dans le premier exemple, nous utilisons openpyxl pour créer un nouveau fichier xlsx. #🎜🎜##🎜🎜#write_xlsx.py#🎜🎜#
print("Minimum column: {0}".format(sheet.min_column))
print("Maximum column: {0}".format(sheet.max_column))
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous créons un nouveau fichier xlsx. Nous écrivons des données dans trois cellules. #🎜🎜#
for c1, c2 in sheet[sheet.dimensions]:
    print(c1.value, c2.value)
Copier après la connexion
Copier après la connexion
#🎜🎜#Depuis le module openpyxl, nous importons la classe Workbook. Le classeur est un conteneur pour toutes les autres parties du document. #🎜🎜#
$ ./dimensions.py 
A3:B9
Minimum row: 3
Maximum row: 9
Minimum column: 1
Maximum column: 2
39 19
88 46
89 38
23 59
56 21
24 18
34 15
Copier après la connexion
Copier après la connexion
#🎜🎜#Nous créons un nouveau classeur. Créez toujours un classeur avec au moins une feuille de calcul. #🎜🎜#
#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook('sheets.xlsx')
 
print(book.get_sheet_names())
 
active_sheet = book.active
print(type(active_sheet))
 
sheet = book.get_sheet_by_name("March")
print(sheet.title)
Copier après la connexion
Copier après la connexion
#🎜🎜# On obtient une référence à la feuille active. #🎜🎜#
print(book.get_sheet_names())
Copier après la connexion
Copier après la connexion
#🎜🎜#Nous écrivons des données numériques dans les cellules A1 et A2. #🎜🎜#
active_sheet = book.active
print(type(active_sheet))
Copier après la connexion
Copier après la connexion
#🎜🎜#Nous écrivons la date du jour dans la cellule A3. #🎜🎜#
sheet = book.get_sheet_by_name("March")
Copier après la connexion
Copier après la connexion
#🎜🎜#Nous utilisons la méthode save() pour écrire le contenu dans le fichier sample.xlsx. #🎜🎜##🎜🎜#Openpyxl Ecrire dans des cellules #🎜🎜##🎜🎜#Il existe deux manières de base d'écrire dans des cellules : en utilisant les touches de la feuille de calcul (telles que A1 ou D3), ou via cell ( )la méthode utilise la notation de ligne et de colonne. #🎜🎜##🎜🎜#write2cell.py#🎜🎜#
print(sheet.title)
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous écrivons deux valeurs dans deux cellules. #🎜🎜#
$ ./sheets.py 
['January', 'February', 'March']
<class &#39;openpyxl.worksheet.worksheet.Worksheet&#39;>
March
Copier après la connexion
Copier après la connexion
#🎜🎜#Ici, nous attribuons la valeur à la cellule A1. #🎜🎜#
#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook(&#39;sheets.xlsx&#39;)
 
book.create_sheet("April")
 
print(book.sheetnames)
 
sheet1 = book.get_sheet_by_name("January")
book.remove_sheet(sheet1)
 
print(book.sheetnames)
 
book.create_sheet("January", 0)
print(book.sheetnames)
 
book.save(&#39;sheets2.xlsx&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans cette ligne, nous écrivons dans la cellule B2 en utilisant la notation de ligne et de colonne. #🎜🎜##🎜🎜#Openpyxl Valeur ajoutée #🎜🎜##🎜🎜#En utilisant la méthode append(), nous pouvons ajouter un ensemble de valeurs au bas de la feuille de calcul actuelle. #🎜🎜##🎜🎜#appending_values.py#🎜🎜#
book.create_sheet("April")
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous ajoutons trois colonnes de données à la feuille de calcul actuelle. #🎜🎜#
print(book.sheetnames)
Copier après la connexion
Copier après la connexion
#🎜🎜#Les données sont stockées dans des tuples de tuples. #🎜🎜#
book.remove_sheet(sheet1)
Copier après la connexion
Copier après la connexion
#🎜🎜# Nous parcourons le conteneur ligne par ligne et insérons des lignes de données en utilisant la méthode append(). #🎜🎜##🎜🎜#OpenPyXL Lecture de cellules #🎜🎜##🎜🎜#Dans l'exemple ci-dessous, nous lisons des données précédemment écrites à partir du fichier sample.xlsx. #🎜🎜##🎜🎜#read_cells.py#🎜🎜#
book.create_sheet("January", 0)
Copier après la connexion
Copier après la connexion
#🎜🎜#Cet exemple charge un fichier xlsx existant et lit trois cellules. #🎜🎜#
$ ./sheets2.py 
[&#39;January&#39;, &#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
[&#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
[&#39;January&#39;, &#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
Copier après la connexion
Copier après la connexion
#🎜🎜#Utilisez la méthode load_workbook() pour ouvrir le fichier. #🎜🎜#
#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook('sheets.xlsx')
 
sheet = book.get_sheet_by_name("March")
sheet.sheet_properties.tabColor = "0072BA"
 
book.save('sheets3.xlsx')
Copier après la connexion
Copier après la connexion
#🎜🎜# On lit le contenu des cellules A1, A2 et A3. Dans la troisième ligne, nous utilisons la méthode cell() pour obtenir la valeur de la cellule A3. #🎜🎜#
sheet.sheet_properties.tabColor = "0072BA"
Copier après la connexion
Copier après la connexion
#🎜🎜#Ceci est le résultat de l'exemple. #🎜🎜##🎜🎜#OpenPyXL Lecture de plusieurs cellules #🎜🎜##🎜🎜# Nous avons le tableau de données suivant : #🎜🎜##🎜🎜# Nous utilisons l'opérateur de plage pour lire les données. #🎜🎜##🎜🎜#read_cells2.py#🎜🎜#
#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.styles import Alignment
 
book = Workbook()
sheet = book.active
 
sheet.merge_cells(&#39;A1:B2&#39;)
 
cell = sheet.cell(row=1, column=1)
cell.value = &#39;Sunny day&#39;
cell.alignment = Alignment(horizontal=&#39;center&#39;, vertical=&#39;center&#39;)
 
book.save(&#39;merging.xlsx&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous lisons les données de deux colonnes à l'aide d'opérations de plage. #🎜🎜#
from openpyxl.styles import Alignment
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans cette ligne, nous lisons les données des cellules A1-B6. #🎜🎜#
sheet.merge_cells(&#39;A1:B2&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜# La fonction format() est utilisée pour afficher proprement les données sur la console. #🎜🎜#
cell = sheet.cell(row=1, column=1)
Copier après la connexion
Copier après la connexion
#🎜🎜#Openpyxl Itérer par lignes #🎜🎜##🎜🎜# La méthode iter_rows() renvoie les cellules de la feuille de calcul sous forme de lignes. #🎜🎜##🎜🎜#iterating_by_rows.py#🎜🎜#
cell.value = &#39;Sunny day&#39;
cell.alignment = Alignment(horizontal=&#39;center&#39;, vertical=&#39;center&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜#Cet exemple parcourt les données ligne par ligne. #🎜🎜#
#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.styles import Alignment
 
book = Workbook()
sheet = book.active
 
sheet.freeze_panes = &#39;B2&#39;
 
book.save(&#39;freezing.xlsx&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜# Nous fournissons des limites pour l'itération. #🎜🎜#
sheet.freeze_panes = &#39;B2&#39;
Copier après la connexion
Copier après la connexion
#🎜🎜#Openpyxl Itérer par colonnes #🎜🎜##🎜🎜# La méthode iter_cols() renvoie les cellules de la feuille de calcul sous forme de colonnes. #🎜🎜##🎜🎜#iterating_by_columns.py#🎜🎜#
#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
rows = (
    (34, 26),
    (88, 36),
    (24, 29),
    (15, 22),
    (56, 13),
    (76, 18)
)
 
for row in rows:
    sheet.append(row)
 
cell = sheet.cell(row=7, column=2)
cell.value = "=SUM(A1:B6)"
cell.font = cell.font.copy(bold=True)
 
book.save(&#39;formulas.xlsx&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜#Cet exemple parcourt les données colonne par colonne. #🎜🎜#
rows = (
    (34, 26),
    (88, 36),
    (24, 29),
    (15, 22),
    (56, 13),
    (76, 18)
)
 
for row in rows:
    sheet.append(row)
Copier après la connexion
Copier après la connexion
#🎜🎜#statistics#🎜🎜##🎜🎜#Pour l'exemple suivant, nous devons créer un fichier xlsx contenant des nombres. Par exemple, nous avons utilisé la fonction RANDBETWEEN() pour créer 25 lignes de nombres dans 10 colonnes. #🎜🎜##🎜🎜#mystats.py#🎜🎜#
cell = sheet.cell(row=7, column=2)
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous lisons toutes les valeurs de la feuille de calcul et calculons quelques statistiques de base. #🎜🎜#
cell.value = "=SUM(A1:B6)"
Copier après la connexion
Copier après la connexion
#🎜🎜#Importez le module statistiques pour fournir certaines fonctions statistiques telles que la médiane et la variance. #🎜🎜#
cell.font = cell.font.copy(bold=True)
Copier après la connexion
Copier après la connexion
#🎜🎜#En utilisant l'option data_only, nous obtenons la valeur de la cellule au lieu de la formule. #🎜🎜#
#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.drawing.image import Image
 
book = Workbook()
sheet = book.active
 
img = Image("icesid.png")
sheet[&#39;A1&#39;] = &#39;This is Sid&#39;
 
sheet.add_image(img, &#39;B2&#39;)
 
book.save("sheet_image.xlsx")
Copier après la connexion
Copier après la connexion
#🎜🎜# Nous obtenons toutes les lignes de cellules qui ne sont pas vides. #🎜🎜#
from openpyxl.drawing.image import Image
Copier après la connexion
Copier après la connexion
#🎜🎜#En deux boucles for, on forme une liste de valeurs entières à partir des cellules. #🎜🎜#
img = Image("icesid.png")
Copier après la connexion
Copier après la connexion
#🎜🎜# Nous calculons et imprimons des statistiques mathématiques sur les valeurs. Certaines fonctionnalités sont intégrées, d'autres sont importées via le module statistiques. #🎜🎜#
sheet.add_image(img, &#39;B2&#39;)
Copier après la connexion
Copier après la connexion
#🎜🎜#Openpyxl Filtrer et trier les données #🎜🎜##🎜🎜# Les dessins ont l'attribut auto_filter, qui permet de définir des conditions de filtrage et de tri. #🎜🎜##🎜🎜#Veuillez noter qu'Openpyxl définit les conditions, mais nous devons les appliquer dans l'application tableur. #🎜🎜##🎜🎜#filter_sort.py#🎜🎜#
#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.chart import (
    Reference,
    Series,
    BarChart
)
 
book = Workbook()
sheet = book.active
 
rows = [
    ("USA", 46),
    ("China", 38),
    ("UK", 29),
    ("Russia", 22),
    ("South Korea", 13),
    ("Germany", 11)
]
 
for row in rows:
    sheet.append(row)
 
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
 
chart = BarChart()
chart.add_data(data=data)
chart.set_categories(categs)
 
chart.legend = None
chart.y_axis.majorGridlines = None
chart.varyColors = True
chart.title = "Olympic Gold medals in London"
 
sheet.add_chart(chart, "A8")    
 
book.save("bar_chart.xlsx")
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans l'exemple, nous créons une feuille de calcul qui contient des éléments et leurs couleurs. Nous définissons un filtre et une condition de tri. #🎜🎜##🎜🎜#Openpyxl Dimensions #🎜🎜##🎜🎜#Pour obtenir les cellules qui contiennent réellement des données, nous pouvons utiliser des dimensions. #🎜🎜##🎜🎜#dimensions.py#🎜🎜#
from openpyxl.chart import (
    Reference,
    Series,
    BarChart
)
Copier après la connexion
Copier après la connexion
#🎜🎜#Cet exemple calcule les dimensions de deux colonnes de données. #🎜🎜#
book = Workbook()
sheet = book.active
Copier après la connexion
Copier après la connexion
#🎜🎜# Nous ajoutons des données à la feuille de calcul. Notez que nous commençons à ajouter sur la troisième ligne. #🎜🎜#
rows = [
    ("USA", 46),
    ("China", 38),
    ("UK", 29),
    ("Russia", 22),
    ("South Korea", 13),
    ("Germany", 11)
]
 
for row in rows:
    sheet.append(row)
Copier après la connexion
Copier après la connexion
#🎜🎜#La propriété dimensions renvoie les cellules des coins supérieur gauche et inférieur droit d'une plage de cellules non vide. #🎜🎜#
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
Copier après la connexion
Copier après la connexion
#🎜🎜#En utilisant les propriétés min_row et max_row, nous pouvons obtenir la ligne minimale et maximale contenant des données. #🎜🎜#
print("Minimum column: {0}".format(sheet.min_column))
print("Maximum column: {0}".format(sheet.max_column))
Copier après la connexion
Copier après la connexion

通过min_columnmax_column属性,我们获得了包含数据的最小和最大列。

for c1, c2 in sheet[sheet.dimensions]:
    print(c1.value, c2.value)
Copier après la connexion
Copier après la connexion

我们遍历数据并将其打印到控制台。

$ ./dimensions.py 
A3:B9
Minimum row: 3
Maximum row: 9
Minimum column: 1
Maximum column: 2
39 19
88 46
89 38
23 59
56 21
24 18
34 15
Copier après la connexion
Copier après la connexion

工作表

每个工作簿可以有多个工作表。

Figure: Sheets

让我们有一张包含这三张纸的工作簿。

sheets.py

#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook(&#39;sheets.xlsx&#39;)
 
print(book.get_sheet_names())
 
active_sheet = book.active
print(type(active_sheet))
 
sheet = book.get_sheet_by_name("March")
print(sheet.title)
Copier après la connexion
Copier après la connexion

该程序可用于 Excel 工作表。

print(book.get_sheet_names())
Copier après la connexion
Copier après la connexion

get_sheet_names()方法返回工作簿中可用工作表的名称。

active_sheet = book.active
print(type(active_sheet))
Copier après la connexion
Copier après la connexion

我们获取活动表并将其类型打印到终端。

sheet = book.get_sheet_by_name("March")
Copier après la connexion
Copier après la connexion

我们使用get_sheet_by_name()方法获得对工作表的引用。

print(sheet.title)
Copier après la connexion
Copier après la connexion

检索到的工作表的标题将打印到终端。

$ ./sheets.py 
[&#39;January&#39;, &#39;February&#39;, &#39;March&#39;]
<class &#39;openpyxl.worksheet.worksheet.Worksheet&#39;>
March
Copier après la connexion
Copier après la connexion

这是程序的输出。

sheets2.py

#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook(&#39;sheets.xlsx&#39;)
 
book.create_sheet("April")
 
print(book.sheetnames)
 
sheet1 = book.get_sheet_by_name("January")
book.remove_sheet(sheet1)
 
print(book.sheetnames)
 
book.create_sheet("January", 0)
print(book.sheetnames)
 
book.save(&#39;sheets2.xlsx&#39;)
Copier après la connexion
Copier après la connexion

在此示例中,我们创建一个新工作表。

book.create_sheet("April")
Copier après la connexion
Copier après la connexion

使用create_sheet()方法创建一个新图纸。

print(book.sheetnames)
Copier après la connexion
Copier après la connexion

图纸名称也可以使用sheetnames属性显示。

book.remove_sheet(sheet1)
Copier après la connexion
Copier après la connexion

可以使用remove_sheet()方法将纸张取出。

book.create_sheet("January", 0)
Copier après la connexion
Copier après la connexion

可以在指定位置创建一个新图纸。 在我们的例子中,我们在索引为 0 的位置创建一个新工作表。

$ ./sheets2.py 
[&#39;January&#39;, &#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
[&#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
[&#39;January&#39;, &#39;February&#39;, &#39;March&#39;, &#39;April&#39;]
Copier après la connexion
Copier après la connexion

可以更改工作表的背景颜色。

sheets3.py

#!/usr/bin/env python
 
import openpyxl
 
book = openpyxl.load_workbook('sheets.xlsx')
 
sheet = book.get_sheet_by_name("March")
sheet.sheet_properties.tabColor = "0072BA"
 
book.save('sheets3.xlsx')
Copier après la connexion
Copier après la connexion

该示例修改了标题为“ March”的工作表的背景颜色。

sheet.sheet_properties.tabColor = "0072BA"
Copier après la connexion
Copier après la connexion

我们将tabColor属性更改为新颜色。

第三工作表的背景色已更改为某种蓝色。

合并单元格

单元格可以使用merge_cells()方法合并,而可以不使用unmerge_cells()方法合并。 当我们合并单元格时,除了左上角的所有单元格都将从工作表中删除。

merging_cells.py

#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.styles import Alignment
 
book = Workbook()
sheet = book.active
 
sheet.merge_cells(&#39;A1:B2&#39;)
 
cell = sheet.cell(row=1, column=1)
cell.value = &#39;Sunny day&#39;
cell.alignment = Alignment(horizontal=&#39;center&#39;, vertical=&#39;center&#39;)
 
book.save(&#39;merging.xlsx&#39;)
Copier après la connexion
Copier après la connexion

在该示例中,我们合并了四个单元格:A1,B1,A2 和 B2。 最后一个单元格中的文本居中。

from openpyxl.styles import Alignment
Copier après la connexion
Copier après la connexion

为了使文本在最后一个单元格中居中,我们使用了openpyxl.styles模块中的Alignment类。

sheet.merge_cells(&#39;A1:B2&#39;)
Copier après la connexion
Copier après la connexion

我们用merge_cells()方法合并四个单元格。

cell = sheet.cell(row=1, column=1)
Copier après la connexion
Copier après la connexion

我们得到了最后一个单元格。

cell.value = &#39;Sunny day&#39;
cell.alignment = Alignment(horizontal=&#39;center&#39;, vertical=&#39;center&#39;)
Copier après la connexion
Copier après la connexion

我们将文本设置为合并的单元格并更新其对齐方式。

Openpyxl 冻结窗格

冻结窗格时,在滚动到工作表的另一个区域时,我们会保持工作表的某个区域可见。

freezing.py

#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.styles import Alignment
 
book = Workbook()
sheet = book.active
 
sheet.freeze_panes = &#39;B2&#39;
 
book.save(&#39;freezing.xlsx&#39;)
Copier après la connexion
Copier après la connexion

该示例通过单元格 B2 冻结窗格。

sheet.freeze_panes = &#39;B2&#39;
Copier après la connexion
Copier après la connexion

要冻结窗格,我们使用freeze_panes属性。

Openpyxl 公式

下一个示例显示如何使用公式。 openpyxl不进行计算; 它将公式写入单元格。

formulas.py

#!/usr/bin/env python
 
from openpyxl import Workbook
 
book = Workbook()
sheet = book.active
 
rows = (
    (34, 26),
    (88, 36),
    (24, 29),
    (15, 22),
    (56, 13),
    (76, 18)
)
 
for row in rows:
    sheet.append(row)
 
cell = sheet.cell(row=7, column=2)
cell.value = "=SUM(A1:B6)"
cell.font = cell.font.copy(bold=True)
 
book.save(&#39;formulas.xlsx&#39;)
Copier après la connexion
Copier après la connexion

在示例中,我们使用SUM()函数计算所有值的总和,并以粗体显示输出样式。

rows = (
    (34, 26),
    (88, 36),
    (24, 29),
    (15, 22),
    (56, 13),
    (76, 18)
)
 
for row in rows:
    sheet.append(row)
Copier après la connexion
Copier après la connexion

我们创建两列数据。

cell = sheet.cell(row=7, column=2)
Copier après la connexion
Copier après la connexion

我们得到显示计算结果的单元格。

cell.value = "=SUM(A1:B6)"
Copier après la connexion
Copier après la connexion

我们将一个公式写入单元格。

cell.font = cell.font.copy(bold=True)
Copier après la connexion
Copier après la connexion

我们更改字体样式。

OpenPyXL 图像

在下面的示例中,我们显示了如何将图像插入到工作表中。

write_image.py

#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.drawing.image import Image
 
book = Workbook()
sheet = book.active
 
img = Image("icesid.png")
sheet[&#39;A1&#39;] = &#39;This is Sid&#39;
 
sheet.add_image(img, &#39;B2&#39;)
 
book.save("sheet_image.xlsx")
Copier après la connexion
Copier après la connexion

在示例中,我们将图像写到一张纸上。

from openpyxl.drawing.image import Image
Copier après la connexion
Copier après la connexion

我们使用openpyxl.drawing.image模块中的Image类。

img = Image("icesid.png")
Copier après la connexion
Copier après la connexion

创建一个新的Image类。 icesid.png图像位于当前工作目录中。

sheet.add_image(img, &#39;B2&#39;)
Copier après la connexion
Copier après la connexion

我们使用add_image()方法添加新图像。

Openpyxl 图表

openpyxl库支持创建各种图表,包括条形图,折线图,面积图,气泡图,散点图和饼图。

根据文档,openpyxl仅支持在工作表中创建图表。 现有工作簿中的图表将丢失。

create_bar_chart.py

#!/usr/bin/env python
 
from openpyxl import Workbook
from openpyxl.chart import (
    Reference,
    Series,
    BarChart
)
 
book = Workbook()
sheet = book.active
 
rows = [
    ("USA", 46),
    ("China", 38),
    ("UK", 29),
    ("Russia", 22),
    ("South Korea", 13),
    ("Germany", 11)
]
 
for row in rows:
    sheet.append(row)
 
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
 
chart = BarChart()
chart.add_data(data=data)
chart.set_categories(categs)
 
chart.legend = None
chart.y_axis.majorGridlines = None
chart.varyColors = True
chart.title = "Olympic Gold medals in London"
 
sheet.add_chart(chart, "A8")    
 
book.save("bar_chart.xlsx")
Copier après la connexion
Copier après la connexion

在此示例中,我们创建了一个条形图,以显示 2012 年伦敦每个国家/地区的奥运金牌数量。

from openpyxl.chart import (
    Reference,
    Series,
    BarChart
)
Copier après la connexion
Copier après la connexion

openpyxl.chart模块具有使用图表的工具。

book = Workbook()
sheet = book.active
Copier après la connexion
Copier après la connexion

创建一个新的工作簿。

rows = [
    ("USA", 46),
    ("China", 38),
    ("UK", 29),
    ("Russia", 22),
    ("South Korea", 13),
    ("Germany", 11)
]
 
for row in rows:
    sheet.append(row)
Copier après la connexion
Copier après la connexion

我们创建一些数据并将其添加到活动工作表的单元格中。

data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
Copier après la connexion
Copier après la connexion

对于Reference类,我们引用表中代表数据的行。 在我们的案例中,这些是奥运金牌的数量。

categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
Copier après la connexion

我们创建一个类别轴。 类别轴是将数据视为一系列非数字文本标签的轴。 在我们的案例中,我们有代表国家名称的文本标签。

chart = BarChart()
chart.add_data(data=data)
chart.set_categories(categs)
Copier après la connexion

我们创建一个条形图并为其设置数据和类别。

chart.legend = None
chart.y_axis.majorGridlines = None
Copier après la connexion

使用legendmajorGridlines属性,可以关闭图例和主要网格线。

chart.varyColors = True
Copier après la connexion

varyColors设置为True,每个条形都有不同的颜色。

chart.title = "Olympic Gold medals in London"
Copier après la connexion

为图表设置标题。

sheet.add_chart(chart, "A8")
Copier après la connexion

使用add_chart()方法将创建的图表添加到工作表中。

Dans ce tutoriel, nous avons utilisé la bibliothèque openpyxl. Nous avons lu les données du fichier Excel et écrit les données dans le fichier Excel.

Comment utiliser Python pour faire fonctionner lartefact Excel openpyxl

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal