精华内容
下载资源
问答
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于财会学习联盟,作者...比如将每月销售情况汇总到一张表上进行销售情况分析,比如

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

    以下文章来源于财会学习联盟,作者:我是刀哥啊

    Python 自动化办公,处理Excel表格视频讲解

    https://www.bilibili.com/video/BV1Lh411R7Kd/
    

    前言

    这篇文章要做的事情,如标题所述,就是提取多张excel表上的数据或信息,合并汇总到一张新表上,这是我们工作中经常会遇到的事情。

    比如将每月销售情况汇总到一张表上进行销售情况分析,比如将各月发票信息汇总到一张表上进行统计分析,还比如将每月工资表上的某些信息汇总到一张表上进行工资成本分析等等。

    具体看表即为:

    各期科目余额表截图

    最后得到的新表为:

    要实现上述目标,可以分如下四步进行。

    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表中提取所需数据或信息并汇总到同一张新表上的目的。


     

    展开全文
  • 办公室老师给了我很多张表格,但是每个表格里只有一行信息,我需要把多张表的信息汇总到一张表里面,该如何做呢? 一、文件目录结构 如上图,“国家励志”文件夹下面有不同学生的文件夹,每位学生的文件夹中有两份...


    场景

    办公室老师给了我一个压缩包,解压后里面有很多个文件夹,每个文件夹里面有一张Excel表格,每个表格里只有一行信息,我需要把多个文件夹里的多张Excel表的信息汇总到一张Excel表里面,该如何做呢?

    一、文件目录结构

    卷序列号为 F227-F9A4
    C:.
    └─国家励志
        ├─国家励志奖学金申请   xxx
        │  └─国家励志奖学金申请   xxx
        │          国家励志奖学金申请汇总表.xls
        │          表2.2019-2020学年国家励志奖学金申请表.doc
        │
        ├─国家励志奖学金申请 xx
        │      国家励志奖学金申请汇总表.xlsx
        │      英才实验学院2019-2020学年国家奖学金、国家励志奖学金评选的通知.docx
        │
        ├─国家励志奖学金申请 xxx
        │      国家励志奖学金申请汇总表.xls
        │      表2.2019-2020学年国家励志奖学金申请表.doc
        │
        
    

    如上图,“国家励志”文件夹下面有不同学生的文件夹,每位学生的文件夹中有两份文件,一份是申请表(.doc), 一份是我们要用到汇总表(.xls/.xlsx)。下面我们介绍两种满足需求的做法:1. 直接在Excel中做 2. 用Python编程做。

    二、实现方法

    1. Excel

    待更

    2. Python/Pandas

    之所以选用pandas,是因为pandas.concat()函数来做合并这件事是非常合适的:
    在这里插入图片描述
    如上图,使用pandas.concat(),可以直接将三个不同的dataframe按表头合并。
    而且,利用python的os库,我们可以很轻松地提取出.xls/.xlsx文件,避开了其他不相关的文件(.doc)。
    最终写成代码如下:

    
    # 导入必要的库
    import pandas as pd
    from pandas import DataFrame
    import os
    
    # 当前目录作为base目录
    base = "./"
    # 存放要处理的表格文件
    file_list = []
    # 存放读到的dataframes
    dfs = []
    # os.walk遍历base目录, root为当前所在根目录,ds为当前目录名,fs为当前非目录文件
    for root, ds, fs in os.walk(base):
        for f in fs:
            if f.endswith('.xls') or f.endswith('xlsx'):
                fp = os.path.join(root,f)
                df = pd.read_excel(fp,header=1)
                dfs.append(df)
    df = pd.concat(dfs,axis=0,sort=False) # axis=0表示按行拼接,sort=False表示列序按原始顺序排
    # 将合并后的dataframe单元格式转成字符串,避免转excel的时候数字变成科学计数法
    df = df.astype(str)
    df.to_excel('../result.xls',index=False)
    

    总结

    当我们需要合并多个excel表格到一个excel表格,而且多个excel表格又分散在不同的目录中时,可以考虑用python/pandas高效地完成

    展开全文
  • 利用 pandas 将多张 excel 中的指定列数据合并成一张;因为原始的多张数据存在同样列名的数据, 因为原始多张 excel 是从 csv 文件转换股 并且我们只需要其中的部分列数据,所以进行指定列提取并汇总至 res 文件中...

    关注RPA请访问网站:
    www.i-search.com.cn
    学Python,用RPA,欢迎下载使用
    www.i-search.com.cn/index.html?from=line1

    – coding:utf-8 –-

    “”"

    利用 pandas 将多张 excel 表中的指定列数据合并成一张;因为原始的多张数据存在同样列名的数据,

    因为原始多张 excel 是从 csv 文件转换股

    并且我们只需要其中的部分列数据,所以进行指定列提取并汇总至 res 文件中

    “”"

    import os

    import pandas as pd

    输入参数为 excel 表格所在目录

    def to_one_excel(dir):

    dfs = []

    遍历文件目录,将所有表格表示为 pandas 中的 DataFrame 对象

    for root_dir, sub_dir, files in os.walk(r’’ + dir): # 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

    for root_dir, sub_dir, files in os.walk(dir): # 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

    for file in files:

    if file.endswith(‘xlsx’):

    构造绝对路径

    file_name = os.path.join(root_dir, file)

    df = pd.read_excel(file_name)

    df_1 = list(pd.read_excel(file_name, nrows=1)) # 读取 excel 第一行数据并放进列表

    excel 第一行数据返回列表

    print(file_name)

    print(type(df_1))

    print(df_1)

    根据第一行列名获取每个文件中需要列的列索引,返回索引数值

    suo_yin_1 = df_1.index(“Billing Country”)

    suo_yin_2 = df_1.index(“Created at”)

    suo_yin_3 = df_1.index(“Updated at”)

    suo_yin_4 = df_1.index(“Paid Price”)

    suo_yin_5 = df_1.index(“Shipment Type Name”)

    suo_yin_6 = df_1.index(“Status”)

    读取文件内容 usecols=[1, 3, 4] 读取第 1,3,4 列

    df = pd.read_excel(file_name, usecols=[suo_yin_1, suo_yin_2, suo_yin_3, suo_yin_4, suo_yin_5, suo_yin_6]

    , sheet_name=‘data’)

    pf = pd.read_excel(‘xxx.xls’, usecols=[1, 3, 4], sheet_name=‘data’)

    print(pf)

    追加一列数据,将每个文件的名字追加进该文件的数据中,确定每条数据属于哪个文件

    excel_name = file.replace(".xlsx", “”) # 提取每个excel文件的名称,去掉.xlsx后缀

    df[“店铺”] = excel_name # 新建列名为“店铺”,列数据为excel文件名

    dfs.append(df) # 将新建店铺列追加进汇总excel中

    行合并

    df_concated = pd.concat(dfs)

    构造输出目录的绝对路径

    out_path = os.path.join(dir, ‘res.xlsx’)

    输出到excel表格中,并删除pandas默认的index列

    df_concated.to_excel(out_path, sheet_name=‘Sheet1’, index=None)

    调用并执行函数

    to_one_excel(r’C:\Users\Administrator\Desktop\ceshi\xlsx 文件’)

    展开全文
  • 前几天,小编遇见这么一个问题,手上有很多张表格,这些表格中都只有一个 sheet,需要把这些表汇总到一张表。 一张表中有多个 sheet,每一个 sheet 的名称是每张表格的文件名。 不懂 vba,当时手动合并的,花了一些...

    前言

    前几天,小编遇见这么一个问题,手上有很多张表格,这些表格中都只有一个 sheet,需要把这些表汇总到一张表。

    一张表中有多个 sheet,每一个 sheet 的名称是每张表格的文件名。

    不懂 vba,当时手动合并的,花了一些时间,如有 100 张表格的话,那样效率就太低了,于是弄了一个脚本来完成这个任务。

    数据说明

    小编随便找了一些数据,放在了 abc 文件夹下,abc 随便取的,只是一个保存数据的文件夹而已,在这个文件夹中只保存表格数据,其他的不要保存:

    然后需要把这些表格数据合并为同一张表格,里面有多个 sheet,每一个 sheet 的数据为每一张表的数据且命名为原始数据表的名称,脚本如下:

    这上面的代码很容易看懂,都有注释,先设置输出结果文件路径及名称,再获得数据源的所在的路径下的所有数据表的表名,循环读取每一个文件,设置 sheet 名字,设置为多个 sheet,最后保存。

    在这里小编得到是 result.xlsx 文件:

    打开查看结果,可以看到有多个 sheet,且每一张 sheet 的名称都为原始数据表的名称:

    到这里,这一个小需求就完成了。

    注意:自己测试的时候,表格第一列第一行不能为空,否则会报错。

    END

    读者交流群已建立,找到我备注 “交流”,即可获得加入我们~

    听说点 “在看” 的都变得更好看呐~

    关注关注小编呗小编给你分享爬虫,数据分析,可视化的内容噢

    扫一扫下方二维码即可关注我噢~

    -END-

    展开全文
  • 数据:N工作簿,每工作簿里又有M工作,每工作的同一位置Cells(2,16)有需要的数据,想讲这些数据汇总到一张新的表格。 新建一张“汇总.xlsm”,并打开,新建sub()过程; 依次打开工作簿; 源码如下: ...
  • 前几天遇见这么一个问题,手上有很多张表格,这些表格中都只有一个 sheet,需要把这些表汇总到一张表。 一张表中有多个 sheet,每一个 sheet 的名称是每张表格的文件名。 如果手动合并,往往需要花不少时间。如有 ...
  • excel中多表汇总

    2018-01-11 10:42:00
    excel中将中的结果汇总到一张表格里,而且汇总表格数据是随着其它表格数据变化面变化 其实就是函数sumif的使用,sumif函数的结构: sumif函数语法 sumif(range,criteria,[sum_range]) range必须项,...
  • 前几天,小编遇见这么一个问题,手上有很多张表格,这些表格中都只有一个 sheet,需要把这些表汇总到一张表。 一张表中有多个 sheet,每一个 sheet 的名称是每张表格的文件名。 不懂 vba,当时手动合并的,花了...
  • 怎么将下面工作薄中,多张工作链接一起,每张的格式是一样的,都有一个标题。 原工作 只需要简单的三步,我们来看下具体的操作步骤: 第一步、打开超级处理器菜单; 第二步、点击数据合并按钮,选择...
  • 需求在xx银行项目中遇到的一个需求,是将系统中的8余额下载指定的文件夹中,然后从文件夹中读取这8余额,将其合并为一张余额汇总表,在合并的时候要将组合名称重复的多行数据去重,并将其所对应的余额相加...
  • 在xx银行项目中遇到的一个需求,是将系统中的8余额下载指定的文件夹中,然后从文件夹中读取这8余额,将其合并为一张余额汇总表,在合并的时候要将组合名称重复的多行数据去重,并将其所对应的余额相加 ...
  • 远程数据采集工具

    2006-03-16 00:00:00
    但有的数据不是一个人能完整、准确录入,比如一张项目情况月进度统计,涉及各个部门、项目部,必须由底层人员录入各自数据,甚至同一行数据都要拆分为几段由不同的人员录入,然后汇总到中去;有时为了保证...
  • 前几天遇见这么一个问题,手上有很多张表格,这些表格中都只有一个 sheet,需要把这些表汇总到一张表。 一张表中有多个 sheet,每一个 sheet 的名称是每张表格的文件名。 如果手动合并,往往需要花不少时间。如有 ...
  • 一张表则是一个计数数组,第i个数组元素是上述第i个项的出现次 数。这些所有项的计数值的初始值都是0。 在读取购物篮时,我们检查购物篮中的每个项并将其名称转换为一个整数。然后,将该整数作为计数数组的下标...
  • 一张表则是一个计数数组,第i个数组元素是上述第i个项的出现次 数。这些所有项的计数值的初始值都是0。 在读取购物篮时,我们检查购物篮中的每个项并将其名称转换为一个整数。然后,将该整数作为计数数组的下标...
  • 整整5年的数据,一个年度一张表,一个地区一张表,各个部门各个项目的年度汇总,太数据要处理,要复制又要算总和……真的是要做到眼都瞎掉,手腕断掉! 作为顶尖的Hr,这个Excel插件你居然没用过?用上它事业开...
  • Excel新增工具集

    2011-12-20 09:30:27
    3、个工作中相同位置的行(列)集中同一:本工作簿中有若干格式相同的,为了便于观察各相同位置数据的变化,可以首先用鼠标选定要观察的区域,然后执行本命令,则各工作的同位置区域数据集中排列同一...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

多张表格数据汇总到一张表