欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-22 16:06:40
...

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行列读取,批注批量添加,列宽设置

相关标签: python-小知识