近期遇到了某个需求,需要获取xlsx表格里的信息,且不只是简单的文字信息,还包括单元格的底色等等,在这里记录下使用openpyxl这个库的记录。
首先需要注意的是,openpyxl只能处理xlsx格式的文件,如果不是这个格式会报错。
在openpyxl中,单元格是以cell的形式进行存储
导入包:
import openpyxl
打开文件遍历单元格:
可以直接通过自带的迭代器获取元素,但是个人更倾向于第二种,通过指定行号列号的方式获取对应的单元格。因为实际工作过程中表格很多时候是有合并单元格的情况的,如果直接用生成的迭代器会发现内容非常混乱。还有就是openpyxl默认下标是从1开始的,而非0开始
workbook = openpyxl.load_workbook(”test.xlsx")
worksheet = workbook.active
for row in worksheet.iter_rows():
for cell in row:
print(cell.value)
for i in range(1, worksheet.max_row+1):
for j in range(1, worksheet.max_column+1):
print(worksheet.cell(i, j).value)
通过cell.fill获取单元格的格式:
for i in range(1, worksheet.max_row+1):
for j in range(1, worksheet.max_column+1):
print(worksheet.cell(i, j).fill)
可以看到有很多参数:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb', bgColor=<openpyxl.styles.colors.Color object>
如果需要获取单元格的背景色:
for i in range(1, worksheet.max_row+1):
for j in range(1, worksheet.max_column+1):
print(worksheet.cell(i, j).fill.bgColor.rgb)
通过表名获取xlsx文件中的某个表,这时候就不用再activel了:
workbook = openpyxl.load_workbook("test.xlsx")
worksheet = workbook.get_sheet_by_name('机场')
给单元格加上边框和文字居中:
from openpyxl.styles import Border, Alignment, Side
# 居中样式
align = Alignment(horizontal='center', vertical='center', wrap_text=True)
# 边框样式
border = Border(left=Side(border_style='thin'),
right=Side(border_style='thin'),
top=Side(border_style='thin'),
bottom=Side(border_style='thin'))
修改单元格内容和样式直接赋值即可
worksheet.cell(i,j).value = 'hi'
worksheet.cell(i,j).border = border
worksheet.cell(i,j).alignment = align
保存修改的xlsx文件:
workbook.save(save_file_name)
workbook.close