python 如何能对一个excel文件进行编辑
我在执行测试想把结果输出到excel,目前使用xlwtxlrd可以编辑excel,但是不知道怎样才能把多条用例写到同一个excel中,而且不删除旧的数据???...
我在执行测试想把结果输出到excel,目前使用xlwt xlrd可以编辑excel,但是不知道怎样才能把多条用例写到同一个excel中,而且不删除旧的数据???
展开
2个回答
展开全部
你需要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=""就结束,结束时的行号就是你添加新数据的起点了撒. 剩下的不要我说了吧?
展开全部
用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+多少行就好
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脚本,添加一行吗?
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询