博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现Excel转换工具小结
阅读量:6758 次
发布时间:2019-06-26

本文共 4429 字,大约阅读时间需要 14 分钟。

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

1. xlrd\xlwt

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

安装

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

mark
批处理代码:

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

2. 操作实现

表格构成

mark

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

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

实例(无容错处理):

#打开profiles.xlsself.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可以参

考:
案例:

#创建bookbook = xlwt.Workbook()#添加sheetsheet = book.add_sheet(sheet_name)#写数据sheet.write(0, 0, label = 'Row 0, Column 0 Value')#保存bookbook.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 Trueclass 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://zyweo.baihongyu.com/

你可能感兴趣的文章
兼容IE,Firefox,CSS3 opacity透明度
查看>>
读取Hive中所有表的表结构,并在新Hive库中创建表,索引等
查看>>
XenServer部署系列之02——系统安装及许可
查看>>
linux下FTP服务器搭建
查看>>
XenServer pool 移除server 设置master
查看>>
python调用不同目录下的方法
查看>>
程序的查询 ps - 笔记1
查看>>
Conversion to Dalvik format failed with error 1的又一种情形
查看>>
nodejs抓取数据二(列表解析)
查看>>
TextView中实现可点击链接的显示
查看>>
HAOI 树上操作
查看>>
深刻理解Python中的元类(metaclass)以及元类实现单例模式
查看>>
java随机生成n个不相同的整数
查看>>
DIV+CSS基础
查看>>
使用JS完成首页定时弹出广告图片
查看>>
codeforces 500c New Year Book Reading 【思维】
查看>>
Auto reloading enabled
查看>>
GitHub的使用方法
查看>>
面向对象
查看>>
首次晒出自己的工作台
查看>>