python 如何能对一个excel文件进行编辑

我在执行测试想把结果输出到excel,目前使用xlwtxlrd可以编辑excel,但是不知道怎样才能把多条用例写到同一个excel中,而且不删除旧的数据???... 我在执行测试想把结果输出到excel,目前使用xlwt xlrd可以编辑excel,但是不知道怎样才能把多条用例写到同一个excel中,而且不删除旧的数据??? 展开
 我来答
xiangnanscu
2013-10-28 · TA获得超过852个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:333万
展开全部

你需要win32api模块

# -*- coding: gbk -*-
import win32com.client

class easyExcel:
    """A utility to make it easier to get at Excel.  Remembering
    to save the data is your problem, as is  error handling.
    Operates on one workbook at a time."""

    def __init__(self, filename=None):
        self.xlApp = win32com.client.Dispatch('Excel.Application')
        if filename:
            self.filename = filename
            self.xlBook = self.xlApp.Workbooks.Open(filename)
        else:
            self.xlBook = self.xlApp.Workbooks.Add()
            self.filename = ''  
    
    def save(self, newfilename=None):
        if newfilename:
            self.filename = newfilename
            self.xlBook.SaveAs(newfilename)
        else:
            self.xlBook.Save()    

    def close(self):
        self.xlBook.Close(SaveChanges=0)
        del self.xlApp

    def getCell(self, sheet, row, col):
        "Get value of one cell"
        sht = self.xlBook.Worksheets(sheet)
        return sht.Cells(row, col).Value
    
    def setCell(self, sheet, row, col, value):
        "set value of one cell"
        sht = self.xlBook.Worksheets(sheet)
        sht.Cells(row, col).Value = value
    
    def getRange(self, sheet, row1, col1, row2, col2):
        "return a 2d array (i.e. tuple of tuples)"
        sht = self.xlBook.Worksheets(sheet)
        return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value

    def setRange(self, sheet, leftCol, topRow, data):
        """insert a 2d array starting at given location. 
        Works out the size needed for itself"""
    
        bottomRow = topRow + len(data) - 1
        rightCol = leftCol + len(data[0]) - 1
        sht = self.xlBook.Worksheets(sheet)
        sht.Range(
            sht.Cells(topRow, leftCol), 
            sht.Cells(bottomRow, rightCol)
            ).Value = data

    def getContiguousRange(self, sheet, row, col):
        """Tracks down and across from top left cell until it
        encounters blank cells; returns the non-blank range.
        Looks at first row and column; blanks at bottom or right
        are OK and return None witin the array"""
    
        sht = self.xlBook.Worksheets(sheet)
    
        # find the bottom row
        bottom = row
        while sht.Cells(bottom + 1, col).Value not in [None, '']:
            bottom = bottom + 1
    
        # right column
        right = col
        while sht.Cells(row, right + 1).Value not in [None, '']:
            right = right + 1
    
        return sht.Range(sht.Cells(row, col), sht.Cells(bottom, right)).Value

    def fixStringsAndDates(self, aMatrix):
        # converts all unicode strings and s
        newmatrix = []
        for row in aMatrix:
            newrow = []
            for cell in row:
                if type(cell) is UnicodeType:
                    newrow.append(str(cell))
                elif type(cell) is TimeType:
                    newrow.append(int(cell))
                else:
                    newrow.append(cell)
            newmatrix.append(tuple(newrow))
        return newmatrix

    
    
#下面将桌面文件test.xlsx的Worksheets(2)写上一些数据,再把这些数据转置粘贴到Worksheets(1)
if __name__ == "__main__":
    try:
        xls = easyExcel(r'C:\Users\...\Desktop\test.xlsx')    
        st=xls.xlBook.Worksheets(1)
        st2=xls.xlBook.Worksheets(2)
        st2.Range("A1:G2").Value=900
        st2.Range("A1:G2").Copy()
        st.Range("A1:B7").Value=0
        st.Range("A1").PasteSpecial(Transpose=True,SkipBlanks=True,)
    finally:
        xls.save()
        xls.close()
追问
你好!麻烦你能加些注释到代码中吗?
我是菜鸟看不懂啊!!!

我的问题是执行多个用例把测试结果输入到同一个excel,写入数据时不知道这个里面有多少旧数据,希望把新的数据插入到最后面。

请问这些代码是写到同一个PY文件中吗?

表中有3列数据,A用例名称,B用例结果,C执行时间!!
每行就3个数据例如第一行 Casename ,Pass,20131028
追答
这个用遍历判断就行了.假设你要往sheet1加数据,而sheet1已经有了100行数据.那么你就写一个从A1开始遍历的循环,直到AN=""就结束,结束时的行号就是你添加新数据的起点了撒. 剩下的不要我说了吧?
wanghan519
2013-10-28 · TA获得超过7820个赞
知道小有建树答主
回答量:1285
采纳率:60%
帮助的人:539万
展开全部
用write的时候控制行号、列号递增
data=[[1,2],[3,4]]
ws = wb.add_sheet('Sheet1')
for r, row in enumerate(data):
for c, col in enumerate(row):
ws.write(r, c, label=col)
下次写入的时候先读出来已经写了多少行,然后r+多少行就好
更多追问追答
追问
例如:表中有3列数据,A用例名称,B用例结果,C执行时间!!
每行就3个数据例如第一行 Casename1,Pass,20131028 13:00
新的数据应该写在上面这行后面 casename2,Pss,20131028 14:00
请问是使用这个**.save('d:\\test.xls')保存文件吗?我现在的结果是保存时会把旧的结果删除.
追答
write那一句怎么写的?
你是想执行一次python脚本,添加一行吗?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式