Python之Excel读写

     在日常工作中,对Excel文件的读写比较多,如何使用Python读写excel文件就是我当前需要解决的问题。

     一般遇到问题我喜欢用自己的方式去解决,所以我没有首先去找三方库去解决这个问题。我首先去Microsoft去搜索诸如Manipulate Office之类的关键字,然后就看到了这个:How to: Manipulate Office Open XML Formats Documents,Office Open XML Formats是从office2007开始支持的一种office文档的格式,我们可以这样查看一个office文档,将我们所要操作的文档test.xlsx之类的重命名为test.xlsx.zip,然后打开zip文件,就会发现如下的文件布局:

open office xml

    当然,word文件会具有类似的格式,这里不再贴图!

    貌似问题简化了很多,我可以通过解析xml的方式去解析我们的excel文件,然后进行相应的操作,这个方法会有个弊端就是对office2007之前的文件无效。这个问题留作以后我们的实现目标吧,毕竟是个比较复杂的过程,工作量较大!

--------------------------------------------------------------------------------------------------------------------------------------------

    xlrd和xlwt模块用于在python中对excel进行读写操作,下载戳这里:xlrd下载xlwt下载。安装方法很简单,解压文件,然后cmd到当前目录,运行:

python setup.py install

    安装完成后我们就可以使用他们了:

Sample1(excel读操作):

import xlrd
data = xlrd.open_workbook('E:/test.xls')
for sheet in data.sheets():
    print sheet.name, sheet.nrows, sheet.ncols, sheet.row_values(0)

Sample2(excel写操作):

import xlwt

class ExcelReporter():
    rowIndex = 0
    def __init__(self):
        self.rowIndex = 0
    
    def SaveReport(self, vm_test_results, report_file):
        wb = xlwt.Workbook()
        sheet = wb.add_sheet('TestResults')
        self.__WriteRow(sheet, ['Case', 'Status', 'Install', 'Launch', 'Function', 'Uninstall', 'Process Crash', 'System Hang', 'System Crash', 'Error Messages'])
        
        for vm_result in vm_test_results:
            self.__WriteVMResult(sheet, vm_result)

        try:
            wb.save(report_file)
        except Exception as ex:
            raise ex
    
    def __WriteRow(self, sheet, row):
        sheet.write(self.rowIndex, 0, row)
        self.rowIndex += 1
    
    def __WriteCols(self, sheet, items):
        for colIndex in range(0, len(items)):
            sheet.write(self.rowIndex, colIndex, items[colIndex])
        self.rowIndex += 1
        
    def __WriteVMResult(self, sheet, vm_result):
        self.rowIndex += 1
        self.__WriteRow(sheet, vm_result.vm_alias)
        if vm_result.test_aborted:
            self.__WriteRow(sheet, 'Testing for this vm was aborted before running any case. Please check engine log for details')
        elif vm_result.test_exception:
            self.__WriteRow(sheet, 'Exception occur when testing for this vm. Please check engine log for details')
        else:
            for case_result in vm_result.cases_results:
                self.__WriteCaseResult(sheet, case_result)
        
    def __WriteCaseResult(self, sheet, case_result):
        items = [''] * 10
        items[0] = case_result.case_name
        if case_result.case_passed == True:
            items[1] = 'PASS'
        else:
            items[1] = 'FAIL'
        
        if case_result.install_script_success == False or case_result.install_script_completed == False:
            ...
        ...
    ...

PS:上述代码部分方法代码并未给出!

再补充贴个设置Excel表格中字体等的小函数:

def __SetErrorStyle(self):
        ErrorFont = xlwt.Font()
        ErrorFont.name = 'Calibri'
        ErrorFont.height = 240      # size 12
        ErrorFont.bold = True
        ErrorFont.italic = True
        ErrorFont.colour_index = 2  # red
        
        style = xlwt.XFStyle()
        style.font = ErrorFont
        
        return style

最后贴个我用xlwt生成的测试报告的截图:

Report

谢谢阅读!

posted @ 2013-05-15 13:54  薛定谔の喵  阅读(1256)  评论(0编辑  收藏  举报