zoukankan      html  css  js  c++  java
  • python-将多个表格的信息合并到一个表格中

    1、环境

    代码运行环境:python3.7

    相关的库:xlrd、xlwt

    2、目的

    通过xlrd库读取各个表格的数据,通过xlwt库将读取到的数据写入到一个表格中。

    3、实现

    在工程目录下,有一个test目录,存放的是待合并的表格,输出表格为merge.xls,就输出在当前工程目录下。每个合并的表格中我只需要"body"这个sheet,而且这个sheet中的数据格式都是按照下面的格式存放的。

     实现的代码如下:

     1 # encoding: utf-8
     2 
     3 '''
     4 本代码的作用是将多个表格合并为一个表格。
     5 '''
     6 
     7 import os
     8 import xlrd
     9 import xlwt
    10 import logging
    11 
    12 # 设置logging.basicConfig()方法的参数和配置logging.basicConfig函数
    13 FORMAT = '[%(funcName)s: %(lineno)d]: %(message)s'
    14 LEVEL = logging.INFO
    15 logging.basicConfig(level = LEVEL, format=FORMAT)
    16 
    17 excel_content = []
    18 output_file = './merge.xls'
    19 
    20 # 打开表格,获取信息
    21 def get_obj_list(dir_name):
    22     filelist = os.listdir(dir_name)
    23     for item in filelist :
    24         item = dir_name + item
    25         if os.path.isfile(item) and (item[-4:] == '.xls' or item[-5:] == '.xlsx' or item[-5:] == '.xlsm'):
    26             if item.find("$") != -1:
    27                 continue
    28             merge_excel(item)
    29         elif os.path.isdir(item):    
    30             item = item + '/'
    31             get_obj_list(item)
    32 
    33 
    34 # 获取单个表格的信息
    35 def merge_excel(excelName):
    36     excelfd = xlrd.open_workbook(excelName)
    37     for sheet in excelfd.sheet_names():
    38         if sheet == 'body':
    39             print (excelName)
    40             sheet_content = excelfd.sheet_by_name(sheet)
    41             header = sheet_content.cell(0, 0).value
    42             if header == u'高校名称':   # 去掉标题行
    43                 row = 1
    44             else:
    45                 row = 0
    46             while row < sheet_content.nrows:
    47                 college    = sheet_content.cell(row, 0).value
    48                 institute  = sheet_content.cell(row, 1).value
    49                 built_time = sheet_content.cell(row, 2).value
    50                 overview   = sheet_content.cell(row, 3).value
    51                 item = [college, institute, built_time, overview]
    52                 excel_content.append(item)
    53                 row += 1
    54 
    55 
    56 # 将获取到的表格信息保存到一个表格中
    57 def save_info():
    58     workbook = xlwt.Workbook(encoding = 'ascii')
    59     worksheet = workbook.add_sheet('merge_info')
    60     style = xlwt.XFStyle() # 初始化样式
    61     font = xlwt.Font() # 为样式创建字体
    62     font.name = 'Times New Roman' 
    63     font.bold = True # 黑体
    64     font.underline = True # 下划线
    65     font.italic = True # 斜体字
    66     style.font = font # 设定样式
    67     worksheet.write(0, 0, '高校名称')
    68     worksheet.write(0, 1, '学院名称')
    69     worksheet.write(0, 2, '成立时间')
    70     worksheet.write(0, 3, '人工智能学院、人工智能研究院建设情况')
    71 
    72     for i, item in enumerate(excel_content):
    73         for j in range(4):  #多添加一列(序号)
    74             worksheet.write(i+1, j, item[j])
    75     workbook.save(output_file) # 保存文件
    76         
    77 
    78 if __name__ == "__main__":
    79 
    80     if os.path.exists(output_file):
    81         os.remove(output_file)
    82 
    83     get_obj_list('./test/')
    84     save_info()

    4、输出结果

    这是我手动调整过表格格式的结果。至此,需要实现的功能都实现了。

  • 相关阅读:
    关于SQLServer数据库中字段值为NULL,取出来该字段放在DataTable中,判断datatable中该字段值是否为NULL的三种方法
    关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题
    使用再生龙对ubuntu16.04系统完全备份与还原
    mysql数据库操作指令汇总
    ubuntu安装supervisor以及使用supervisor启动.net core进程
    c#小数取整
    nuget.server搭建及实际测试
    mysql主从同步+mycat读写分离+.NET程序连接mycat代理
    EasyNVR-流媒体服务详解
    Js实现子窗体给父窗体的元素赋值
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12632227.html
Copyright © 2011-2022 走看看