利用openpyxl方法实现读写excel表格

from openpyxl.reader.excel import load_workbook
import os
class ExcelMethod():
def __init__(self, filename, sheetName):
self.filename = filename
self.wb = load_workbook(filename)
# 通过工作的表名获取一个工作表对象
self.sheet = self.wb[sheetName]
# 获取工作表中的最大行号
self.maxRowNum = self.sheet.max_row
# 获取工作表中的最大列号
self.max_column = self.sheet.max_column
# 获取总的行
self.row = self.sheet.max_row def readExcel(self):
dataList = []
try:
for row in self.sheet.rows:
tmpList = []
for cell in row:
tmpList.append(cell.value)
dataList.append(tmpList)
except:
print("%s加载失败" % self.filename) else:
return dataList[1:] def saveExcel(self, row, text):
try:
self.sheet.cell(row, self.max_column, text)
self.wb.save(self.filename) except:
print("%s 保存失败" % self.filename) if __name__=="__main__":
dri_url = os.path.join(os.getcwd() + r"\User1.xlsx")
excel = ExcelMethod(dri_url,"Sheet1")
dataJson = excel.readExcel()
print(dataJson)
excel.saveExcel(4,'pass')

1.实现获取excel某张表的行数、单元格数据

#coding=utf-8
import xlrd
#获取excel文件
data = xlrd.open_workbook('file_path/xxx.xls')#存放excle表格的路径
#获取第一张表数据
tables = data.sheets()[0]
#打印表行数
print(tables.nrows)
#打印第4行,第3列单元格数据
print(tables.cell_value(3,2))

2.封装获取表格方法

此方法需要实现的作用是:其他方法再调用此方法时,如果传入file_name和sheet_id,就调用对应路径的excel文件和对应的表。如果不传这两个字段,就调用默认表格。

def __init__(self,file_name=None,sheet_id=None):
if file_name:
self.file_name = file_name
self.sheet_id = sheet_id
else:
self.file_name = 'file_path/xxx.xls'
self.sheet_id = 0
self.data = self.get_data()

3.封装获取表格数据方法

封装获取tables的方法,用以之后获取单元格行数、单元格数据,或其他表信息使用。

def get_data(self):
data = xlrd.open_workbook(self.file_name)
tables = data.sheets()[self.sheet_id]
return tables

4.封装获取单元格行数方法

def get_lines(self):
tables = self.data
return tables.nrows

5.封装获取单元格数据的方法

 def get_value(self,row,col):
return self.data.cell_value(row,col)

6.封装获取总行数和总列数

 def get_nrown_ncols(self):
#获取总行数
rowNum = self.data.nrows
#获取总列数
colNum = self.data.ncols
return rowNum ,colNum

7.写入数据到excel

def write_excel(self,row,column,value_back):
'''
:param row: 某一列
:param value: 需要写入的值
:return:
'''
wb=load_workbook(self.file_name)
sheel = wb[self.sheel_name]
#把值写到row,column组成的单元格
sheel.cell(row,column).value = value_back
#保存excel
wb.save(self.file_name)

8.根据行号查找对应内容

   #根据行号,找到该行的内容
def get_row_values(self,row):
tales = self.data
row_data = tales.row_values(row)
return row_data

整体代码如下:

#coding: utf-8
import xlrd class OpeExcel:
def __init__(self,file_name=None,sheet_id=None):
if file_name:
self.file_name = file_name
self.sheet_id = sheet_id
else:
self.file_name = 'file_path/xxx.xls'
self.sheet_id = 0
self.data = self.get_data() #获取sheets的内容
def get_data(self):
data = xlrd.open_workbook(self.file_name)
tables = data.sheets()[self.sheet_id]
return tables #获取单元格行数
def get_lines(self):
tables = self.data
return tables.nrows #获取单元格数据
def get_value(self,row,col):
return self.data.cell_value(row,col) if __name__ == '__main__':
opers = OpeExcel()
print(opers.get_lines())
print(opers.get_value(3,2))

 9.给一个excel文件追加内容:

from xlrd import open_workbook
from xlutils.copy import copy
import os
dri_url = os.path.join(os.getcwd()+r"\user.xls")
rexcel = open_workbook(dri_url)# 用wlrd提供的方法读取一个excel文件
rows = rexcel.sheets()[0].nrows # 用wlrd提供的方法获得现在已有的行数
excel = copy(rexcel) # 用xlutils提供的copy方法将xlrd的对象转化为xlwt的对象
table = excel.get_sheet(0) # 用xlwt对象的方法获得要操作的sheet
table.write(1, 3, 'pass') # xlwt对象的写方法,参数分别是行、列、值
excel.save(dri_url) # xlwt对象的保存方法,这时便覆盖掉了原来的excel

python编辑已存在的excel坑: BadZipFile: File is not a zip file

为了能反复编辑已存在的excel文件并保存,需要xlwt、xlrd、xlutils组合起来使用,代码如下:

import xlwt, os, xlrd
from xlutils.copy import copy class Do_Excel:
def __init__(self,filename,sheetname="Sheet1"):
self.filename = filename
self.sheetname = sheetname #读取excel
def excel_read(self,x,y):
data = xlrd.open_workbook(self.filename)
tabel = data.sheet_by_name(self.sheetname)
return tabel.cell_value(x,y) #判断exce文件是否存在,不存在则创建,存在则直接打开编辑
def excel_create(self):
if not os.path.exists(self.filename):
data = xlwt.Workbook()
table = data.add_sheet(self.sheetname)
table.write(0,0,"id")
data.save(self.filename) #综合xlw/xlrd/xlutis.copy 读写excle
def write(self,row,col,value):
self.excel_create()
rb = xlrd.open_workbook(self.filename)
wb = copy(rb)
ws = wb.get_sheet(0)#1代表是写到第几个工作表里,从0开始算是第一个。
ws.write(row,col,value)
wb.save(self.filename) if __name__=="__main__":
dir = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
dir_excel = os.path.join(dir+r"\data\user1.xlsx")
Do_Excel(dir_excel).write(2,5,'pass')

解决办法二:直接使用openpyxl的Workbook和load_workbook,简单直接

rom openpyxl import Workbook,load_workbook
import os class Do_Excel:
def __init__(self,filename,sheetname='Sheet1'):
self.filename=filename
self.sheetname=sheetname def write(self,i,j,value):
if not os.path.exists(self.filename):
wb = Workbook()
sh = wb.create_sheet(self.sheetname)
else:
wb = load_workbook(self.filename)
sh = wb[self.sheetname]
sh.cell(i,j).value=value
wb.save(self.filename) Do_Excel('test222.xlsx').write(1,1,'sdcds')
Do_Excel('test222.xlsx').write(1,2,'change')
Do_Excel('test222.xlsx').write(3,2,'pass')
												

python-封装方法用于读取excel的更多相关文章

  1. python接口自动化(三十七)-封装与调用--读取excel 数据(详解)

    简介 在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd.xlwt开源包来读写exce ...

  2. Python模块安装与读取Excel

    今天.想用Python读取一下Excel中的数据,从网上查找了一个样例,是要安装相关的模块:        1:到python官网下载http://pypi.python.org/pypi/xlrd模 ...

  3. Python学习笔记:读取Excel的xlrd模块

    一.安装xlrd 可以使用命令行安装也可使用pycharm进行安装 表示xlrd库已经安装成功,安装成功后,我们就可以导入使用了. 二.xlrd说明 (1.单元格常用的数据类型包括 0:empty(空 ...

  4. python接口自动化之读取excel表的数据(使用openpyxl模块)

    1.安装openpyxl:pip install openpyxl 2.基础知识,直接上代码 import openpyxl #导入模块 wd2=openpyxl.load_workbook('stu ...

  5. python 【pandas】读取excel、csv数据,提高索引速度

    问题描述:数据处理,尤其是遇到大量数据且需要for循环处理时,需要消耗大量时间,如代码1所示.通过data['trip_time'][i]的方式会占用大量的时间 代码1 import time t0= ...

  6. Python 使用Pandas读取Excel的学习笔记

    这里介绍Python中使用Pandas读取Excel的方法 一.软件环境: OS:Win7 64位 Python 3.7 二.文件准备 1.项目结构: 2.在当前实验文件夹下建立一个Source文件夹 ...

  7. Python读取excel 数据

    1.安装xlrd 2.官网 通过官网来查看如何使用python读取Excel,python excel官网: http://www.python-excel.org/ 实例: (1)Excel内容 把 ...

  8. 基于注解的读取excel的工具包

    easyexcel-wraper easyexcel-wraper是什么? 一个方便读取excel内容,且可以使用注解进行内容验证的包装工具 easyexcel-wraper有哪些功能? 在easye ...

  9. form表单提交,Servlet接收并读取Excel文件

    首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...

随机推荐

  1. nodejs故障cnpm没反应

    莫名发生的故障cnpm没反应 重新整理nodejs使用流程 方案1 1.安装64位nodejs 2.设置代理 npm config set proxy http://127.0.0.1:9999    ...

  2. 田螺便利店—filezilla实现Linux和windows通信(二)

    filezilla,FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个 ...

  3. STL——string

    C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...

  4. 1.继承(extends)、超类(superClass)、子类(subClass)

    注意:继承主要使用的is-a关系 在子类中用一个新的方法来覆盖超类中的方法(override),需要注意的是如果子类之中的方法或者域  被覆盖时,仍然想访问superClass中的方法和域,此时必须使 ...

  5. 解题报告 『机器翻译(vector)』

    原题地址 本想练习一下模拟,不过用vector貌似可以轻松水过?(虽然还是模拟) 但突然发现貌似我并不会判断单词是否在内存中出现过? 最后还是靠度娘解决了. 代码如下: #include <bi ...

  6. 2018-2019-2 20165313 Exp3 免杀原理与实践

    实践内容(3.5分) 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧:(1.5分) 1.2 通过组合 ...

  7. 第五章JavaScript

    创建数组://1.字面量方式创建 (推荐大家使用这种方式创建数组 简单粗暴) var colors = ['red','color','yellow'];console.log(colors) //空 ...

  8. FileDb

    filedb FileDB - A C# database to store files FileDB is a free, fast, lightweight C# (v3.5) DLL proje ...

  9. 我发起了一个 用 javascript 写一个 Office 的 开源项目 JS Office

    用   js  写   Office,  说实在的,  把 现在已有的 各种 富文本编辑器 和 电子表格 js 库 收集起来 整合一下 就 差不多了 , 放到 前几天 那个 “  js 作为 一等公民 ...

  10. linux配置Anaconda python集成环境

    1.下载anaconda与安装 利用anaconda来配置python环境 如果你上面两步已经没有问题了,那么这一步可以省略. 如果你想简单一些,利用anaconda来配置python环境,那么直接从 ...