openpyxl作为 python中常用的excel模块用于excel常用操作还是蛮方便的
常用操作请参照
先获取一个sheet
def excel_add_comment(file):
wb = load_workbook(file, data_only=False)
try:
# ws = wb.active
ws = wb["Sheet"]
ws.title = "sheetName"
except:
ws = wb.copy_worksheet("sheetName")
方法1:使用字符串标注获取区间
row1= ws["A1:F1"] #第一行前五个
col1 = ws["A1:A6"] # 第一列前六个
row2 = ws["A5:F6"] # 区间A5:F6
注意 :区间获取不能只有一行,否者取不到数据,但可以是一列
方法2:使用下标获取行或列
注意行使用字符数字(直接使用数字会报错), 列使用对应的字母
row5 = ws["5"] # 第五行
col1 = ws["A"] # 第1列
row5 = ws["5:10"] # 第五行到10行
col1 = ws["A:C"] # 第1列到列
数字、字母转换可以使用get_column_letter和column_index_from_string
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(33), column_index_from_string("AAB")) # AG 704
使用column_dimensions 和
# 获取标题行
title = [i.value for i in ws["1"] if i.value]
# 设置列宽
for i in range(4, len(self.title)):
ws.column_dimensions[chr(65 + i)].width = len(self.title[i]) + 5 # 下标是字母
ws.row_dimensions[i].height = 5 # 下标是字母
批量添加批注代码:
使用Comment为单元格添加批注
from openpyxl import load_workbook
from openpyxl.comments import Comment
def excel_add_comment(file):
wb = load_workbook(file, data_only=False)
ws = wb.active
# 获取标题行数据并切割
title = [i.value.split('/') for i in ws["1"] if i.value]
# 获取数据行
data = [[i.value for i in row] for row in ws["2:67"]]
comment = Comment("text", "username") # 注意要写后面的用户
comment.width = 300 # 设置宽度
for i in range(1, 6): # 处理前五个部分,每部分是6行
row = i*6
web1, web2 = data[row - 6][1], data[row - 4][1]
team1, team2 = data[row - 6][2], data[row - 5][2]
# 设置添加批注规则
for col in range(5, len(title)+1):
v1, v2, v3, v4 = data[row-6][col-1], data[row-5][col-1], data[row-4][col-1], data[row-3][col-1]
info1, info2 = title[col-1]
# print(v1, v2, v3, v4, info1, info2, team1, team2, web1, web2)
if v1 and v4:
comment.text = f'[{web1}] [{team1}] {info1} \n Vs\n{web2} [{team2}] {info2}'
ws.cell(row, col).comment = comment
if v2 and v3:
comment.text = f'[{web1}] [{team1}] {info2} \n Vs \n[{web2}] [{team2}] {info1}'
ws.cell(row+1, col).comment = comment
wb.save("test.xlsx")
if __name__ == '__main__':
excel_add_comment("2020-07-15_13-45-56.xlsx")
生成表格如图: