之前在公司有一些自動化的任務,主要是從幾個excel中找資料,然後記錄到新的excel中。說真的學到了很多,感嘆python的強大,各個領域用python真是能省不少的事。
之前就想記錄來著,一直給忙忘了。現在在這裡回憶也鞏固以下之前的知識,希望也能幫助剛接觸的朋友更快的上手。ok,讓我們開始吧!
處理excel的庫還是有不少的,我在這裡給列出來:
import openpyxl
# 載入excel檔案
wb = openpyxl.load_workbook(excel_path)
# 1.獲取sheet
sheets = wb.worksheets # 返回乙個sheet物件列表,然後根據索引可以拿到sheet
sheet = wb[
'sheet1'
]# 根據sheet名拿到工作表
# 2.獲取單元格
a1 = sheet[
'a1'
].value # 切片方式獲取a1單元格的值
a1 = sheet.cell(row=
1, column=1)
.value # 指定行列獲取a1單元格的值
# 3.讀取範圍內的單元格
cells = sheet[
'a1'
:'b5'
]# 獲取a1到b5範圍內的單元格
# 4.遍歷單元格
# 當接收遍歷有多個時,個數應與列差個數保持一致,否則會報錯。例如:a2-c9有三列,所以需要三個變數接收。此時按行賦值
for c1, c2, c3 in sheet[
'a2'
:'c9']:
print
(f', , '
)# 挨個讀取單元格,需要注意的是外層迴圈是以行為單位,需要再次迴圈拿到值,或者通過索引取值。
for cells in sheet[
'a2'
:'c9']:
for cell in cells:
print
(cell.value)
# 5. 獲取包含資料的最大行號和列號,但是這個還是有些不足,如果單元格有樣式就不太準確了。
max_row = sheet.max_row
max_column = sheet.max_column
# 6. 單元格賦值
sheet[
'a1'
].value =
'a1'
# 將a1單元格的值設定為a1
sheet.cell(row=
2, column=1)
.value =
'a1'
# 7. 批量賦值, 以元組或列表巢狀的形式配合for迴圈新增。追加到有資料的最後一行
rows =((
'name'
,'age'
,'number'),
('張三',24
,'001'),
('李四',22
,'002'),
('王二',23
,'003'),
)for row in rows:
# 8. 過濾和排序
data =[[
'item'
,'colour'],
['pen'
,'brown'],
['book'
,'black'],
['plate'
,'white'],
['chair'
,'brown'],
['coin'
,'gold'],
['bed'
,'brown'],
['notebook'
,'white'],
]for r in data:
sheet.auto_filter.ref =
'a1:b8'
# 設定a1-b8為過濾列
sheet.auto_filter.add_filter_column(1,
['brown'
,'white'])
# 設定第一列過濾資料,'brown', 'white'
sheet.auto_filter.add_sort_condition(
'b2:b8'
)# 按b2-b8進行自動排序
# 9. 合併單元格
sheet.merge_cells(
'a1:b2'
)# 合併a1-b2單元格
# 10. 凍結窗格
sheet.freeze_panes =
'b2'
# 以b2單元格為基礎凍結工作表
更多openpyxl的操作可以參考這一篇,總結的特別全面。
這個庫我主要用到了它的查詢功能,當你需要在工作表中查詢某個值所在的行號時就能用得到。目前我只用了這乙個功能。
下面給個例子,感覺使用起來稍微有一點點複雜,需要自己多動手試試才能找到規律。
import pandas as pd
# sheet_name指定excel的sheet名,header指定以哪一行作為標題行
inner_excel = pd.read_excel(inner_path, sheet_name=
'インシデント臺帳'
, header=1)
# 上面指定標題行之後,可以使用下面的方法查詢某一標題所在列的值的行號
rows = inner_excel[inner_excel[
"案件番號"]==
"20290208-001"
].index.tolist(
)# 查詢20290208-001在案件番號列所在的行號列表
infos =
iflen
(rows)==0
: indexs = excel_event[excel_event[
"案件番號"
]== case_num]
.index.tolist()if
len(indexs)
>0:
'分類'
].values[indexs[0]
])'日野 浩'
) date64 = excel_event[
'クローズ\n日付'
].values[indexs[0]
]str
(date64.astype(
"datetime64[d]"))
.replace(
'-',
'/')
)return infos
return
'分類'
].values[rows[0]
])# 獲取分類列指定行號的值
'擔當者'
].values[rows[0]
])date64 = inner_excel[
'完了日'
].values[rows[0]
]str
(date64.astype(
"datetime64[d]"))
.replace(
'-',
'/')
)# 日期的處理,這裡也是乙個大坑。需要特別注意。
python 處理Excel資料
環境配置及可實現操作 注 datanitro作為外掛程式使用需依託軟體本身。參考 2 使用xlrd讀取 可以檢測是否已安裝了xlrd,用import命令 沒有安裝的進行安裝xlrd 安裝成功後,讀取檔案 import xlrd 引入模組 開啟檔案,獲取excel檔案的workbook 工作簿 物件 ...
Excel檔案處理之pandas
pandas可以用來處理多種儲存型別的資料,比如excel csv html sql.檢視pandas.read xx方法可以看出。本文主要總結對excel的處理。pandas依賴處理excel的xlrd等模組,這些模組安裝即可,不需要import。1讀取 1.1多個sheet import pan...
利用Python處理Excel資料
資料清洗 資料預處理 資料提取 資料篩選 資料彙總 資料統計 import pandas as pd import numpy as np import matplotlib.pyplot as plt from datetime import datetime from pandas import...