這篇文章給大家介紹excel表格怎么利用python進(jìn)行操作,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),浦城企業(yè)網(wǎng)站建設(shè),浦城品牌網(wǎng)站建設(shè),網(wǎng)站定制,浦城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,浦城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。1. 下載相關(guān)python包
python操作excel表格可以使用以下三個(gè)包
xlrd - 讀excel文件
xlwt - 寫excel文件,這個(gè)不能修改已有的excel文件,只能寫新的文件
xlutils - 修改excel文件,其實(shí)就是通過xlrd拷貝一份記錄,再進(jìn)行修改。保存為老的名字就替換了原文件,保存為新的名字就創(chuàng)建一個(gè)新文件
注意事項(xiàng):
a. python讀取excel的日期和時(shí)間時(shí)
表格內(nèi)容是2019/5/13,python讀到的值是43606.0,該值為從日期減1899/12/30得到的天數(shù)
表格內(nèi)容是9:00:00,python讀到的值是0.375,該值為時(shí)間過了一天的比例,即9/24
表格內(nèi)容是2019/5/13 9:00:00,python讀到的值是43598.375
日期和時(shí)間可以直接相加,因?yàn)閜ython讀到的都是轉(zhuǎn)化為數(shù)字之后的值
b. python讀取excel的數(shù)字時(shí),如員工編號為181129,最后結(jié)果是181129.0,非整數(shù)
c. 調(diào)用save函數(shù)保存新的excel文件時(shí),后綴名必須是.xls
2. 將python文件轉(zhuǎn)為.bat格式
你不可能要求妹子去使用cmd,然后使用python xx.py去執(zhí)行python文件,必須想個(gè)辦法搞成傻瓜式的。我們可以通過.bat格式文件實(shí)現(xiàn)
新建文本文件,重命名為“A考勤小工具.bat”,輸入下面代碼,@py.exe表示后面的參數(shù)是python可執(zhí)行文件
@py.exe Akqfx.py
3. 附上相關(guān)代碼和excel格式文本
Akqfx.py
# 該腳本為修正考勤記錄 # author: yangbao import os from datetime import datetime import xlrd from xlutils.copy import copy # 定義文件是否存在 def get_list_file(): current_list = os.listdir() must_list = ['原始數(shù)據(jù).xls', '外出.xls', '法定假日.xls', '請假.xls'] cj_set = set(must_list) - set(current_list) if cj_set: for i in cj_set: print('{} 不存在,請檢查!'.format(i)) return 0 else: return 1 # 定義是否存在流程 def get_qjorwc(file_name, person_id, input_time): book = xlrd.open_workbook(file_name) book_sheet = book.sheet_by_index(0) flag = 0 for i in range(1, book_sheet.nrows): if int(book_sheet.cell_value(i, 1)) == int(person_id): # 文件不同,時(shí)間處理不同 if file_name == '請假.xls': cell_begin = book_sheet.cell_value(i, 4) cell_end = book_sheet.cell_value(i, 5) else: cell_begin = book_sheet.cell_value(i, 3) + book_sheet.cell_value(i, 4) cell_end = book_sheet.cell_value(i, 5) + book_sheet.cell_value(i, 6) # 判斷原始數(shù)據(jù)曠工和遲到是否在請假或外出流程里 # 給額外5min的寬限時(shí)間 if cell_begin-5/1440 <= input_time <= cell_end+5/1440: flag = 1 break return flag # 定義是否是法定假日 def get_fdjr(input_time): book = xlrd.open_workbook('法定假日.xls') book_sheet = book.sheet_by_index(0) flag = 0 for i in range(1, book_sheet.nrows): dt = datetime(*xlrd.xldate_as_tuple(book_sheet.cell_value(i, 0), 0)) if dt.strftime('%Y-%m-%d') == input_time: flag = 1 break return flag def main(): ys_book = xlrd.open_workbook('原始數(shù)據(jù).xls') ys_book_sheet = ys_book.sheet_by_index(0) new_ys_book = copy(ys_book) new_ys_book_sheet = new_ys_book.get_sheet(0) unnormal_list = ['曠工', '遲到'] for i in range(ys_book_sheet.nrows): # 查上班時(shí)間 if ys_book_sheet.cell_value(i, 5) in unnormal_list: # 查是否是法定假日 dt = ys_book_sheet.cell_value(i, 3)[:10] if get_fdjr(dt): new_ys_book_sheet.write(i, 5, '*') # 查是否有流程 if ys_book_sheet.cell_value(i, 4) != '': cell_on_time = ys_book_sheet.cell_value(i, 3)[:10] + ' ' + ys_book_sheet.cell_value(i, 4) cell_on_time_format = datetime.strptime(cell_on_time, "%Y-%m-%d %H:%M:%S") \ - datetime.strptime('1899-12-30', '%Y-%m-%d') cell_on_time_number = cell_on_time_format.days + cell_on_time_format.seconds / (24 * 3600) if 12 < cell_on_time_format.seconds / 3600 < 13: cell_on_time_number = cell_on_time_format.days + 11.5/24 else: cell_on_time = ys_book_sheet.cell_value(i, 3)[:10] cell_on_time_format = datetime.strptime(cell_on_time, "%Y-%m-%d") \ - datetime.strptime('1899-12-30', '%Y-%m-%d') cell_on_time_number = cell_on_time_format.days + cell_on_time_format.seconds / (24 * 3600) + 9/24 qj_on_flag = get_qjorwc('請假.xls', ys_book_sheet.cell_value(i, 1), cell_on_time_number) wc_on_flag = get_qjorwc('外出.xls', ys_book_sheet.cell_value(i, 1), cell_on_time_number) if qj_on_flag == 1 or wc_on_flag == 1: new_ys_book_sheet.write(i, 5, '已有流程') new_ys_book_sheet.write(i, 11, '') # 查下班時(shí)間 if ys_book_sheet.cell_value(i, 7) in unnormal_list: # 查是否是法定假日 dt = ys_book_sheet.cell_value(i, 3)[:10] if get_fdjr(dt): new_ys_book_sheet.write(i, 7, '*') new_ys_book_sheet.write(i, 11, '') # 查是否有流程 if ys_book_sheet.cell_value(i, 6) != '': cell_out_time = ys_book_sheet.cell_value(i, 3)[:10] + ' ' + ys_book_sheet.cell_value(i, 6) cell_out_time_format = datetime.strptime(cell_out_time, "%Y-%m-%d %H:%M:%S") \ - datetime.strptime('1899-12-30', '%Y-%m-%d') cell_out_time_number = cell_out_time_format.days + cell_out_time_format.seconds / (24 * 3600) if 12 < cell_out_time_format.seconds / 3600 < 13: cell_out_time_number = cell_out_time_format.days + 13.5/24 else: cell_out_time = ys_book_sheet.cell_value(i, 3)[:10] cell_out_time_format = datetime.strptime(cell_out_time, "%Y-%m-%d") \ - datetime.strptime('1899-12-30', '%Y-%m-%d') cell_out_time_number = cell_out_time_format.days + cell_out_time_format.seconds / (24 * 3600) + 18/24 qj_out_flag = get_qjorwc('請假.xls', ys_book_sheet.cell_value(i, 1), cell_out_time_number) wc_out_flag = get_qjorwc('外出.xls', ys_book_sheet.cell_value(i, 1), cell_out_time_number) if qj_out_flag == 1 or wc_out_flag == 1: new_ys_book_sheet.write(i, 7, '已有流程') new_ys_book_sheet.write(i, 11, '') new_excel_name = datetime.now().strftime('%Y%m%d_%H%M%S')+'校正后.xls' new_ys_book.save(new_excel_name) if __name__ == '__main__': if get_list_file(): print('開始考勤分析...') main() print('考勤分析結(jié)束...') input('按任意鍵結(jié)束') else: input('因?yàn)槿鄙傧嚓P(guān)excel文件,考勤分析失敗,退出程序,按任意鍵結(jié)束')
網(wǎng)站名稱:excel表格怎么利用python進(jìn)行操作-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://jinyejixie.com/article28/dcjijp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站收錄、響應(yīng)式網(wǎng)站、定制網(wǎng)站、云服務(wù)器、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容