使用xlrd和xlutils.copy,把取excel的行数、列数、行值、列值、单元格值和写入已有的excel都做了封装。
# coding=utf-8
__date__ = '2019/8/15 8:47'
__author__ = 'Allen'
import xlrd
from xlutils.copy import copy
class OperExcel:
"""
实例化时传file_name和sheet_id
"""
def __init__(self, file_name=None, sheet_id=None):
# 判断文件是否存在,不存在就给一个默认值
if file_name:
self.file_name = file_name
else:
self.file_name = r"./file/test.xlsx"
# 判断sheet_id是否存在,不存在默认0
if sheet_id:
self.sheet_id = sheet_id
else:
self.sheet_id = 0
self.tables = self.get_tables() # 直接把获取的excel数据赋给变量
# 获取excel的表数据
def get_tables(self):
data = xlrd.open_workbook(self.file_name)
tables = data.sheet_by_index(self.sheet_id)
return tables
# 取得excel的行数
def get_row_num(self):
num_of_row = self.tables.nrows
return num_of_row
# 取得excel的列数
def get_col_num(self):
num_of_col = self.tables.ncols
return num_of_col
# 根据行号,找到该行的内容
def get_row_values(self, row):
row_data = self.tables.row_values(row)
return row_data
# 根据列号,找到该列的内容
def get_col_values(self, col):
col_data = self.tables.col_values(col)
return col_data
# 取得excel某一单元格的值
def get_cell_value(self, row=0, col=0):
value_of_cell = self.tables.cell_value(row, col)
return value_of_cell
# 用于在已有的excel中写入数据,注意xlutils对xlsx格式不支持,使用xls格式
def write_value(self, row, col, value):
"""
写入excel数据
row, col, value
"""
read_data = xlrd.open_workbook(self.file_name)
write_data = copy(read_data) # 复制一份excel数据
sheet_data = write_data.get_sheet(0) # 获取sheet数据
sheet_data.write(row, col, value) # 写入数据
write_data.save(self.file_name) # 保存excel
if __name__ == '__main__':
oper = OperExcel()
print(oper.get_cell_value(0, 0))