日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

    歡迎訪問 生活随笔!

    生活随笔

    當前位置: 首頁 > 编程语言 > python >内容正文

    python

    python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

    發布時間:2023/12/3 python 34 豆豆
    生活随笔 收集整理的這篇文章主要介紹了 python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    接上篇文章《如何用python實現excel中的vlookup功能?》,上篇說到,最近我在做一個小項目,也是用python操作excel解決財務審計工作上的一些問題,以便提高工作效率及其準確性。

    最終目的,刀哥是想做應收賬款賬齡分析,不知最終能否實現,請大家持續關注。

    這篇文章要做的事情,如標題所述,就是提取多張excel表上的數據或信息,合并匯總到一張新表上,這是我們工作中經常會遇到的事情。

    比如將每月銷售情況匯總到一張表上進行銷售情況分析,比如將各月發票信息匯總到一張表上進行統計分析,還比如將每月工資表上的某些信息匯總到一張表上進行工資成本分析等等。

    這次,刀哥是要將2017年1-12月、2018年1-12月、2019年1-12月及2020年1-6月各期科目余額表中,所有應收賬款的信息,包括科目編碼、科目名稱、期初余額、借貸方發生額及期末余額,全部提取出來匯總到同一張新表上,并以科目編碼升序排列,客戶名稱及金額與科目編碼做到一一對應。

    具體看表即為:

    各期科目余額表截圖

    最后得到的新表為:

    要實現上述目標,可以分如下四步進行。

    1.

    獲取各科目余額表文件路徑

    將2017年1-12月、2018年1-12月、2019年1-12月及2020年1-6月各期科目余額表放在同一文件夾下,要讀取多少個文件,就把多少個文件全部放在同一個文件夾下,如下圖。

    然后讀取所有文件的路徑,代碼如下。

    1dir_xls = []

    2def get_file(folder_path): #獲取同一文件夾下所有科目余額表各自的文件路徑

    3 dir_file = os.listdir(folder_path)

    4 #print(dir_file)

    5 for path in dir_file:

    6 if path[-4:] == 'xlsx' or path[-3:] == 'xls':

    7 whole_path = r'd:/F:學習/python/賬齡分析/科目余額表/{}'.format(path)

    8 dir_xls.append(whole_path)

    9 return dir_xls

    2.

    獲取各科目余額表中應收賬款一級科目編碼所在的行列

    比如在2017年科目余額表中,應收賬款一級科目編碼為“1122”,其所在的單元格為C12,也即為第12行第3列,這里的行號12、列號3,即為其定位。

    其余科目余額表同理,均為獲取一級科目編碼“1122”的行號和列號,獲取代碼如下。

    1dict_row_col = {}

    2def get_row_col(dir_xls): #獲取每一張表中應收賬款一級科目編碼所在的行號和列號

    3 for i in dir_xls:

    4 #print(i)

    5 account_balance_sheet_data = pd.DataFrame(pd.read_excel(i))

    6 for a in account_balance_sheet_data.index:

    7 for b in range(len(account_balance_sheet_data.loc[a].values)):

    8 if account_balance_sheet_data.loc[a].values[b] == '1122':

    9 row = a+1

    10 col = b+1

    11 dict_row_col[i] = [row,col]

    12 return dict_row_col

    3.

    獲取各科目余額表中應收賬款所有二級科目編碼

    根據獲取到的應收賬款一級科目編碼行號和列號,即根據其定位,再獲取每一張表中應收賬款所有二級科目編碼,并將其不重復且升序排列添加到一張新表中,代碼如下。

    1def get_ar_code(dict_row_col):

    2 i = 0

    3 ar_list1 = []

    4 ar_list2 = []

    5 for key in dict_row_col.keys():

    6 workbook = xlrd.open_workbook(key)

    7 balance_sheet = workbook.sheet_by_index(0)

    8 row = dict_row_col[key][0]

    9 col = dict_row_col[key][1]

    10 while True:

    11 if '1122' in balance_sheet.cell_value(row+1,col-1):

    12 ar_code = balance_sheet.cell_value(row+1,col-1)

    13 if ar_code not in ar_list1:

    14 ar_list1.append(ar_code)

    15 else:

    16 pass

    17 row = row+1

    18 else:

    19 break

    20 ar_list1.append('科目編碼')

    21 ar_list1.sort(reverse=False) #科目編碼列表升序排列

    22 #將“科目編碼”從最后一個元素整體移動到第一個元素

    23 ar_list2.append(ar_list1[len(ar_list1)-1])

    24 for i in range(1,len(ar_list1)):

    25 ar_list2.append(ar_list1[i-1])

    26 #將所有元素寫入到excel表中

    27 for i in range(len(ar_list2)):

    28 ar_sheet.write(i,0,ar_list2[i])

    得到的新表內容如下。

    由上可看出,2017年至2020年1-6月,四張科目余額表,應收賬款共有617個二級科目,對應著617個不同的客戶。

    4.

    根據二級科目索引獲取全部所需信息

    此步的操作過程,即上一篇《如何用python實現excel中的vlookup功能?》所分享的過程,這里就不再詳述了,代碼如下。

    1def get_ar_info(dict_row_col):

    2 #讀取導入目標表

    3 file_target = r'd:\F:學習\python\賬齡分析\AR.xls'

    4 list_ar_code = []

    5 workbook = xlrd.open_workbook(file_target)

    6 balance_sheet = workbook.sheet_by_index(0)

    7 rows = balance_sheet.nrows

    8 for i in range(1,rows):

    9 list_ar_code.append(balance_sheet.cell_value(i,0))

    10 #print(list_ar_code)

    11 data = {'科目編碼':list_ar_code}

    12 df_target = pd.DataFrame(data)

    13

    14 for key in dict_row_col.keys():

    15 #讀取原始數據來源表

    16 file_source = key

    17 df_source = pd.read_excel(file_source)

    18 #將原始數據來源表及導入目標表信息合并到同一表上

    19 dfneed = df_source[['科目編碼','科目名稱','期初借方','期初貸方','本期發生借方','本期發生貸方','期末借方','期末貸方']]

    20 df_target = pd.merge(df_target,dfneed,how='left',on='科目編碼')

    21 df_target.to_excel(file_target,index=False)

    5.

    最終目標實現

    前四步即為封裝的四個函數,每個函數為其中一個步驟,最終匯總可以實現此文總體目標,調用代碼及運行代碼如下。

    1import os

    2import pandas as pd

    3import xlrd,xlwt

    4

    5folder_path = r'd:\F:學習\python\賬齡分析\科目余額表'

    6f = xlwt.Workbook()

    7ar_sheet = f.add_sheet(u'ar_sheet',cell_overwrite_ok=True)

    8dir_xls = get_file(folder_path)

    9dict_row_col = get_row_col(dir_xls)

    10get_ar_code(dict_row_col)

    11f.save(r'd:\F:學習\python\賬齡分析\AR.xls')

    12get_ar_info(dict_row_col)

    運行后生成的表格如下。

    再經過簡單整理后,便可得出上文最終表格,至此實現了從多張excel表中提取所需數據或信息并匯總到同一張新表上的目的。

    寫的很匆忙,不知道表述清楚沒有,如有疑問,請找刀哥交流。

    如何實現賬齡分析目標,那就是刀哥下次要分享的內容了,敬請期待,記得點個贊同和收藏哦。

    學習python,刀哥正在路上,你要一起來嗎?歡迎加入刀哥python學習交流群,來一起擼代碼吧。

    總結

    以上是生活随笔為你收集整理的python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。