Python還能這麼玩之隻用30行代碼從excel提取個人值班表
一、查找操作
1.Excel 模塊 xlrd,xlwt,xlutils 分別負責 Excel 文件的讀、寫、讀寫轉換工作!
2.openpyxl 直接可以對 Excel 文件讀寫!
3.pandas 直接可以對 Excel 文件讀寫!
二、安裝 openpyxl 模塊
pip install openpyxl
三、讀取並篩選值班表中自己的信息
1.讀取所有的值班信息;
2.由於一般情況 excel 都會有部分表格為空,保存全部 None 的 excel 行字符串數據;
3.循環全部的值班數據,將當前行數據形成一個數據字符串;
4.判斷當前值班信息字符串是否含有自己的姓名;
5.對含有自己信息的數據中關鍵信息(值班時間,姓名)進行存儲;
6.然後判斷當前字符串是否含有全部 None 的數據;
7.由於值班表沒有空出的行,所以查到 None,直接跳出循環。
dutys = [] book = openpyxl.load_workbook('duty.xlsx',data_only=True) sheet = book.active all_data = book.get_sheet_by_name("日常加班") none_str = ''.join([str(None).ljust(20) for c in range(1,all_data.max_column+1)]) for r in range(1,all_data.max_row + 1): cur_str = ''.join([str(all_data.cell(row=r,column=c).value).ljust(20) for c in range(1,all_data.max_column+1)]) if cur_str.find("***") >= 0: dutys.append({ "date": all_data.cell(row=r,column=2).value, "name": all_data.cell(row=r,column=3).value }) elif cur_str.find(none_str) >= 0: break return dutys
四、創建自己的值班信息表
1.創建一個值班信息表的 excel;
2.將自己的值班信息循環;
3.將信息填入創建的表格。
book = openpyxl.Workbook() sheet = book.active for i in range(len(dutys)): sheet.cell(row=1 + i, column=1).value = dutys[i].get("name") sheet.cell(row=1 + i, column=2).value = f'{dutys[i].get("date")}' book.save('my_duty.xlsx')
五、全部代碼
#!/usr/bin/env python """ @Author :Rattenking @Date :2021/06/02 10:19 @CSDN :https://blog.csdn.net/m0_38082783 """ import openpyxl import time def get_my_duty_date(): dutys = [] book = openpyxl.load_workbook('duty.xlsx',data_only=True) sheet = book.active all_data = book.get_sheet_by_name("日常加班") none_str = ''.join([str(None).ljust(20) for c in range(1,all_data.max_column+1)]) for r in range(1,all_data.max_row + 1): cur_str = ''.join([str(all_data.cell(row=r,column=c).value).ljust(20) for c in range(1,all_data.max_column+1)]) if cur_str.find("***") >= 0: dutys.append({ "date": all_data.cell(row=r,column=2).value, "name": all_data.cell(row=r,column=3).value }) elif cur_str.find(none_str) >= 0: break return dutys def create_my_duty_list(dutys): book = openpyxl.Workbook() sheet = book.active for i in range(len(dutys)): sheet.cell(row=1 + i, column=1).value = dutys[i].get("name") sheet.cell(row=1 + i, column=2).value = f'{dutys[i].get("date")}' book.save('my_duty.xlsx') if __name__ == "__main__": start_time = int(round(time.time() * 1000)) dutys = get_my_duty_date() create_my_duty_list(dutys) end_time = int(round(time.time() * 1000)) print(f'本次提取值班表時間:{end_time - start_time}ms')
六、執行結果
七、總結
熟悉 openpyxl 模塊的各個功能,方便對 excel 的操作;篩選提取自己關註的關鍵信息,重新建表;下一篇根據值班時間,用 python 自動給自己的微信發送信息,進行提示!
到此這篇關於Python還能這麼玩之隻用30行代碼從excel提取個人值班表的文章就介紹到這瞭,更多相關Python從excel提取個人值班表內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python使用openpyxl庫讀寫Excel表格的方法(增刪改查操作)
- python之openpyxl模塊的安裝和基本用法(excel管理)
- python技巧分享Excel創建和修改
- 詳解Python操作Excel之openpyxl
- Python 操作 Excel 之 openpyxl 模塊