python学习 - openpyxl行列读取,批注批量添加,列宽设置

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")

生成表格如图:

python学习 - openpyxl行列读取,批注批量添加,列宽设置_第1张图片

你可能感兴趣的:(python-小知识)