前言:此文章内容均在python3.7/openpyxl3.0.5版本下运行成功
workbook = openpyxl.load_workbook(path) #读取指定的excel
sheet = workbook[sheet_name] #读取指定的sheet页
sheet.max_row+1 #该excel的最大数据行
sheet.max_column+1 #该excel的最大数据列
sheet.title #指定sheet页的名字
sheet.cell(row=r,column=c).value #指定sheet指定行列的数据值
sheet[row+column] #指定sheet指定行列的数据值,例如 sheet[A1]
#此处的值可以使用excel的计算公式
workbook.save(path) #将修改好的excek保存到指定路径
#excel查找信息并替换,该方法只能查找一整列的数据
#row表示需要行数,column表示需要查找的列数
def findExcelInfo(path,name,value):
workbook=openpyxl.load_workbook(path)
sheet=workbook[name]
for r in range(2,sheet.max_row+1):
v=sheet.cell(row=r,column=3).value
if v==value[1]:
sheet.cell(row=r,column=2).value=value[0]
workbook.save(path)
break
def addExcelLine(value):
workbook=openpyxl.load_workbook(path)
sheet=workbook["Sheet1"]
sheet['A1']=value
workbook.save(path)
这里有两个有用的api
sheet.merged_cells
sheet.merged_cells.range
这里推荐merged_cells.range这个接口,该接口会回传包含所有合并单元格的属性集合,包括但不限于:
min_row/max_row 单元格最小最大行
min_col/max_col 单元格最小最大列
我们可以利用他轻松定位到我们所需的数据位置
来看这个例子,我们想要获取送货单对应数据包含的范围,但是黄色标注部分还存在其他的合并单元格,那么我们就可以通过遍历merged_cells.range这个集合再加上限定条件来筛选出我们需要的部分
for cell in sheet.merged_cells.ranges:
if cell.min_col == 1 and cell.max_col ==1:
r = cell.min_row
while sheet.cell(row=r,column=3).value != None and r <= cell.max_row:
list = []
list.append(sheet.cell(row=r,column=2).value)
list.append(sheet.cell(row=r,column=3).value)
这样就很轻松获取了对应的12月1号对应的数据块,同时还可以避免读取数据超出范围。
workbook.create_sheet(name,index) #创建sheet页
workbook.remove(sheet) #删除sheet页
create_sheet其中name是sheet页的名字,index是插入页插入的位置(从0开始,可以不写,默认是最后面)
其中remove函数中的sheet指的是sheet对象,而不是sheet页的名字,应用场景如下:
workbook = openpyxl.load_workbook(path)
sheet = workbook['sheet1']
workbook.remove(sheet)