Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Tutorial zum Lesen und Schreiben von Excel mit openpyxl

Python-Tutorial zum Lesen und Schreiben von Excel mit openpyxl

零下一度
零下一度Original
2017-06-30 14:25:187807Durchsuche

Python verwendet openpyxl zum Lesen und Schreiben von Excel-Dateien

Dies ist eine Bibliothek eines Drittanbieters, die Excel-Dateien im xlsx-Format verarbeiten kann. pip install openpyxlInstallieren. Wenn Sie Aanconda verwenden, sollte es im Lieferumfang enthalten sein.

Das Lesen von Excel-Dateien

erfordert den Import verwandter Funktionen.

from openpyxl import load_workbook# 默认可读写,若有需要可以指定write_only和read_only为Truewb = load_workbook('mainbuilding33.xlsx')

Die standardmäßig geöffnete Datei ist lesbar und beschreibbar. Bei Bedarf können Sie den Parameter read_only bis True angeben.

Blatt holen--Blatt

# 获得所有sheet的名称print(wb.get_sheet_names())# 根据sheet名字获得sheeta_sheet = wb.get_sheet_by_name('Sheet1')# 获得sheet名print(a_sheet.title)# 获得当前正在显示的sheet, 也可以用wb.get_active_sheet()sheet = wb.active

Zelle holen

# 获取某个单元格的值,观察excel发现也是先字母再数字的顺序,即先列再行b4 = sheet['B4']# 分别返回print(f'({b4.column}, {b4.row}) is {b4.value}')  # 返回的数字就是int型# 除了用下标的方式获得,还可以用cell函数, 换成数字,这个表示B2b4_too = sheet.cell(row=4, column=2)print(b4_too.value)

b4.columnZurückB , b4.row gibt 4 zurück und value ist der Wert dieser Zelle. Darüber hinaus verfügt Zelle auch über ein Attribut coordinate. Zellen wie b4 geben Koordinaten zurück B4.

Maximale Zeile und Spalte abrufen

# 获得最大列和最大行print(sheet.max_row)print(sheet.max_column)

Zeile und Spalte abrufen

  • sheet.rows ist ein Generator Im Inneren befinden sich die Daten jeder Zeile, und jede Zeile ist von einem Tupel umgeben.

  • sheet.columns ist ähnlich, aber jedes Tupel ist eine Zelle in jeder Spalte.

# 因为按行,所以返回A1, B1, C1这样的顺序for row in sheet.rows:for cell in row:print(cell.value)# A1, A2, A3这样的顺序for column in sheet.columns:for cell in column:print(cell.value)

Der obige Code kann die Daten aller Zellen abrufen. Was ist, wenn Sie die Daten einer bestimmten Zeile abrufen möchten? Geben Sie ihm einfach einen Index. Da sheet.rows ein Generatortyp ist und keinen Index verwenden kann, wird mit dem Index das Tupelobjekt der zweiten Zeile abgerufen. list(sheet.rows)[2]

for cell in list(sheet.rows)[2]:print(cell.value)
Wie erhält man Zellen in jedem Bereich?

Sie können die Funktion

verwenden. Mit der folgenden Schreibmethode werden alle Zellen im rechteckigen Bereich mit A1 als oberer linker Ecke und B3 als unterer rechter Ecke abgerufen. rangeBeachten Sie, dass bei 1 beginnt, da es in openpyxl nicht mit der Konvention von Programmiersprachen übereinstimmt, 0 zur Darstellung des ersten Werts zu verwenden, um mit dem Ausdruck in Excel konsistent zu sein. range

for i in range(1, 4):for j in range(1, 3):print(sheet.cell(row=i, column=j))        
# out<Cell mainbuilding33.A1><Cell mainbuilding33.B1><Cell mainbuilding33.A2><Cell mainbuilding33.B2><Cell mainbuilding33.A3><Cell mainbuilding33.B3>
können auch wie Scheiben verwendet werden.

Gibt ein Tupel zurück, das auch ein Tupel im Inneren ist und aus Zellen in jeder Zeile besteht. sheet['A1':'B3']

for row_cell in sheet[&#39;A1&#39;:&#39;B3&#39;]:for cell in row_cell:print(cell)        

for cell in sheet[&#39;A1&#39;:&#39;B3&#39;]:print(cell)# out(<Cell mainbuilding33.A1>, <Cell mainbuilding33.B1>)
(<Cell mainbuilding33.A2>, <Cell mainbuilding33.B2>)
(<Cell mainbuilding33.A3>, <Cell mainbuilding33.B3>)
Rufen Sie die Spaltennummer basierend auf dem Buchstaben ab und geben Sie den Buchstaben basierend auf der Spaltennummer zurück.

muss importiert werden. Diese beiden Funktionen sind in

openpyxl.utils

from openpyxl.utils import get_column_letter, column_index_from_string# 根据列的数字返回字母print(get_column_letter(2))  # B# 根据字母返回列的数字print(column_index_from_string(&#39;D&#39;))  # 4
Daten in Excel schreiben

Arbeitsblattbezogen

Import erforderlich

WorkBook

from openpyxl import Workbook

wb = Workbook()
so Ein neues Arbeitsblatt wird erstellt (aber es wurde noch nicht gespeichert).

Um den

Nur-Schreibmodus

festzulegen, können Sie den Parameter angeben. Im Allgemeinen ist der standardmäßige beschreibbare und lesbare Modus ausreichend. write_only=True

print(wb.get_sheet_names())  # 提供一个默认名叫Sheet的表,office2016下新建提供默认Sheet1# 直接赋值就可以改工作表的名称sheet.title = &#39;Sheet1&#39;# 新建一个工作表,可以指定索引,适当安排其在工作簿中的位置wb.create_sheet(&#39;Data&#39;, index=1)  # 被安排到第二个工作表,index=0就是第一个位置# 删除某个工作表wb.remove(sheet)del wb[sheet]
In Zellen schreiben

Sie können auch Formeln verwenden

# 直接给单元格赋值就行sheet[&#39;A1&#39;] = &#39;good&#39;# B9处写入平均值sheet[&#39;B9&#39;] = &#39;=AVERAGE(B2:B8)&#39;
Aber wenn Wann Beim Lesen müssen Sie

hinzufügen, damit die nach dem Lesen von B9 zurückgegebene Zahl eine Zahl ist. Wenn Sie diesen Parameter nicht hinzufügen, wird die Formel selbst als „=AVERAGE(B2:B8)“ zurückgegeben.data_only=True Die Anhängefunktion

kann mehrere Datenzeilen gleichzeitig hinzufügen, beginnend mit der ersten Leerzeile (die folgenden sind alles Leerzeilen).

# 添加一行row = [1 ,2, 3, 4, 5]
sheet.append(row)# 添加多行rows = [
    [&#39;Number&#39;, &#39;data1&#39;, &#39;data2&#39;],
    [2, 40, 30],
    [3, 40, 25],
    [4, 50, 30],
    [5, 30, 10],
    [6, 25, 5],
    [7, 50, 10],
]
Da die
-Funktion nur

Zeile für Zeile schreiben kann. Was wäre, wenn wir Spalte für Spalte schreiben möchten? Kann append die Anforderungen erfüllen? Wenn Sie sich die verschachtelte Liste oben als Matrix vorstellen. Transponieren Sie einfach die Matrix. Dies kann mit der Funktion append erreicht werden, aber die interne Liste wird zu einem Tupel. Sie sind alle iterierbare Objekte und haben keine Wirkung. zip()

Erklären Sie das Obige
list(zip(*rows))# out[(&#39;Number&#39;, 2, 3, 4, 5, 6, 7),
 (&#39;data1&#39;, 40, 40, 50, 30, 25, 50),
 (&#39;data2&#39;, 30, 25, 30, 10, 5, 10)]
Erst
brechen Sie die Liste auf, was dem Ausfüllen mehrerer Parameter entspricht

Extrahieren Sie die Nummer 1 aus einer Liste 1 Der Wert wird zu einem Tupel zusammengefasst, und dann wird der zweite Wert aus jeder Liste extrahiert, um ein Tupel zu bilden, bis der letzte Wert der list(zip(*rows)) kürzesten Liste *rows extrahiert wird und die nachfolgenden Werte der längeren Liste wird verworfen. Mit anderen Worten, die endgültige Anzahl der Tupel in zip wird durch die kürzeste Länge jedes ursprünglichen Parameters (iterierbares Objekt) bestimmt. Wenn Sie beispielsweise einen Wert nach Belieben löschen, beträgt die kürzeste Listenlänge 2 und alle Werte in der Spalte data2 (vertikal betrachtet) werden verworfen.

Schließlich gibt zip ein Zip-Objekt zurück und die Daten sind nicht sichtbar. Verwenden Sie einfach
rows = [
    [&#39;Number&#39;, &#39;data1&#39;, &#39;data2&#39;],
    [2, 40],
    [3, 40, 25],
    [4, 50, 30],
    [5, 30, 10],
    [6, 25, 5],
    [7, 50, 10],
]# out[(&#39;Number&#39;, 2, 3, 4, 5, 6, 7), (&#39;data1&#39;, 40, 40, 50, 30, 25, 50)]
, um es zu konvertieren. Verwenden Sie
, um Daten einfach in Spalten zu schreiben.

listSpeichern Sie die Dateizip

Nachdem alle Vorgänge abgeschlossen sind, müssen Sie die Datei unbedingt speichern. Geben Sie den Pfad und den Dateinamen mit dem Suffix

an.

xlsx

Zellenstil festlegen – Stil
wb.save(r&#39;D:\example.xlsx&#39;)
Importieren Sie zunächst die erforderlichen Klassen

Sie können Schriftart, Farbe usw. angeben Ausrichtung. from openpyxl.styles import Font, colors, Alignment

Schriftart

上面的代码指定了等线24号加粗斜体,字体颜色红色。直接使用cell的font属性,将Font对象赋值给它。

对齐方式

也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数。

# 设置B1中的数据垂直居中和水平居中sheet[&#39;B1&#39;].alignment = Alignment(horizontal=&#39;center&#39;, vertical=&#39;center&#39;)

设置行高和列宽

有时候数据太长显示不完,就需要拉长拉高单元格。

# 第2行行高sheet.row_dimensions[2].height = 40# C列列宽sheet.column_dimensions[&#39;C&#39;].width = 30

合并和拆分单元格

所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。

相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。

# 合并单元格, 往左上角写入数据即可sheet.merge_cells(&#39;B1:G1&#39;) # 合并一行中的几个单元格sheet.merge_cells(&#39;A1:C3&#39;) # 合并一个矩形区域中的单元格

合并后只可以往左上角写入数据,也就是区间中:左边的坐标。

如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。

以下是拆分单元格的代码。拆分后,值回到A1位置。

sheet.unmerge_cells(&#39;A1:C3&#39;)

这里就拿常用的说,具体的去看openpyxl文档

Das obige ist der detaillierte Inhalt vonPython-Tutorial zum Lesen und Schreiben von Excel mit openpyxl. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn