python3 Excle读写数据,拿去可直接用
使用迭代器迭代数据,直到表中的数据迭代完,然后退出程序。适合用来做验证,修改指定地方数据或者做自动化。
excle.py文件
# coding=UTF-8
import xlrd3 as xlrd
import openpyxl
'''
调用方法 Excle(xx.xls, Sheet1)
ex = Excle(test.xls, test)
data = ex.getRowData(1, 2) #2行开始,第3列为空的一行数据
while True:
try:
userData = next(data) # 一行数据
index = next(data) # 当前行所在的下标,写入数据时用
except StopIteration:
# 所有数据跑完后结束程序
sys.exit()
'''
class Excle():
def __init__(self, file, sheetName, *args):
# 文件路径
self.file = file
# xlrd所使用的工作区名字
self.sheetName = sheetName
# openpyxl选择工作区用的是数字,跟列表下标一样的,args可不传,默认的是第一个工作区
if args:
self.sheetNum = args[0]
else:
self.sheetNum = 0
# todo 打开excle
self.xl = xlrd.open_workbook(self.file)
# todo 通过索引获取工作表
self.table = self.xl.sheet_by_name(self.sheetName)
# todo 获取一共多少行
self.rows = self.table.nrows
def getRowData(self, index, rowIndex):
rows = self.rows
table = self.table
for i in range(rows):
row = table.row_values(i)
# 获取某行某列为空的数据
if i != index and row[rowIndex] == '':
yield row
yield i
# 获取当前工作区所有数据
def getTableData(self, *sheet,):
if sheet:
# 获取指定工作区的数据
return self.xl.sheet_by_name(sheet)
else:
# 获取初始化工作区的所有数据
return self.table
# 保存数据到指定行列
def saveData(self, ro, co, message):
"""
ro行,co列,message,写入的数据
:type mssage: str 写入的数据
:type co: int 列
:type ro: int 行
"""
wb = openpyxl.load_workbook(self.file)
ws = wb.worksheets[self.sheetNum]
ws.cell(row=ro, column=co, value=message)
# ws.cell(ro, co).value = message
wb.save(self.file)