在py里打开excel的方法是:
1。通过第三方库openpyxl导入load_workbook模块
2。获取excel的绝对路径:导入os模块
1)获取该pythonpackage的目录路径
2)将excel的绝对路径与目录路径拼接起来
3。选择表单
1)定义excel:work_loadbook命令中传入excel的绝对路径
2)列表方法选择定义后excel的表单
(操作excel就是对被选择表单内的单元格进行操作)
1。修改单元格,单元格的值起始下标(从1开始)
1)单元格.value命令 sh.cell(7,1).value = 21
3。获取表单最大的行/列
4。保存修改数据,!!!保证excel是关闭状态!!!
1)文件名.save命令 wb.save(文件路径)
from openpyxl import load_workbook
import os
dir_name = os.path.dirname(os.path.abspath(__file__))
excel_path = os.path.join(dir_name,"表名.xlsx")
wb = load_workbook(excel_path)
sh = wb["表单名"]
sh.cell(row,column).value = value #给单元格赋值
print(sh.max_row) #表单最大的行数
print(sh.max_column) #表单最大的列数
wb.save(excel_path) #保存excel文件
(要特别注意两点:
1.for range遍历时取头不取尾,因此sh.max_column+1,加1才能遍历完整的列数;
2.在openpyxl库中,单元格的下标从1开始!!!反而列表的元素下标从0开始!!!在表头列表中取值需要从0开始,因此减1)
cases = [] #表内容
titles = [] #表头
for index in range(1,sh.max_column+1):
value = sh.cell(1,index).value #1代表第一行,value值为第一行所有的单元格值
titles.append(value)
print(titles)
for row in range(2,sh.max_row+1):
print("第{}行".format(row))
row_dict = {
} #在excel的每一行都创建一个空字典,收集每一行的测试用列
for col in range(1,sh.max_column+1):
value = sh.cell(row,col).value
row_dict[titles[col-1]] = value #修改 key存在 给每一行的空字典赋值,col-1是因为titles是表头列表,需要从0开始,才能取全值
print(row_dict)
cases.append(row_dict)
print(cases)
(sh.rows必须转换成列表类型!!!zip函数拼接必须转成成字典类型)
titles=[]
all_rows=list(sh.rows) #,sh.rows结果是乱码,list之后将每一行的单元格以元组形式放在列表里[(A1B1C1D1),(A2B2C2D2),(A3B3C3D3)....
for item in all_rows[0]:#遍历第一行(表头)的所有单元格,列表下标为0的元素就是第一行(表头)
titles.append(item.value)
print(titles)
cases_date=[]
for item in all_rows[1:]:
case=[]#每一行都创建一个空列表
for cell in item:
case.append(cell.value)
r=dict(zip(titles,case))#拼接表头和每一行内容
cases_date.append(r)
print(cases_date)
在初始化里定义了self.wb和self.sh,因为后面的定义的类方法都会用到这两个参数,如果后面的方法不掉用这些参数,可以不加self。
读取所有行这个方法后期不会使用,做了私有化(方法前面加_,只允许类内部调用,外部不可调用)。
class HandelExcel:
def __init__(self,excel_path,sheet,):
self.wb = load_workbook(excel_path)
self.sh =self.wb[sheet]
#读取所有的行方法
def _read_all_rows(self):
self.all_rows = list(self.sh.rows)
#读取表头方法
def read_title(self):
self.read_all_rows()
titles=[]
for item in self.all_rows[0]:
titles.append(item.value)
return titles
#读取表内容方法
def read_all(self):
titles = self.read_title()
case_datas = []
for item in self.all_rows[1:]:
value = []
for cell in item:
value.append(cell.value)
case = dict(zip(titles,value))
case_datas.append(case)
return case_datas
#修改单元格方法
def write_cell(self, row, column, value):
self.sh.cell(row,column).value = value
#保存文件方法
def save_web(self,excel_path):
self.wb.save(excel_path)
cur_path = os.path.dirname(os.path.abspath(__file__))
excel_path = os.path.join(cur_path, "表名.xlsx")
he = HandelExcel(excel_path, "表单名")
titles = he.read_title()
cases = he.read_all()
print(titles)
print(cases)
以上!
第一次写博客,如有错误,请多指正!