最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析。

表格内涉及到合并的单元格,不同表格表头位置有偏差等问题。目标是将所有表格内容相同表头内容统计到一个表内。由于Excel表格内容数据量巨大,如果使用人力的手段,工作量巨大,并且容易出错(预估工作量3天)。所以决定使用Python对Excel进行自动处理,实现一键导出目标Excel的目的。

大致步骤:Python学习交流群:1004391443

1.安装Python3,pip工具环境

2.安装xlrd和xlwt

3.读取所有源Excel文件

4.将读取到的Excel信息组织到新的Excel对象中

5.数据缓存和分析

6.向新Excel对象中追加分析结果

7.将新Excel对象保存为目标输出文件(最终想要的文件)

1.对于Python环境的安装本文不做说明。

2.安装Python扩展包有不同的方式,这里使用pip命令安装xlrd和xlwt。

在Windows下,打开命令提示符(控制台),cd python的安装路径下Scripts文件夹下(在这里有pip命令执行工具)。或者将该路径添加到系统环境变量。

xlrd:读取Excel的扩展包

执行:pip install xlrd

xlwt:写入Excel的扩展包

执行:pip install xlwt

随便写一个py文件写入import xlrd, xlwt 执行该文件不出错说明安装成功。

或者打开python自带的编辑器进行输入测试。

3.具体代码如下

# -*- coding: utf-8 -*-import xlrdimport xlwtimport sys

def read(file_list):

# 创建新的workbook out_work_book = xlwt.Workbook(encoding = 'utf-8') # 为了将多个文件的相同表头的sheet和并到一个sheet内,定义新sheet写入的行号位置 out_work_book_rows = [0,0]

# 取得传入的文件列表 (第一个参数为脚本名字) for file_name in file_list[1:]: # 打开文件 workbook = xlrd.open_workbook(file_name) # 取得当前文档的sheet列表 sheet_names = workbook.sheet_names()

for sheet_idx in range(len(sheet_names)): sheet_name = sheet_names[sheet_idx] # sheet = workbook.sheet_by_index(sheet_idx) sheet = workbook.sheet_by_name(sheet_name)

# sheet.row_values(n) 获取整行数据 # sheet.col_values(n) 获取整列数据

# 获取行数 rows_count = sheet.nrows # 获取列数 cols_count = sheet.ncols # 存储写入的列数 write_col_count

# 创建新的sheet if len(out_work_book_sheet) <= sheet_idx: out_work_book_sheet[sheet_idx] = out_work_book.add_sheet('sheet'+sheet_idx)

# 写入sheet for curr_col_num in range(cols_count) # 当前列的内容 col = sheet.col_values(curr_col_num) # 遍历当前列的所有选项 for index in range(len(col)) # 当前列第index的内容 value = col[index] # 在写入的sheet的行号上,加入上一个表写到的位置行号,继续向后追加内容 out_work_book_sheet[sheet_idx].write(out_work_book_rows[sheet_idx] + index, write_col_count, value) write_col_count++ out_work_book_rows[sheet_idx] += cols_count # 输出目标文件 out_work_book.save('out.xls')if __name__ == "__main__": read(sys.argv)

4.针对合并的单元格,上述代码会出现合并单元格只有一个格子有内容其余为空的情况。这种情形,现将当前sheet表格内所有合并单元格数据保存下来,当遇到属于合并单元格的部分,则默认选取该合并单元格的第一个格子的数值即可。代码如下:

def get_merged_cells_value(sheet, row_index, col_index):

# 获得当前sheet的所有合并单元格数据 merged = sheet.merged_cells # 判断给定的单元格,是否属于合并单元格,如果是合并单元格,就返回合并单元格的内容 for (rlow, rhigh, clow, chigh) in merged: if (row_index >= rlow and row_index < rhigh): if (col_index >= clow and col_index < chigh): cell_value = sheet.cell_value(rlow, clow) return cell_value return None

5.数据缓存可以利用python中的容器,和对象结构,将Excel中的数据对象化,在读取时候进行实例化然后进行保存。在需要进行数据分析的时候利用。

6.在遇到特殊的表格格式的时候,读取的内容可能在转存的时候出现类型错误,导致无法识别。例如时间类型,正确显示需要按特定格式进行读取并且转换。

表格类型说明: table.ctype

0 empty

1 string

2 number

3 date

4 boolean

5 error

代码如下:

from datetime import datetime,date

def get_merged_cells_value(workbook, sheet, row_index, col_index):

# 获得当前sheet的所有合并单元格数据 merged = sheet.merged_cells # 判断给定的单元格,是否属于合并单元格,如果是合并单元格,就返回合并单元格的内容 for (rlow, rhigh, clow, chigh) in merged: if (row_index >= rlow and row_index < rhigh): if (col_index >= clow and col_index < chigh):

if sheet.cell(rlow, clow).ctype == 3: date_value = xlrd.xldate_as_tuple(sheet.cell(rlow, clow), workbook.datemode) # 转换显示格式为2019/05/05 cell_value = date(*date_value[:3]).strftime('%Y/%m/%d') else: cell_value = sheet.cell_value(rlow, clow) return cell_value return None

7.最终,我们写一个windows下的bat批处理文件或者在linux下写一个shell,将文档名字作为参数传入执行即可。

到此我利用程序完成了几天的工作,还可以在以后相同的使用环境下更快速的完成工作。

相信大家如果有一些编程基础,完全可以通过上述内容,学会使用python处理巨量Excel数据。

标签:index,单元格,sheet,Python,编程,Excel,value,cell

如何运行python代码将各个表格的信息集合在一起_如何利用Python编程批量处理Excel来提高日常工作效率!...相关推荐

  1. 如何利用Python编程批量处理Excel来提高日常工作效率!

    最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析. 表格内涉及到合并的单元格,不同表格表头位置有偏差等问题.目标是将所有表格内容相同 ...

  2. python识别鼠标在excel中选中的区域_[Excel技巧] 提高你工作效率的9个Excel技巧,职场新人必备...

    小伙伴们,今天给大家送上五一礼物:9个提高工作效率的Excel技巧!赶紧收藏起来吧. 快速合并两列单元格内容 将Excel表格B列和D列内容合并至H列,只需要在第一个对应单元格输入B.D两列对应单元格 ...

  3. python运算结果是fasls的代码_《利用Python进行数据分析》--整理学习

    第2章(代码示例) path='example.txt' open(path).readline()#只读取文件的第一行.用print函数输出. import json #内置第三方模块将JSON字符 ...

  4. linux下通过Python代码实现获取硬件接口信息

    linux下通过Python代码实现获取硬件接口信息 1.CPU架构 Python中,platform模块给提供了很多方法去获取操作系统的信息. touch cpu.py vi cpu.py #编辑内 ...

  5. python代码通过日期获得星期信息(根据日期获取星期day of the week)

    python代码通过日期获得星期信息(根据日期获取星期day of the week) # 通过具体日期获得日期所在的星期信息 # Python program to Find day of # th ...

  6. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略

    Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...

  7. Python副业赚钱:提高你工作效率的同时,也能提高你的收入!

    不知道你有没有过这样的感受:生活的绝望并不是一下子泰山崩于前,而是一点点的小事累积起来,慢慢侵蚀你的信心. 我就经历过这样的时候. 一个人在外打拼,月薪5K,房租1500,存款0: 每天精打细算,连5 ...

  8. python代码画word表格(python+pycharm)

    问题:画一个这样的word表格: 注意: 1.只画表头,如果需要你也可以全部内容都从代码写进去,但是没意义: 2.一般都是画好word表格的表头,然后从execl文档中读取具体的内容. 最终实现利用p ...

  9. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  10. 帮写python代码_10个工具,帮你写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1. ...

最新文章

  1. 解决nginx负载均衡的session共享问题
  2. ubuntu系统怎么安装ssh服务器配置,如何在Ubuntu 20.04 LTS上安装SSH服务器
  3. 【使用CMake组织C++工程】2:CMake 常用命令和变量
  4. python读取文件读不出来-python文件读取失败怎么处理
  5. UA MATH563 概率论的数学基础 中心极限定理7 Kolmogorov extension theorem及其扩展
  6. java的标量和聚合量_第5节:Java基础 - 必知必会(下)
  7. C# 3.0 New Language Features (Part 2)
  8. Redhat Mongodb学习笔记
  9. mysql8添加索引_MySQL8.0新特性-新的索引方式
  10. java sequencefile_Hadoop SequenceFile数据结构介绍及读写
  11. N - C语言实验——各位数字之和排序
  12. win8系统下用VMware虚拟机启动Windows Server 2008报错问题解决方法
  13. c++异常机制(转载)
  14. 技嘉服务器准系统epyc,技嘉为AMD霄龙处理器推出ATX主板 针对AMD EPYC
  15. 三项式与组合数(lucas板子)
  16. 谷歌阻止苹果,谁来阻止谷歌
  17. SpringBoot模块创建依赖报错:
  18. Office365 - 修改用户密码Teams无法登陆的解决方案
  19. 因特尔g41显卡 linux驱动,下载:Intel G41/G43/G45显卡驱动15.13版
  20. Mogafx欧元每周展望

热门文章

  1. 安装最新LAMP环境(CentOS7+PHP7.1.5+Mysql5.7)
  2. 【Qt开发】关于QWSServer
  3. redis 备份与恢复
  4. jsonp实现原理详细介绍
  5. matlab ifft频率分辨率,matlab中关于FFT的使用(理解频率分辨率、补零问题)
  6. mysql truncate耗时_线上MySQL 32G大小的表truncate所消耗的时间为2分钟,快还是慢?...
  7. java并发-独占锁与共享锁
  8. Spring框架入门程序:获取Bean的三种方式
  9. 深度优先遍历(Depth First Search)
  10. 深入理解Nacos源码注册中心之服务发现(订阅拉取)