1. 程式人生 > 實用技巧 >Python自動化辦公-自動化操作Excell-openpyxl

Python自動化辦公-自動化操作Excell-openpyxl

python自動化辦公(第6~7課)模組介紹,讀取excel表格內容

Excel中的術語

  • column:列
  • row:行
  • sheet:表

- 開啟Excel表格並獲取工作表名稱

from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
print(workbook.sheetnames)
  • 1
  • 2
  • 3
['sheet表1']
  • 1

- 通過sheet名獲取表格並獲取表格的尺寸大小

  • sheet=workbook[工作表名稱]
  • sheet.dimensions
from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
sheet = workbook["sheet表1"]
print(sheet.dimensions)
print(type(sheet.dimensions))
  • 1
  • 2
  • 3
  • 4
  • 5
A1:G1002
<class 'str'>
  • 1
  • 2

- 獲取表格內某個格子的資料

  • workbook.active 開啟活躍的/唯一的表格
  • sheet[“A1”] 獲取A1格子
  • cell.value 該格子的資料
from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
sheet = workbook.active
cell1 = sheet["A1"]
cell2 = sheet["B5"]
print(cell1.value,cell2.value)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
user_id 12515996043
  • 1

- 獲取某個格子的行數,列數,座標

  • .row 行數
  • .column 列數

.coordinate 座標

cell = sheet["B5"]
print(cell.row,cell.column,cell.coordinate)
  • 1
  • 2
5 2 B5
  • 1

- 可用行數和列數定位某一個格子

  • sheet.cell(row=行數,column=列數)
cell = sheet.cell(row=1,column=1)
print(cell.value)
#即A1格子
  • 1
  • 2
  • 3
user_id
  • 1

- 獲取一系列格子

  • sheet[“A1:A5”]
  • sheet[“A”] ——只要A列
  • sheet[“A:C”] ——A到C列
  • sheet[5] ——5行
  • 輸出的全是元組,可用foe迴圈將每一個格子取出來
cells = sheet["A1:A5"]
print(cells)
  • 1
  • 2
((<Cell 'sheet表1'.A1>,), (<Cell 'sheet表1'.A2>,), (<Cell 'sheet表1'.A3>,), (<Cell 'sheet表1'.A4>,), (<Cell 'sheet表1'.A5>,))
  • 1
from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
sheet = workbook.active
for row in sheet.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2):
    print(row)
  • 1
  • 2
  • 3
  • 4
  • 5
(<Cell 'sheet表1'.A2>, <Cell 'sheet表1'.B2>)
(<Cell 'sheet表1'.A3>, <Cell 'sheet表1'.B3>)
  • 1
  • 2
  • 返回的是每一行為一個元組
for col in sheet.iter_cols(min_row=2,max_row=3,min_col=1,max_col=2):
    print(col)
  • 1
  • 2
(<Cell 'sheet表1'.A2>, <Cell 'sheet表1'.A3>)
(<Cell 'sheet表1'.B2>, <Cell 'sheet表1'.B3>)
  • 1
  • 2
  • 返回的是每一列為一個元組
from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
sheet = workbook.active
for row in sheet.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2):
    for cell in row:
        print(cell)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
<Cell 'sheet表1'.A2>
<Cell 'sheet表1'.B2>
<Cell 'sheet表1'.A3>
<Cell 'sheet表1'.B3>
  • 1
  • 2
  • 3
  • 4

作業:編寫python程式,要求如下:

  • 開啟檔案阿里雲天池電商嬰兒使用者資料.xlsx
  • 找到其中空著的格子
  • 輸出這些格子的座標,如A1,C10等
  • 空格子有:[共21個]
    • E153,A278,E278,E293,C320,G339,B342
    • E503,B527,E544,F554,C590,G597,A610
    • F611,E666,E791,E816,E916,B958,G976
from openpyxl import load_workbook
workbook = load_workbook(filename="阿里雲天池電商嬰兒使用者資料.xlsx")
sheet = workbook.active
# 返回工作表大小
sheet_size = sheet.dimensions
cells = sheet[sheet_size]
# 建一個空列表,方便後面列印檢視
cell_list = []
for cell_tuple in cells:
    # cell_tuple是每一行為1個元組
    for cell in cell_tuple:
        # cell是每一行元組中的每一個小格子
        if cell.value == None:
            cell_list.append(cell.coordinate)
for i in range(len(cell_list)):
    # 沒有end時預設換行輸出,end為結束符
    print(cell_list[i],end=",") 
    if (i+1)%7 == 0:    # i是從0開始的,所以要加1再對7取餘           
        print("")
print("")
print(f"總共{n}個")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
E153,A278,E278,E293,C320,G339,B342,
E503,B527,E544,F554,C590,G597,A610,
F611,E666,E791,E816,E916,B958,G976,

總共21個