"""
excel类封装需要提供以下功能:
1、选择表单功能
2、读取一个单元格的数据功能
3、读取一行数据功能
4、读取表单中所有数据功能
5、往单元格中写入数据功能
6、保存数据功能
"""
from openpyxl import load_workbook class MyExcel: # 加载excel文件。
def __init__(self,filepath):
# 文件存在就加载。不存在就报错。
try:
self.wb = load_workbook(filepath)
except:
print("加载excel文件失败!!请检查!")
raise # 选择表单功能
def select_sheet_by_name(self,sheet_name="Sheet1"):
if sheet_name in self.wb.sheetnames:
self.sh = self.wb[sheet_name]
else:
print("表单名称在当前excel文件中不存在,请检测表单名称!") # 读取一个单元格的数据功能
def get_data_by_cell(self,row,column):
# 判断行号、列号有效
if self._check_num_valid(row,self.sh.max_row) is True and \
self._check_num_valid(column,self.sh.max_column) is True:
return self.sh.cell(row,column).value # 读取一行数据功能
def get_dada_by_row(self,row):
row_datas = []
# 判断行号有效
if self._check_num_valid(row, self.sh.max_row) is True:
# 有则读取一行数据
for col in range(1,self.sh.max_column+1):
row_datas.append(self.sh.cell(row,col).value)
return row_datas # 读取所有数据
def get_data_all(self):
all_datas = {}
for row in range(1,self.sh.max_row + 1):
row_datas = self.get_dada_by_row(row)
all_datas["第{}行: ".format(row)] = row_datas
return all_datas # 写入数据功能
def write_data_by_cell(self,row,column,value):
self.sh.cell(row,column).value = value # 保存功能
def save_datas(self,filepath):
try:
self.wb.save(filepath)
except PermissionError:
print("要操作的文件,没有写入权限。请检查权限!")
raise
except FileNotFoundError:
print("文件路径不存在,请确保路径正确!!")
raise
except:
print("保存写入的数据失败!!请检查异常")
raise # 检测数据有效
def _check_num_valid(self,cur_num,max_num):
# 类型检测
if type(cur_num) is not int and type(cur_num) is not str:
print("cur_num 数据类型错误!请确认为整数类型,或者为字符串类型!")
return
# 数字检测
if type(cur_num) is str:
try:
cur_num = int(cur_num)
except:
print("cur_num参数非法!请确认是输入数据为整数数字!")
return
# 数字是否出范围
if cur_num in range(1,max_num+1):
return True
else:
print("行号或者列号,超出了目前最大行号,或者最大列号!!")
return False if __name__ == '__main__': # 对自己定义的功能类进行测试
# 正常功能测试
e = MyExcel("datas.xlsx") # 加载文件
e.select_sheet_by_name("case_datas") # 选表单
print(e.get_dada_by_row(3)) # 读取第三行数据
print(e.get_data_by_cell(2,3)) # 读取某一个数据
e.write_data_by_cell(6,6,"我悄咪咪的进来了!") # 写入数据
e.write_data_by_cell(7,7,"哼哼,我也悄悄进来了!") # 写入数据
e.save_datas("datas.xlsx") # 保存数据

最新文章

  1. eclipse添加easyExport插件,打开本地文件
  2. Unity3d外包(北京)公司(长年承接U3D外包)
  3. MongoDB 简介
  4. Oracle Latch的学习【原创】
  5. JSON 数组的遍历解析
  6. Semaphore tryAcquire release 正确的使用方法
  7. android webview 介绍
  8. 【转】利用 Bootstrap 进行快速 Web 开发
  9. Java Concurrency - 浅析 CountDownLatch 的用法
  10. 【Java基础】Java多线程小结
  11. mips平台使用jdbc操作sqlite的最终解决方案
  12. twisted的一些代码
  13. 转: requirejs压缩打包r.js使用示例 2 (~~很详细的教程)
  14. CentOS、Ubuntu、Debian三个linux比较异同[转]
  15. linux下lampp(xampp)安装memcached扩展
  16. Android 多窗口详解
  17. 中国非正常死亡最高的行业 TOP 10
  18. [LeetCode&Python] Problem 171. Excel Sheet Column Number
  19. Microsoft Excel as a Source and Target as Oracle in ODI
  20. windows远程连接mac配置方法

热门文章

  1. Python朗读excel中的英文单词
  2. 解决误删/bin/bash问题
  3. 请收好 Linux 网络命令集锦
  4. setTimeout 是到了xx ms 就执行吗,了解浏览器的 Event-Loop 机制
  5. 查看权限详情 将部门大类单据整合,将子类单据id去重合并
  6. Redis主从复制getshell技巧
  7. Ubuntu+KVM显卡透传
  8. Spring Boot Starters
  9. Java8的Optional:如何干掉空指针?
  10. 探讨EFCore如何优雅的实现读写分离