Home >Backend Development >Python Tutorial >Python office automation, master openpyxl operation in five minutes!
Today I will share with you an article about using openpyxl to operate Excel.
Need to import various data into Excel? Want to merge multiple Excels? Currently, there are many libraries for Python to process Excel files, and openpyxl is one of them with better functions and performance. Next, I will introduce various Excel operations to you.
Create a new Excel file
>>> from openpyxl import Workbook >>> wb = Workbook()
Open an existing Excel file
>>> from openpyxl import load_workbook >>> wb2 = load_workbook('test.xlsx')
When opening a large file , use read-only or write-only mode according to needs to reduce memory consumption.
wb = load_workbook(filename='large_file.xlsx', read_only=True) wb = Workbook(write_only=True)
Get the current active worksheet:
>>> ws = wb.active
Create a new worksheet:
>>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default) # or >>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position # or >>> ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position
Get the worksheet using the worksheet name:
>>> ws3 = wb["New Title"]
Get all the worksheet names:
>>> print(wb.sheetnames) ['Sheet2', 'New Title', 'Sheet1'] 使用for循环遍历所有的工作表: >>> for sheet in wb: ... print(sheet.title)
Save to the stream in the network Use:
>>> from tempfile import NamedTemporaryFile >>> from openpyxl import Workbook >>> wb = Workbook() >>> with NamedTemporaryFile() as tmp: wb.save(tmp.name) tmp.seek(0) stream = tmp.read() 保存到文件: >>> wb = Workbook() >>> wb.save('balances.xlsx') 保存为模板: >>> wb = load_workbook('document.xlsx') >>> wb.template = True >>> wb.save('document_template.xltx')
The cell position is used as the key of the worksheet to read directly:
>>> c = ws['A4']
Assign value to the cell:
>>> ws['A4'] = 4 >>> c.value = 'hello, world'
Multiple cells can use slicing to access the cell range:
>>> cell_range = ws['A1':'C2']
Use numerical format:
>>> # set date using a Python datetime >>> ws['A1'] = datetime.datetime(2010, 7, 21) >>> >>> ws['A1'].number_format 'yyyy-mm-dd h:mm:ss'
Use formula:
>>> # add a simple formula >>> ws["A1"] = "=SUM(1, 1)"
When merging cells , except the upper left corner cell, all cells will be deleted from the worksheet:
>>> ws.merge_cells('A2:D2') >>> ws.unmerge_cells('A2:D2') >>> >>> # or equivalently >>> ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4) >>> ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
You can specify rows, columns, or ranges of rows and columns individually :
>>> colC = ws['C'] >>> col_range = ws['C:D'] >>> row10 = ws[10] >>> row_range = ws[5:10]
You can use the Worksheet.iter_rows() method to iterate over the rows:
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): ...for cell in row: ...print(cell) <Cell Sheet1.A1> <Cell Sheet1.B1> <Cell Sheet1.C1> <Cell Sheet1.A2> <Cell Sheet1.B2> <Cell Sheet1.C2>
The same Worksheet.iter_cols() method will iterate over the columns:
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): ... for cell in col: ... print(cell) <Cell Sheet1.A1> <Cell Sheet1.A2> <Cell Sheet1.B1> <Cell Sheet1.B2> <Cell Sheet1.C1> <Cell Sheet1.C2>
Iterate over all rows of the file or columns, you can use the Worksheet.rows property:
>>> ws = wb.active >>> ws['C9'] = 'hello world' >>> tuple(ws.rows) ((, | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | ), ( | , | , | )) |
or the Worksheet.columns property:
>>> tuple(ws.columns) ((<Cell Sheet.A1>, <Cell Sheet.A2>, <Cell Sheet.A3>, <Cell Sheet.A4>, <Cell Sheet.A5>, <Cell Sheet.A6>, ... <Cell Sheet.B7>, <Cell Sheet.B8>, <Cell Sheet.B9>), (<Cell Sheet.C1>, <Cell Sheet.C2>, <Cell Sheet.C3>, <Cell Sheet.C4>, <Cell Sheet.C5>, <Cell Sheet.C6>, <Cell Sheet.C7>, <Cell Sheet.C8>, <Cell Sheet.C9>))
Use Worksheet.append() or iteratively use Worksheet.cell() to add a row of data:
>>> for row in range(1, 40): ... ws1.append(range(600)) >>> for row in range(10, 20): ... for col in range(27, 54): ... _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
The insertion operation is more troublesome. You can use Worksheet.insert_rows() to insert one or several rows:
>>> from openpyxl.utils import get_column_letter >>> ws.insert_rows(7) >>> row7 = ws[7] >>> for col in range(27, 54): ... _ = ws3.cell(column=col, row=7, value="{0}".format(get_column_letter(col))) Worksheet.insert_cols()操作类似。Worksheet.delete_rows()和Worksheet.delete_cols()用来批量删除行和列。
Use the Worksheet.values property to traverse all rows in the worksheet, but only Return the cell value:
for row in ws.values: for value in row: print(value)
Worksheet.iter_rows() and Worksheet.iter_cols() can set the values_only parameter to return only the cell value:
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True): ... print(row) (None, None, None) (None, None, None)
The above is the detailed content of Python office automation, master openpyxl operation in five minutes!. For more information, please follow other related articles on the PHP Chinese website!