從幾百個Excel中查詢資料,用Python一分鐘搞定
今天給大家分享一個 真實的辦公自動化需求,日常辦公肯定都會遇到的,大家一定要仔細閱讀需求說明,在理解需求之後即可體會Python的強大!
一、需求說明
首先我們來看下今天的需求,有一份 檔案記錄總表的Excel工作簿, 每天會根據當天日期建立新表,每天的表格內包含所有檔案資訊,同時也有可能會新增新的檔案名。 同個年度的總表在年末可能會有兩、三百個工作表,同時每個表中可能也存在千餘份檔案資訊。表格形式如下(為了直觀呈現本例以7個工作表和十餘份檔案的形式呈現)
需要完成的操作:為了方便審查特定檔案資訊,需要 給出檔案名後生成一份新表,該表包含指定檔案在所有日期(即所有工作表)中的記錄。最終結果如下(以 檔案x003為例):
也就是老闆說: 給我把這幾百個表格中所有包含檔案x003的相關資料全部找到並整理個新的表格給我!
二、步驟分析
正式寫程式碼前可以把需求分析清楚,將複雜問題簡單化。
說白了,這個需求要求 把所有日期工作表中的特定行都提取出來整合成一個新表。那麼我們可以遍歷每一張表,然後遍歷第一列(名稱列,也可以看作A列)每一個有資料的單元格,如果單元格中的文字為我們需要的檔案名,就把這一行提取出來放到新的表格中,進一步梳理步驟為
建立一個新的EXCEL工作簿
新表的表頭和檔案記錄Excel中的一樣,也是名稱、配置、提交日期等
遍歷檔案記錄Excel的每一張工作表sheet,再遍歷第一列每一個有資料的單元格,對內容進行判斷
找到符合條件的單元格後獲取行號,根據行號將當前表中的特定行提取出來,並將行追加新建立的表中
分析清楚就可以著手寫程式碼了
三、Python實現
首先匯入需要的庫本例中涉及舊錶的開啟和新表的建立,因此需要從openpyxl匯入load_workbook和Workbook(如果是ppt和word用到的模組就更智慧了,一個方法就能搞定)
from openpyxl
import load_workbook, Workbook
接著匯入舊錶及建立新表
# 從桌面上獲取總表
filepath = r
'C:\Users\chenx\Desktop\臺賬.xlsm' # 根據實際情況進行修改
workbook = load_workbook(filepath)
# 建立新的Excel工作簿獲取到工作表
new_workbook = Workbook()
new_sheet = new_workbook.active
# 給新表寫入表頭
new_headers = [
'名稱',
'配置',
'提交日期',
'受限操作',
'操作時間',
'狀態',
'儲存位置']
new_sheet.
append(new_headers)
現在是核心步驟: 多次遍歷,可以用workbook.sheetnames獲取工作簿所有工作表名稱的列表,然後遍歷即可
for i in workbook.sheetnames:
sheet = workbook[i]
# 獲取檔案名稱所在列
names = sheet['A']
按照前面的分析,需要遍歷名稱列,判斷每一個單元格的值是不是需要的檔案名。這裡應注意,如果已經迴圈到需要的單元格,就可以停止迴圈了,但 一定要把符合單元格的行號傳遞給一個變數做記錄,不然一旦break出迴圈就沒有記憶了
flag =
0
for cell in names:
if cell.value == keyword:
# 這裡的keyword就是檔案名,可以以 檔案x003 為例
flag = cell.row
break
獲得到符合條件的行號後用sheet[flag]就可以拿到符合行了。openpyxl不支援舊錶的一整行寫入新表,因此應對策略就是將這一行的所有單元格具體值組裝成一個列表,用sheet.append(列表)的方法寫入新表,遍歷部分的完整程式碼如下:
for i in workbook.sheetnames:
sheet = workbook[i]
names = sheet[
'A']
flag =
0
for cell in names:
if cell.value == keyword:
flag = cell.row
break
if flag: # 如果flag沒有被修改則不需要順序進行下列程式碼
data_lst = []
for cell in sheet[flag]:
# 這裡加上一個對內容的判斷,是讓無內容的行直接放空,而不是寫入一個 none
if cell.value:
data_lst.
append(str(cell.value))
else:
data_lst.
append(
' ')
new_sheet.
append(data_lst)
最後記得儲存
new_workbook.save(r'C:\Users\chenx\Desktop\臺賬查詢.xlsx')
小結
這是經過一定改編的真實案例,可見Python自動化辦公確實能夠幫助我們解放自己的雙手,不過在寫自動化指令碼之前也要先拆分任務,明確思路再進行,如果對本文的程式碼和資料感興趣可以在後臺回覆自動化獲取。最後還是希望大家能夠理解Python辦公自動化的一個核心就是 批次操作-解放雙手,讓複雜的工作自動化!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2714607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXCEL資料太“髒”無從下手?何須用python,ETL一分鐘搞定ExcelPython
- 從一個集合中查詢最大最小的N個元素——Python heapq 堆資料結構Python資料結構
- 工作小應用:EXCEL查詢兩列重複資料Excel
- SQLSERVER查詢某個資料庫有幾張表SQLServer資料庫
- 用Python讀取excel中的資料PythonExcel
- 教你用一條SQL搞定跨資料庫查詢難題SQL資料庫
- QardioArm智慧血壓計:一分鐘搞定!
- Excel查詢兩列資料相同的元素Excel
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- 百家號如何同步到今日頭條?用這個工具分分鐘搞定!
- 一分鐘搞定EVE-NG怎麼安裝
- 一分鐘搞定AlloyTouch圖片輪播元件元件
- 20分鐘快速錄入100個Excel表格!職場大神用三個快捷鍵就搞定Excel
- MySQL中幾種資料統計查詢的基本使用教程MySql
- 用一分鐘理解console的這個原理,多留幾根黑髮~
- Oracle 查詢多個資料Oracle
- pandas 的幾個查詢方法
- 幾個SQL查詢小技巧SQL
- 查詢資料庫每個表佔用的大小資料庫
- python查詢百度seo資訊Python
- MongoDB資料庫中查詢資料(下)MongoDB資料庫
- 教你用Python製作一個NBA球員資料查詢小程式Python
- excel查詢資料的技術實現選擇Excel
- 如何從SharePoint Content DB中查詢List資料
- Python資料分析從小白到高手的幾個步驟Python
- mysql 從一個表中查詢,插入到另一個表中MySql
- 資料庫中單表查詢資料庫
- 查詢某條記錄存在哪個資料塊中
- Oracle中對兩個資料表交集的查詢(轉)Oracle
- 在MongoDB資料庫中查詢資料(上)MongoDB資料庫
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- JAVA 中使用 SQL 語句查詢 EXCEL 檔案資料JavaSQLExcel
- 十秒鐘搞定 RecyclerView 資料繫結View
- 從0開始弄一個面向OC資料庫(二)--插入、更新、查詢資料資料庫
- mysql資料庫連表查詢的幾種方法MySql資料庫
- 關於資料庫查詢業務的幾點思考資料庫
- Excel資料快速匯入mysql的幾個辦法ExcelMySql
- 一分鐘sed入門(一分鐘系列)