经历过的打表工具从c++、C#,再到Python,算下来还是Python方便些。一天即可上手开发,非常适合快速迭代中的各种小工具开发。 Python开源的第三方库很多,涉及excel方面的也有好几个xlrdxlwtxlutils 等等。

1. xlrd\xlwt

xlrd 主要实现excel文件的读操作,xlwt主要负责写操作。xlutils 是将二者融合在一起。

安装

现在之后可以通过源码的形式进行安装,也可以通过exe的形式安装。对于只用报表格小工具的同学,可以通过批处理进行。



批处理代码:

msiexec /package python-2.7.10.64bit.msi /quiet
cd .\xlrd-0.9.4\
c:\Python27\python.exe setup.py install
cd ..\.\xlwt-1.0.0\
c:\Python27\python.exe setup.py install
cd ..\.\protobuf-2.6.1\python\
c:\Python27\python.exe setup.py install
pause

2. 操作实现

表格构成

  1. Workbook :一个完整的excel表格
  2. Worksheet : 表格中一个sheet
  3. Cell : 表中一个单元格
读操作

流程:读取book,获取sheet,然后根据col\row获得对应的数值,具体的API的可以参考:

http://xlrd.readthedocs.io/en/latest/api.html

实例(无容错处理):

#打开profiles.xls
self.book = xlrd.open_workbook(from_this_dir('profiles.xls'), formatting_info=True) #通过名字获得
self.sheet = self.book.sheet_by_name('PROFILEDEF') #通过索引获得
self.sheet = data.sheets()[0]
self.sheet = data.sheet_by_index(0) #通过索引顺序获取 #获取整行和整列的值(数组)
self.sheet.row_values(i)
self.sheet.col_values(i) #获取元素
cell = self.sheet.cell(1, 1)
写操作

流程:创建一个book,添加一个sheet并向对应Cell中添加数据。具体Api可以参

考:http://xlwt.readthedocs.io/en/latest/api.html

案例:

#创建book
book = xlwt.Workbook()
#添加sheet
sheet = book.add_sheet(sheet_name)
#写数据
sheet.write(0, 0, label = 'Row 0, Column 0 Value')
#保存book
book.save(file_name)

3.实现表格合并工具

#加载表格
class SheetLoader:
# Excel 表加载类,用于加载Excel表 def __init__(self):
# 构造函数
self.file_path = ''
self.sheet_name = '' self.workbook = None
self.sheet = None self.num_rows = 0
self.num_cols = 0 def load(self, file_path, sheet_name):
# 解析Excel表格,成功返回True,否则返回False self.file_path = file_path
self.sheet_name = sheet_name # 打开Excel文件
try:
self.workbook = xlrd.open_workbook(self.file_path)
except BaseException, e:
print 'Error: Load excel file failed', self.file_path
sys.exit(-1) # 打开Excel表格
try:
self.sheet = self.workbook.sheet_by_name(self.sheet_name)
except BaseException, e:
print 'Load excel sheet failed', self.sheet_name
sys.exit(-1) # 行数和列数
self.num_rows = len(self.sheet.col_values(0))
self.num_cols = len(self.sheet.row_values(0)) print 'Load', self.file_path, self.sheet_name, self.num_rows, self.num_cols return True class SheetCombiner:
'''
表格合并工具 用于将多个表格合并成一个表格,所有表格必须有相同的行数
''' def __init__(self):
# 构造函数
self.loaders = []
self.num_cols = 0 def add_sheet(self, file_path, sheet_name):
'''
添加表格 :param file_path: Excel文件路径
:param sheet_name: Excel表格名称
:return:
''' loader = SheetLoader()
if not loader.load(file_path, sheet_name):
print 'Error: Load excel file failed', self.file_path
sys.exit(-1) if self.num_cols == 0:
self.num_cols = loader.get_num_cols()
else:
# 检查表的列数是否一致
if self.num_cols != loader.get_num_cols():
print 'Error: not same cols', loader.get_sheet_name(), self.num_cols, loader.get_num_cols()
sys.exit(-1) # 检查表的表头是否一致
first = self.loaders[0]
for r in range(3):
for c in range(self.num_cols):
if loader.cell_value(r, c) != first.cell_value(r, c):
print 'Error: not same header', loader.get_sheet_name(), r, c
sys.exit(-1) self.loaders.append(loader) def combine(self, file_path, sheet_name):
'''
合并表格 :param file_path: 合并的Excel文件名称
:param sheet_name: 合并的Excel表格名称
:return:
''' if len(self.loaders) == 0:
return workbook = xlwt.Workbook()
sheet = workbook.add_sheet(sheet_name) loader = self.loaders[0]
for row in range(4):
for col in range(self.num_cols):
sheet.write(row, col, loader.cell_value(row, col)) row = 4
for loader in self.loaders:
for r in range(4, loader.get_num_rows()):
for c in range(self.num_cols):
sheet.write(row, c, loader.cell_value(r, c))
row += 1 workbook.save(file_path)

实现表格合并:

combiner = SheetCombiner()
combiner.add_sheet('../dev/data_xls/achievement_data.xls', 'ACHIEVEMENT_DATA')
combiner.add_sheet('../dev/data_xls/task_data.xls', 'TASK_DATA')
combiner.combine('./output.xls', 'OUTPUT')

4. 结论

相对于lua这种脚本语言,python的功能确实强悍很多,尤其是众多的第三方库。以后可以愉快的考虑用python尝试一下各种小工具了。

参考:http://www.python-excel.org/

Python实现Excel转换工具小结的更多相关文章

  1. Java对象和Excel转换工具XXL-EXCEL

    <Java对象和Excel转换工具XXL-EXCEL> 一.简介 1.1 概述 XXL-EXCEL 是一个灵活的Java对象和Excel文档相互转换的工具. 一行代码完成Java对象和Ex ...

  2. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  3. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

  4. python实现excel转换成pdf

    1.安装 需要安装pywin32包,以实现对Office文件的操作,可以批量转换为pdf文件.支持 doc, docx, ppt, pptx, xls, xlsx 等格式. pip install p ...

  5. python 将excel转换成字典,并且将字典写到txt文件里

    # -*- coding: utf-8 -*- #python2.7 import sys reload(sys) sys.setdefaultencoding('utf-8') from pyexc ...

  6. C# Excel转换成Json工具(含源码)

    可执行版本下载:https://github.com/neil3d/excel2json/releases 完整项目源代码下载:https://github.com/neil3d/excel2json ...

  7. Python操作excel工具

    python操作excel的工具类有很多,下面举几个常见的工具类: 一. 1.xlrd 只能读取excel操作,支持xls和xlsx两种格式的 2.xlwt 只能写入excel操作,只支持 xls格式 ...

  8. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  9. 【Python】Python实现Excel用例直接导入testlink-UI界面小工具

    1.写在前面 testlink上传用例一种方法是excel转换为xml,然后再用xml上传,还有一种是调用api进行上传.最开始写了个转换工具,是将excel转换为xml,然后在testlink里上传 ...

随机推荐

  1. 【Java基本功】一文了解Java中继承、封装、多态的细节

    本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...

  2. Docz 用 MDX 写 React UI 组件文档

    Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...

  3. TCP/IP 笔记 - 用户数据报协议和IP分片

    关于本章中的IP分片部分,参考第五章IP分片头部知识点.需要注意的是,TCP有超时重传,UDP的超时重传则依赖上层应用程序实现. 用户数据报协议(UDP) UDP是一个简单的面向无连接.不可靠的数据报 ...

  4. Golang 协程调度

    一.线程模型 N:1模型,N个用户空间线程在1个内核空间线程上运行.优势是上下文切换非常快但是无法利用多核系统的优点. 1:1模型,1个内核空间线程运行一个用户空间线程.这种充分利用了多核系统的优势但 ...

  5. SQL优化原则(转)

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  6. Nginx反代Mogilefs分布式储存示例

    一.分布式存储系统简介 随着信息技术不断的发展,给我们带来便利的同时,不断增加的数据量级.信息之间的连接关联越来越复杂.数据访问的并发量日益增加对I/O的要求越来越高.数据类型越来越复杂等难题也成为信 ...

  7. HAProxy(二):HAProxy的ACL规则实现智能负载均衡详解与示例

    一.HAProxy的ACL的功能 ACL(Access Control List)访问控制列表,HAProxy中的ACL的匹配条件和控制条件有许多种,功能很强大,可以通过源地址.源端口.目标地址.目标 ...

  8. .10-浅析webpack源码之graceful-fs模块

    在cachedInput.output.watch三大文件系统中,output非常简单,没有必要讲,其余两个模块依赖于input模块,而input主要是引用了graceful-fs的部分API,所以这 ...

  9. oracle创建用户、创建表空间、授权、建表

    2.然后我就可以来创建用户了. create user zzg identified by zzg123; 3.创建好用户我们接着就可以修改用户的密码. alter user zzg identifi ...

  10. MVC 【ASPX视图引擎】

    新建项目----ASP.NET MVC 4 Web 应用程序------选择模板(空).视图引擎(ASPX) 1.认识控制器Controller using System; using System. ...