文档章节

Python对excel写入数据操作实例代码(改进无法合并最后一组数据的问题)

henni_719
 henni_719
发布于 2017/07/21 08:53
字数 707
阅读 4
收藏 0
#coding=utf8
'''
把buffer中的信息,写入到excel中。
并按照要求,构造表格样式
'''
#导入readCSV模块,用来获取buffer数据
from readCSV import readCSV
from readConfig import Config
#导入写excel的操作库
import xlwt
class GenTestCase(object):
    def __init__(self,configObj=Config()):
        try:
            
            #创建一个readCSV对象
            self.dataInfor=readCSV(configObj)
            #创建工作薄
            self.wkbook=xlwt.Workbook()
            #创建表:“requirement”
            self.dataSheet=self.wkbook.add_sheet("requirement")
            #把数据按 按照相应格式写入excel表中
            self.writeDataToExcel()
            #保存文件
            self.savaExcel()
        except Exception,e:
            print "GenTestCase init error:",e
        
    def writeDataToExcel(self):
        try:
            #埋点测试用例包含的相关属性,即表头
            firstLine=[u"埋点事件",u"页面",u"serviceId",u"属性名", u"属性值",u"属性信息",u"埋点规则",u"版本",u"IOS开发",u"安卓开发",u"创建时间",u"测试人员",u"测试状态"]
            #在末尾添加长度和firstLine长度相同的list表
            #该list作用是为了能比较到最后一个事件的数据
            endLine=[] 
            #在表的起始行写入表头数据
            try:
                for index in range(len(firstLine)):
                    self.dataSheet.write(0,index,firstLine[index])
                    endLine.append("")
            except Exception,e:
                print "Creat Head Error:",e
                
            #把csv中读取的数据赋给变量dataBody  
            dataBody=self.dataInfor.buffer
            dataBody.append(endLine)   
            #设置个函数,用来记录要合并的起始行
            currentrow=1
            #对数据进行循环取值,由于第一行的数据不是需要的数据
            #所以从第二个元素开始
            try:
                for rowNum in  range(1,len(dataBody)):
                    #对于每个子list中的值,依次写入相关单元格
                    for index in range(len(dataBody[rowNum])):
                        #判断行是否大于1,为以下比较创建条件
                        if rowNum>1:
                            #把数据的当前行的元素与上一行元素作比较
                            #如果不相等执行if语句
                            try:
                                if dataBody[rowNum-1][0]!=dataBody[rowNum][0] :
                                    print currentrow,rowNum
                                    #由于存在特殊情况,当前行号要为1
                                    #针对特定的数据规则从和并前三行和后七行
                                    if currentrow==1:
                                        for cols in range(3):
                                            #获取当前在合并单元格要保存的值
                                            cellValue=dataBody[currentrow][cols]
                                            #对单元格的值进行解码
                                            cellValue=cellValue.decode("gbk")
                                            #对单元格字符串进行加u
                                            #用来解决UnicodeDecodeError
                                            data=u"%s"  %(cellValue)
                                            #合并单元格并写入数据
                                            self.dataSheet.write_merge(currentrow,rowNum-1,cols,cols,data)
                                            
                                        for cols in range(6,13):
                                            cellValue=dataBody[currentrow][cols]
                                            cellValue=cellValue.decode("gbk")
                                            data=u"%s"  %(cellValue)
                                            self.dataSheet.write_merge(currentrow,rowNum-1,cols,cols,data)
                                    else:   
                                        for cols in range(3):
                                            cellValue=dataBody[currentrow][cols]
                                            cellValue=cellValue.decode("gbk")
                                            data=u"%s"  %(cellValue)
                                            self.dataSheet.write_merge(currentrow-1,rowNum-1,cols,cols,data)
                                        for cols in range(6,13):
                                            cellValue=dataBody[currentrow][cols]
                                            cellValue=cellValue.decode("gbk")
                                            data=u"%s"  %(cellValue)
                                            self.dataSheet.write_merge(currentrow-1,rowNum-1,cols,cols,data)                                           
                                    currentrow=rowNum+1                         
                                break
                            except Exception,e:
                                print "Merage cell Error:",e
                    
                    for cols in range(3,6):              
                        cellValue=dataBody[rowNum][cols]
                        cellValue=cellValue.decode("gbk")
                        data=u"%s"  %(cellValue)
                        self.dataSheet.write(rowNum,cols,data)
            except Exception,e:
                print "Write Data Error:",e
        except Exception,e:
            print "Write Data TO Excel Error:",e
    
    def savaExcel(self):
        try:
            savePath=self.dataInfor.fmObj.RequmentPath()
            self.wkbook.save(savePath)
        except Exception,e:
            print "Save Excel Error:",e
                    
    
    
                  
        
def test():
    GenTestCase()
    
if __name__=="__main__":
    test()

© 著作权归作者所有

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
python操作excel表格(xlrd/xlwt)

python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel. python读excel——xlrd 这个...

_周小董
2018/05/24
0
0
Python处理Excel数据

前段时间做了个小项目,帮个海洋系的教授做了个数据处理的软件。基本的功能很简单,就是对Excel里面的一些数据进行过滤,统计,对多个表的内容进行合并等。之前没有处理Excel数据的经验,甚至...

Lwxxx
2012/08/01
1K
0
pandas指南:做更高效的数据科学家

摘要:Python是开源的,所以有很多开源固有的问题。如果你是Python新手,很难知道针对特定任务的包哪个是最好的。你需要有经验的人来告诉你。今天我要告诉你们的是:在数据科学中,有一个软件...

【方向】
01/24
0
0
Python处理csv、xlsx、pdf

一、csv文件的处理 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与 Excel 文件不同,CSV 文件中: 值没有类型,所有值都是字符串 ...

blackfoxya
2018/06/08
926
0
用python统计3d彩票热门数据,看今天运势如何

快下班了,正好准备去买彩票,就顺手写了2个脚本,一个用来下载最近的彩票数据,一个用来统计彩票数字,分享给大家! 彩票数据获取并写入excel表格 数据来源自己看吧~用外链通不过。。。 所用...

猫咪编程
2018/07/06
56
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部