Dies ist eine Bibliothek eines Drittanbieters, die Excel-Dateien im xlsx
-Format verarbeiten kann. pip install openpyxl
Installieren. Wenn Sie Aanconda verwenden, sollte es im Lieferumfang enthalten sein.
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.
# 获得所有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
# 获取某个单元格的值,观察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.column
Zurü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
.
# 获得最大列和最大行print(sheet.max_row)print(sheet.max_column)
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)
verwenden. Mit der folgenden Schreibmethode werden alle Zellen im rechteckigen Bereich mit A1 als oberer linker Ecke und B3 als unterer rechter Ecke abgerufen. range
Beachten 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>
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['A1':'B3']:for cell in row_cell:print(cell) for cell in sheet['A1':'B3']:print(cell)# out(<Cell mainbuilding33.A1>, <Cell mainbuilding33.B1>) (<Cell mainbuilding33.A2>, <Cell mainbuilding33.B2>) (<Cell mainbuilding33.A3>, <Cell mainbuilding33.B3>)
openpyxl.utils
from openpyxl.utils import get_column_letter, column_index_from_string# 根据列的数字返回字母print(get_column_letter(2)) # B# 根据字母返回列的数字print(column_index_from_string('D')) # 4
WorkBook
from openpyxl import Workbook wb = Workbook()
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 = 'Sheet1'# 新建一个工作表,可以指定索引,适当安排其在工作簿中的位置wb.create_sheet('Data', index=1) # 被安排到第二个工作表,index=0就是第一个位置# 删除某个工作表wb.remove(sheet)del wb[sheet]
# 直接给单元格赋值就行sheet['A1'] = 'good'# B9处写入平均值sheet['B9'] = '=AVERAGE(B2:B8)'
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
# 添加一行row = [1 ,2, 3, 4, 5] sheet.append(row)# 添加多行rows = [ ['Number', 'data1', 'data2'], [2, 40, 30], [3, 40, 25], [4, 50, 30], [5, 30, 10], [6, 25, 5], [7, 50, 10], ]
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()
list(zip(*rows))# out[('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50), ('data2', 30, 25, 30, 10, 5, 10)]
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.
rows = [ ['Number', 'data1', 'data2'], [2, 40], [3, 40, 25], [4, 50, 30], [5, 30, 10], [6, 25, 5], [7, 50, 10], ]# out[('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50)]
list
Speichern Sie die Dateizip
xlsx
wb.save(r'D:\example.xlsx')
Sie können Schriftart, Farbe usw. angeben Ausrichtung. from openpyxl.styles import Font, colors, Alignment
上面的代码指定了等线24号加粗斜体,字体颜色红色。直接使用cell的font
属性,将Font对象赋值给它。
也是直接使用cell的属性aligment
,这里指定垂直居中和水平居中。除了center,还可以使用right、left
等等参数。
# 设置B1中的数据垂直居中和水平居中sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')
有时候数据太长显示不完,就需要拉长拉高单元格。
# 第2行行高sheet.row_dimensions[2].height = 40# C列列宽sheet.column_dimensions['C'].width = 30
所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。
# 合并单元格, 往左上角写入数据即可sheet.merge_cells('B1:G1') # 合并一行中的几个单元格sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格
合并后只可以往左上角写入数据,也就是区间中:
左边的坐标。
如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
以下是拆分单元格的代码。拆分后,值回到A1位置。
sheet.unmerge_cells('A1:C3')
这里就拿常用的说,具体的去看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!