文章目录
- Cell
- Cell的属性
- MergedCell
版本:openpyxl - 3.0.10
Cell
- 创建一个单元格,并存入数据、样式、注释等;
- openpyxl.cell.cell.Cell;
- 获取cell
- worksheet_obj[“B3”],根据coordinate获取cell; 也可直接赋值写入;
- worksheet_obj.cell(row_id, col_id),根据行列获取cell; 也可以再传一个值写入;
- worksheet_obj[“A1”: “C4”],获取二维数组的cell,每行的cell对象组成一个元组;
Cell的属性
- cell.row, 行 id,从1开始;
- cell.column / col_idx,列 id,从1开始;
- cell.column_letter,获取列对应的字母,如B
- cell.coordinate,坐标,如 ‘B5’
- cell.value / internal_value,单元格中的数据;
- cell.comment,关联到这个cell的注释
-
如图
-
返回一个openpyxl.comments.comments.Comment对象
-
cell.comment.text 获取注释的文本数据;
-
- cell.data_type 数据类型
- n,数值类型,包括整数、浮点数;
- s,文本类型;
- d,日期类型;
- cell.encoding,编码方式
- cell.hyperlink,单元格内的超链接;
- 返回openpyxl.worksheet.hyperlink.Hyperlink对象;
- 可以在excel单元格中添加一个超链接,链向另一个excel文件,如b.xlsx 或者 b.xlsx#jack!B5,#跟worksheet名称,!跟对应的单元格坐标(#…!..必须一起使用);
- 超链接对象的参数:
- ref=‘B5’, 所在单元格的坐标;
- target=“b.xlsx”,链向的文件名
- location=‘jack!B5’,链向的excel文件的worksheet表及单元格;
- tooltip=‘这是一个超链接’,鼠标悬浮链接的提示信息;
- display=‘b.xlsx - jack!B5’,超链接显示为的内容,若不生效,则通过设置cell.value 来显示;
- id=‘rId1’,超链接的编号;
from openpyxl.worksheet.hyperlink import Hyperlink
cell2 = ws["B6"]
# 设置显示内容
cell2.value = "laufing 设置value"
# 设置超链接
cell2.hyperlink = Hyperlink(
ref=cell2.coordinate,
target="b.xlsx",
location="jack!B5",
display="laufing 测试display",
tooltip="这是Lucy的超链接",
id="rId2") # id 可以不用传入
- cell.is_date,数据是否为日期类型;
- cell.offset(rid, cid) ,相对于当前cell偏移行、列后的cell对象;
- cell.parent,获取单元格所属的worksheet对象;
- cell.alignment,水平、垂直对齐方式;
- 返回openpyxl.styles.alignment.Alignment对象;
- alignment.horizontal,水平对齐方式,如“center”
- alignment.vertical,垂直对齐方式,如“center”
- cell.border, 单元格的边框;
- 返回openpyxl.styles.borders.Border 对象;
- border.left/right/top/bottom,返回openpyxl.styles.borders.Side对象;
- side.style & side.color均为None时,无对应边框;均有值时有对应的边框;
# 有对应的边框
# <openpyxl.styles.borders.Side object>
# Parameters:
# style='medium', color=<openpyxl.styles.colors.Color object>
# Parameters:
# rgb='FF00B050', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'
# 无对应的边框
# <openpyxl.styles.borders.Side object>
# Parameters:
# style=None, color=None
-
cell.fill ,单元格的填充色;
- 返回 openpyxl.styles.fills.PatternFill 对象;
- p_fill.fgColor.rgb, 如"FF0000FF" 为蓝色(前两个FF忽略);
-
cell.font,字体样式;
- 返回openpyxl.styles.fonts.Font对象;
- font.name 使用的字体名称;
- font.family 使用字体的编号;
- font.b 是否加粗;
- font.i 是否倾斜;
- font.color 字体颜色,返回Color对象;
-
cell.has_style 判断单元格是否有样式,返回True/False;
- alignment、border、fill、font、protection都是样式;
-
cell.style, 单元格类型(常规、超链接);.style_id为对应的编号;
-
cell.number_format
-
cell.pivotButton
-
cell.protection 单元格是否锁定,避免误操作;
-
必须先开启
工作表保护
(开始-格式-工作表保护),再设置单元格的格式(右键),勾选锁定,才会锁定该单元格(禁止编辑); -
如图:
-
返回openpyxl.styles.protection.Protection对象;
-
protection.locked 是否为锁定;
-
protection.hidden 是否为隐藏;
-
MergedCell
-
合并的单元格,openpyxl.cell.cell.MergedCell 类;
-
合并的单元格的值,只在最左上角的cell中,其他的cell中的值均为None;
-
worksheet.merged_cells,获取所有的合并的单元格;返回openpyxl.worksheet.cell_range.MultiCellRange的可迭代对象;
-
遍历MultiCellRange对象得到openpyxl.worksheet.merge.MergedCellRange对象,属性如下:
- i.bottom # 合并区域的最下面一行cell的(rid, cid),同样有left 最左边一列,right最右边一列,top最上边一行的cell;
- i.bounds # 左上角、右下角cell的(cid, rid)
- i.cells 所有的单元格,可以逐一遍历
- i.rows 所有的行可迭代对象
- i.cols 所有的列
- i.coord 起始:结束范围
- i.min_row/max_row/min_col/max_col;
- i.start_cell 左上角的起始cell;
- i.size 整体大小,行数&列数;
- i.ws 获取worksheet对象;
-
案例,输出合并单元格区域的所有cell;
ws = wb_a["sheet"]
# MultiCellRange
t = ws.merged_cells
for i in t:
# i 为 MergedCellRange
for r in range(i.max_row - i.min_row + 1):
start_row, start_col = i.start_cell.row, i.start_cell.column
cur_row = start_row + r
for c in range(i.max_col - i.min_col + 1):
cur_col = start_col + c
cell = ws.cell(cur_row, cur_col)
print(cur_row, cur_col, cell, cell.value)
可以看到,合并的单元格中只有起始的单元格value有值,其他均为None;