Python內部未提供處理Excel文件的功能,想要在Python中操作Excel需要按照第三方的模塊。
pip install openpyxl
1.讀Excel
1.1.讀sheet
from openpyxl import load_workbook wb = load_workbook("files/p1.xlsx") # sheet相關操作 # 1.獲取excel文件中的所有sheet名稱 print(wb.sheetnames) # ['數據導出', '用戶列表', 'Sheet1', 'Sheet2'] # 2.選擇sheet,基於sheet名稱 sheet = wb["數據導出"] cell = sheet.cell(1, 2) print(cell.value) # 3.選擇sheet,基於索引位置 sheet = wb.worksheets[0] cell = sheet.cell(1,2) print(cell.value) # 4.循環所有的sheet for name in wb.sheetnames: sheet = wb[name] cell = sheet.cell(1, 1) print(cell.value) for sheet in wb.worksheets: cell = sheet.cell(1, 1) print(cell.value) for sheet in wb: cell = sheet.cell(1, 1) print(cell.value)
1.2讀sheet中單元格的數據
from openpyxl import load_workbook wb = load_workbook("files/p1.xlsx") sheet = wb.worksheets[0] # 1.獲取第N行第N列的單元格(位置是從1開始) cell = sheet.cell(1, 1) print(cell.value) print(cell.style) print(cell.font) print(cell.alignment) # 2.獲取某個單元格 c1 = sheet["A2"] print(c1.value) c2 = sheet['D4'] print(c2.value) # 3.第N行所有的單元格 for cell in sheet[1]: print(cell.value) # 4.所有行的數據(獲取某一列數據) for row in sheet.rows: print(row[0].value, row[1].value) # 5.獲取所有列的數據 for col in sheet.columns: print(col[1].value)
1.3讀合並的單元格
from openpyxl import load_workbook wb = load_workbook("files/p1.xlsx") sheet = wb.worksheets[2] # 獲取第N行第N列的單元格(位置是從1開始) c1 = sheet.cell(1, 1) print(c1) # <Cell 'Sheet1'.A1> print(c1.value) # 用戶信息 c2 = sheet.cell(1, 2) print(c2) # <MergedCell 'Sheet1'.B1> print(c2.value) # None
from openpyxl import load_workbook wb = load_workbook('files/p1.xlsx') sheet = wb.worksheets[2] for row in sheet.rows: print(row)
2.寫Excel
2.1原Excel文件基礎上寫內容
from openpyxl import load_workbook wb = load_workbook('files/p1.xlsx') sheet = wb.worksheets[0] # 找到單元格,並修改單元格的內容 cell = sheet.cell(1, 1) cell.value = "新的開始" # 將excel文件保存到p2.xlsx文件中 wb.save("files/p2.xlsx")
2.2新創建Excel文件寫內容
from openpyxl import workbook # 創建excel且默認會創建一個sheet(名稱為Sheet) wb = workbook.Workbook() sheet = wb.worksheets[0] # 或 sheet = wb["Sheet"] # 找到單元格,並修改單元格的內容 cell = sheet.cell(1, 1) cell.value = "新的開始" # 將excel文件保存到p2.xlsx文件中 wb.save("files/p2.xlsx")
2.3了解了如何讀取Excel和創建Excel之后,后續對於Excel中的sheet和cell操作基本上都相同
from openpyxl import workbook wb = workbook.Workbook() # Sheet # 1. 修改sheet名稱 sheet = wb.worksheets[0] sheet.title = "數據集" wb.save("p2.xlsx") # 2. 創建sheet並設置sheet顏色 sheet = wb.create_sheet("工作計划", 0) sheet.sheet_properties.tabColor = "1072BA" wb.save("p2.xlsx") # 3. 默認打開的sheet wb.active = 0 wb.save("p2.xlsx") # 4. 拷貝sheet sheet = wb.create_sheet("工作計划") sheet.sheet_properties.tabColor = "1072BA" new_sheet = wb.copy_worksheet(wb["Sheet"]) new_sheet.title = "新的計划" wb.save("p2.xlsx") # 5.刪除sheet del wb["用戶列表"] wb.save('files/p2.xlsx')
from openpyxl import load_workbook from openpyxl.styles import Alignment, Border, Side, Font, PatternFill, GradientFill wb = load_workbook('files/p1.xlsx') sheet = wb.worksheets[1] # 1. 獲取某個單元格,修改值 cell = sheet.cell(1, 1) cell.value = "開始" wb.save("p2.xlsx") # 2. 獲取某個單元格,修改值 sheet["B3"] = "Alex" wb.save("p2.xlsx") # 3. 獲取某些單元格,修改值 cell_list = sheet["B2":"C3"] for row in cell_list: for cell in row: cell.value = "新的值" wb.save("p2.xlsx") # 4. 對齊方式 cell = sheet.cell(1, 1) # horizontal,水平方向對齊方式:"general", "left", "center", "right", "fill", "justify", "centerContinuous", "distributed" # vertical,垂直方向對齊方式:"top", "center", "bottom", "justify", "distributed" # text_rotation,旋轉角度。 # wrap_text,是否自動換行。 cell.alignment = Alignment(horizontal='center', vertical='distributed', text_rotation=45, wrap_text=True) wb.save("p2.xlsx") # 5. 邊框 # side的style有如下:dashDot','dashDotDot', 'dashed','dotted','double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot','mediumDashed', 'slantDashDot', 'thick', 'thin' cell = sheet.cell(9, 2) cell.border = Border( top=Side(style="thin", color="FFB6C1"), bottom=Side(style="dashed", color="FFB6C1"), left=Side(style="dashed", color="FFB6C1"), right=Side(style="dashed", color="9932CC"), diagonal=Side(style="thin", color="483D8B"), # 對角線 diagonalUp=True, # 左下 ~ 右上 diagonalDown=True # 左上 ~ 右下 ) wb.save("p2.xlsx") # 6.字體 cell = sheet.cell(5, 1) cell.font = Font(name="微軟雅黑", size=45, color="ff0000", underline="single") wb.save("p2.xlsx") # 7.背景色 cell = sheet.cell(5, 3) cell.fill = PatternFill("solid", fgColor="99ccff") wb.save("p2.xlsx") # 8.漸變背景色 cell = sheet.cell(5, 5) cell.fill = GradientFill("linear", stop=("FFFFFF", "99ccff", "000000")) wb.save("p2.xlsx") # 9.寬高(索引從1開始) sheet.row_dimensions[1].height = 50 sheet.column_dimensions["E"].width = 100 wb.save("p2.xlsx") # 10.合並單元格 sheet.merge_cells("B2:D8") sheet.merge_cells(start_row=15, start_column=3, end_row=18, end_column=8) wb.save("p2.xlsx") sheet.unmerge_cells("B2:D8") wb.save("p2.xlsx") # 11.寫入公式 sheet = wb.worksheets[3] sheet["D1"] = "合計" sheet["D2"] = "=B2*C2" wb.save("p2.xlsx") sheet = wb.worksheets[3] sheet["D3"] = "=SUM(B3,C3)" wb.save("p2.xlsx") # 12.刪除 # idx,要刪除的索引位置 # amount,從索引位置開始要刪除的個數(默認為1) sheet.delete_rows(idx=1, amount=20) sheet.delete_cols(idx=1, amount=3) wb.save("p2.xlsx") # 13.插入 sheet.insert_rows(idx=5, amount=10) sheet.insert_cols(idx=3, amount=2) wb.save("p2.xlsx") # 14.循環寫內容 sheet = wb["Sheet"] cell_range = sheet['A1:C2'] for row in cell_range: for cell in row: cell.value = "xx" for row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10): for cell in row: cell.value = "oo" wb.save("p2.xlsx") # 15.移動 # 將H2:J10范圍的數據,向右移動15個位置、向上移動1個位置 sheet.move_range("H2:J10",rows=1, cols=15) wb.save("p2.xlsx") sheet = wb.worksheets[3] sheet["D1"] = "合計" sheet["D2"] = "=B2*C2" sheet["D3"] = "=SUM(B3,C3)" sheet.move_range("B1:D3",cols=10, translate=True) # 自動翻譯公式 wb.save("p2.xlsx") # 16.打印區域 sheet.print_area = "A1:D200" wb.save("p2.xlsx") # 17.打印時,每個頁面的固定表頭 sheet.print_title_cols = "A:D" sheet.print_title_rows = "1:3" wb.save("p2.xlsx")