openpyxl和xlwings两个模块都是python中使用广泛的excel处理模块,但两者各有利弊,openpyxl读取速度快,但不支持在原有表格上写入内容;xlwings调用速度稍微比较慢,但支持读取和更改原有表格的内容。之前写过关于《Python使用xlwings实现写入Excel》的简单教程Python使用xlwings实现写入Excel》https://blog.csdn.net/userak47/article/details/119081169可以实现在指定表格,行,列写入内容
def wrtxl(a,b,c,value): #写入表格内容(页,行,列,内容)
# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets[a-1][b-1,c-1].value=value
#print(wb.sheets[0][1,1].value)
wb.save()
本次对原来的代码进行了一个升级,原本只能输入表格序号和行数、列数来读取或写入内容,现在可以输入表格名(例如“人员名单”)和表格具体位置(例如“A6”)
以下是openpyxl和xlwings混合使用的完整代码
import xlwings as xw
import openpyxl
class xexcel: #xlwings功能
global app,wb
def open(path):
#初始化写入表格程序
global app,wb
app=xw.App(visible=False,add_book=False)
#visible=True 显示Excel工作簿;False 不显示工作簿
#add_book=False 不再新建一个工作簿;True 另外再新建一个工作簿
#app.display_alerts=False
#app.screen_updating=False
wb=app.books.open(path) #写入的表格路径
#读取表格内容
def rdvalue(sheet:"可输入表格名或表格序号",address:"可输入行数或者表格位置如:A6",column:"列数"=0): #读取excel函数(页,行,列)
if type(sheet)==int:
if type(address)==int:
re=wb.sheets[sheet-1][address-1,column-1].value
else:
re=wb.sheets[sheet-1][address].value
else:
if type(address)==int:
re=wb.sheets[sheet][address-1,column-1].value
else:
re=wb.sheets[sheet][address].value
return re
#写入表格内容
def wtvalue(value:"输入的内容",sheet:"可输入表格名或表格序号",address:"可输入行数或者表格位置如:A6",column:"列数"=0): #读取excel函数(页,行,列)
if type(sheet)==int:
if type(address)==int:
wb.sheets[sheet-1][address-1,column-1].value=value
else:
wb.sheets[sheet-1][address].value=value
else:
if type(address)==int:
wb.sheets[sheet][address-1,column-1].value=value
else:
wb.sheets[sheet][address].value=value
def size(sheet,r,c):
wb.sheets[sheet][r].row_height=c
wb.sheets[sheet][r].colum_height=c
def bgcolor(sheet,r,c):
wb.sheets[sheet][r].color=c
def wrtxl(a,b,c,value): #写入表格内容(页,行,列,内容)
# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets[a-1][b-1,c-1].value=value
#关闭excel和app
#运行结束务必执行保存和关闭命令
def close():
wb.save()
wb.close()
app.quit()
def save():
wb.save()
class oexcel:
global workbook
def open(filename): #读取Excel
global workbook
workbook=openpyxl.load_workbook(filename)
def value(n:"页码或者页名",row:"行",column:"列"): #读取表格内容('页',行,列) 页可为页名或页码
if type(n)==int:
sheetname=workbook.get_sheet_names()[n-1]
worksheet=workbook.get_sheet_by_name(sheetname)
else:
worksheet=workbook.get_sheet_by_name(n)
value=worksheet.cell(row,column).value
return value
def bgcolor(n:"页码或者页名",row:"行",column:"列"): #读取表格背景颜色('页',行,列) 页可为页名或页码
if type(n)==int:
sheetname=workbook.get_sheet_names()[n-1]
worksheet=workbook.get_sheet_by_name(sheetname)
else:
worksheet=workbook.get_sheet_by_name(n)
ce=worksheet.cell(row,column)
color=ce.fill.start_color.rgb
return color