最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 操作excel表格的方法

 更新時間:2020年12月05日 11:33:47   作者:小豹子的網(wǎng)絡(luò)記事本  
這篇文章主要介紹了python 操作excel表格的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

說明:由于公司oa暫缺,人事妹子在做考勤的時候,需要通過幾個excel表格去交叉比對員工是否有曠工或遲到,工作量大而且容易出錯。
這時候it屌絲的機(jī)會來啦,花了一天時間給妹子擼了一個自動化腳本。

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

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

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

c. 調(diào)用save函數(shù)保存新的excel文件時,后綴名必須是.xls

2. 將python文件轉(zhuǎn)為.bat格式
你不可能要求妹子去使用cmd,然后使用python xx.py去執(zhí)行python文件,必須想個辦法搞成傻瓜式的。我們可以通過.bat格式文件實現(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):
      # 文件不同,時間處理不同
      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的寬限時間
      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):
    # 查上班時間
    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('考勤分析結(jié)束...')
    input('按任意鍵結(jié)束')
  else:
    input('因為缺少相關(guān)excel文件,考勤分析失敗,退出程序,按任意鍵結(jié)束')

該文檔僅作個人記錄用

以上就是python 操作excel表格的方法的詳細(xì)內(nèi)容,更多關(guān)于python 操作excel表格的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中文編碼問題小結(jié)

    python中文編碼問題小結(jié)

    這篇文章主要介紹了python中文編碼問題,是Python程序設(shè)計中比較常見的一類問題,本文以實例形式對此進(jìn)行了較為詳細(xì)的總結(jié),需要的朋友可以參考下
    2014-09-09
  • Python簡單實現(xiàn)兩個任意字符串乘積的方法示例

    Python簡單實現(xiàn)兩個任意字符串乘積的方法示例

    這篇文章主要介紹了Python簡單實現(xiàn)兩個任意字符串乘積的方法,結(jié)合實例形式分析了Python針對字符串、列表的切片、轉(zhuǎn)換、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用

    Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用

    Series是帶標(biāo)簽的一維數(shù)組,可存儲整數(shù)、浮點(diǎn)數(shù)、字符串、Python 對象等類型的數(shù)據(jù),軸標(biāo)簽統(tǒng)稱為索引,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用,需要的朋友可以參考下
    2022-06-06
  • Conda環(huán)境導(dǎo)出與導(dǎo)入的實現(xiàn)

    Conda環(huán)境導(dǎo)出與導(dǎo)入的實現(xiàn)

    本文主要介紹了Conda環(huán)境導(dǎo)出與導(dǎo)入的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python中的startswith和endswith函數(shù)使用實例

    Python中的startswith和endswith函數(shù)使用實例

    這篇文章主要介紹了Python中的startswith和endswith函數(shù)使用實例,特別是endswith函數(shù),有了它,判斷文件的擴(kuò)展名、文件的類型在容易不過了,需要的朋友可以參考下
    2014-08-08
  • 簡析Python的閉包和裝飾器

    簡析Python的閉包和裝飾器

    這篇文章主要為大家詳細(xì)介紹了Python的閉包和裝飾器,何為閉包?何為裝飾器?感興趣的小伙伴們可以參考一下
    2016-02-02
  • Pytorch+PyG實現(xiàn)GIN過程示例詳解

    Pytorch+PyG實現(xiàn)GIN過程示例詳解

    這篇文章主要為大家介紹了Pytorch+PyG實現(xiàn)GIN過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python繪制KS曲線的實現(xiàn)方法

    Python繪制KS曲線的實現(xiàn)方法

    本篇文章主要介紹了Python繪制KS曲線的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Windows8下安裝Python的BeautifulSoup

    Windows8下安裝Python的BeautifulSoup

    這篇文章主要介紹了Windows8下安裝Python的BeautifulSoup,本文著重講解安裝中出現(xiàn)的錯誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • 上手簡單,功能強(qiáng)大的Python爬蟲框架——feapder

    上手簡單,功能強(qiáng)大的Python爬蟲框架——feapder

    這篇文章主要介紹了上手簡單,功能強(qiáng)大的Python爬蟲框架——feapder的使用教程,幫助大家更好的利用python進(jìn)行爬蟲,感興趣的朋友可以了解下
    2021-04-04

最新評論

凤山市| 都匀市| 博爱县| 钦州市| 黄冈市| 古浪县| 新余市| 乌兰县| 怀化市| 从江县| 准格尔旗| 若尔盖县| 北安市| 昭苏县| 玉林市| 嘉定区| 平阴县| 广河县| 海淀区| 出国| 古蔺县| 连山| 靖宇县| 买车| 漳平市| 齐河县| 旅游| 昌都县| 沙河市| 舒城县| 承德市| 丹凤县| 凉城县| 区。| 伊通| 蓬莱市| 瑞安市| 武陟县| 开江县| 南涧| 南开区|