亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

excel表格怎么利用python進行操作

發布時間:2020-12-07 15:21:46 來源:億速云 閱讀:218 作者:Leah 欄目:開發技術

這篇文章給大家介紹excel表格怎么利用python進行操作,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1. 下載相關python包

python操作excel表格可以使用以下三個包
xlrd - 讀excel文件
xlwt - 寫excel文件,這個不能修改已有的excel文件,只能寫新的文件
xlutils - 修改excel文件,其實就是通過xlrd拷貝一份記錄,再進行修改。保存為老的名字就替換了原文件,保存為新的名字就創建一個新文件

注意事項:
a. python讀取excel的日期和時間時
表格內容是2019/5/13,python讀到的值是43606.0,該值為從日期減1899/12/30得到的天數
表格內容是9:00:00,python讀到的值是0.375,該值為時間過了一天的比例,即9/24
表格內容是2019/5/13  9:00:00,python讀到的值是43598.375
日期和時間可以直接相加,因為python讀到的都是轉化為數字之后的值

b. python讀取excel的數字時,如員工編號為181129,最后結果是181129.0,非整數

c. 調用save函數保存新的excel文件時,后綴名必須是.xls

2. 將python文件轉為.bat格式
你不可能要求妹子去使用cmd,然后使用python xx.py去執行python文件,必須想個辦法搞成傻瓜式的。我們可以通過.bat格式文件實現
新建文本文件,重命名為“A考勤小工具.bat”,輸入下面代碼,@py.exe表示后面的參數是python可執行文件
@py.exe Akqfx.py

3. 附上相關代碼和excel格式文本

excel表格怎么利用python進行操作

excel表格怎么利用python進行操作

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 = ['原始數據.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):
      # 文件不同,時間處理不同
      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)
      # 判斷原始數據曠工和遲到是否在請假或外出流程里
      # 給額外5min的寬限時間
      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('原始數據.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):
    # 查上班時間
    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, '')

    # 查下班時間
    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('考勤分析結束...')
    input('按任意鍵結束')
  else:
    input('因為缺少相關excel文件,考勤分析失敗,退出程序,按任意鍵結束')

關于excel表格怎么利用python進行操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葵青区| 静安区| 慈利县| 麟游县| 宜州市| 宣恩县| 河津市| 贡嘎县| 阿拉善盟| 崇阳县| 辽阳市| 广南县| 松江区| 浦县| 读书| 遂昌县| 衡南县| 治多县| 枣强县| 上饶市| 福安市| 东阿县| 巩义市| 连江县| 庆云县| 屏南县| 交口县| 察哈| 祥云县| 东源县| 荆州市| 怀远县| 城市| 沾化县| 朝阳市| 隆昌县| 吉安市| 武山县| 新化县| 博湖县| 华安县|