zoukankan      html  css  js  c++  java
  • 使用python合并excel

    当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法好啊。短短100行代码解决,无论几十张,几百张表,瞬间搞定。

    首先需要安装两个模块:xlrd(读取excel),xlsxwriter(写入excel)

    pip install xlrd
    pip install xlsxwriter

    安装好以后,直接上代码。如下:

     1 # -*- coding: UTF-8 -*-
     2 # Filename : Merge_excel.py
     3 # author by : Awrrays
     4 
     5 import xlrd,xlsxwriter
     6 
     7 # 打开表格
     8 def openxls(file):
     9     try:
    10         fx = xlrd.open_workbook(file)
    11         return fx
    12     except Exception as e:
    13         print('读取文件错误,错误为:{0}'.format(e))
    14 
    15 # 获取所有sheet
    16 def getsheets(fx):
    17     return fx.sheets()
    18 
    19 # 获取某个sheet的行数
    20 def getrows(fx,sheet_num):
    21     table = fx.sheets()[sheet_num]
    22     rows = table.nrows
    23     return rows
    24 
    25 # 获取某个文件的内容并返回所有行的内容
    26 def getdump(fl,sheet_num):
    27     fx = openxls(fl)
    28     table = fx.sheet_by_name(sheet_name[sheet_num])
    29     row_num = getrows(fx,sheet_num)
    30     row_len = len(rows)
    31     for row in range(0,row_num):
    32         data = table.row_values(row)
    33         rows.append(data)
    34     dump.append(rows[row_len:])
    35     return dump
    36 # 定义要合并的所有文件
    37 allxls = ["E:/test/test1.xlsx",'E:/test/test2.xlsx','E:/test/test3.xlsx']
    38 # 定义合并后的文件
    39 endxls = "E:/test/test.xlsx"
    40 
    41 # 存储一个sheet的结果
    42 sheet_value = []
    43 # 存储各sheet的名称
    44 sheet_name = []
    45 # 存储一行内容
    46 rows = []
    47 # 存储所有读取的结果
    48 dump = []
    49 
    50 # 读取第一个待读文件,获取sheet数
    51 fx = openxls(allxls[0])
    52 sheets = getsheets(fx)
    53 x = 0
    54 for sheet in sheets:
    55     sheet_name.append(sheet.name)
    56     sheet_value.append([])
    57     x += 1
    58 
    59 # 依次读取各sheet的内容
    60 for sheet_num in range(0,x):
    61     # 依次获取每个文件当前sheet的内容
    62     for fl in allxls:
    63         print('正在读取文件{0}的第{1}个标签....'.format(fl,sheet_num))
    64         dump = getdump(fl,sheet_num)
    65     sheet_value[sheet_num].append(dump)
    66 
    67 file_num = len(allxls)
    68 endvlue = []
    69 
    70 # 获取各sheet的内容
    71 def get_sheet_value(k):
    72     for z in range(k,k+file_num):
    73         endvlue.append(sheet_value[0][0][z])
    74     return endvlue
    75 
    76 # 打开合并完成后的文件
    77 wb = xlsxwriter.Workbook(endxls)
    78 # 创建一个工作表
    79 ws = wb.add_worksheet()
    80 polit = 0
    81 line_num = 0
    82 # 依次遍历每个sheet中的内容
    83 for s in range(0,x * file_num,file_num):
    84     file_value = get_sheet_value(s)
    85     table_value = file_value[polit:]
    86     # 将每一个sheet中的内容写入新文件
    87     for a in range(0,len(table_value)):
    88         # 将sheet行写入到新文件
    89         for b in range(0,len(table_value[0])):
    90             # 将每一行的内容写入新文件
    91             for c in range(0,len(table_value[0][0])):
    92                 data = table_value[a][b][c]
    93                 ws.write(line_num,c,data)
    94             line_num += 1
    95     # 设置分隔点
    96     polit = len(file_value)
    97 wb.close()

    ok,最后结果:

  • 相关阅读:
    openstack-1基础环境准备
    ELK补充之Filebeat
    ELK补充之logstash
    ELK
    dubbo
    zokeeper+kafka
    rabbitmq
    jenkins补充-编写自动化脚本实现devops 流水线和回滚等操作
    sonar
    python连接数据库之(连接MySQL)
  • 原文地址:https://www.cnblogs.com/awrrays/p/11379187.html
Copyright © 2011-2022 走看看