【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格 您所在的位置:网站首页 怎么读取表格中多列相关数据的内容 【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格

【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格

2024-07-16 19:26| 来源: 网络整理| 查看: 265

1.获取和修改单个单元格 from openpyxl import Workbook wb = Workbook() ws = wb.active cell = ws["a6"] # 通过坐标获取 cell2 = ws.cell(1, 2) # 通过行列下标获取 # 直接修改某个单元格的值 ws["a5"] = 666 ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d") # 修改为时间类型 ws.append([1, 2, 3]) # 在最下面新增一行追加一个或多个值 # 先获取单元格对象然后再进行修改 cell = ws["a6"] cell.value = 777 print(cell, cell.value) # 输出: 777 cell2 = ws.cell(6, 1) # 第6行第1列,即A6 print(cell2, cell2.value) # 输出: 777 # 单元格坐标信息 print(c.coordinate) # 单元格坐标,例如A6 print(c.column_letter) # 单元格列名,例如A print(c.col_idx) # 单元列下标,例如1 print(c.row) # 单元格所在行,例如6

1.如果使用cell(row, column, value)获取,第一个参数是行,第二个参数是列,下标都是从1开始,例如,ws[“a6”]等同于ws.cell(6, 1),但如果指定了第三个参数value,则修改了该单元格的值 2.只要访问了一个cell就会被创建,不管是否赋值

根据上面的方式,我们可以通过循环来准备一下数据

from openpyxl import Workbook wb = Workbook() ws = wb.active i = 1 for x in range(1, 11): for y in range(1, 21): ws.cell(row=x, column=y, value=i) i += 1 wb.save("test.xlsx")

这样我们就得到了从1~200共200个(10行20列)单元格的数据 在这里插入图片描述

2.获取多个单元格 2.1 通过范围取值 from openpyxl import Workbook wb = Workbook() ws = wb.active i = 1 for x in range(1, 11): for y in range(1, 21): ws.cell(row=x, column=y, value=i) i += 1 # wb.save("test.xlsx") row_cells = ws[2] # 选取第2行(下标从1开始) print(row_cells) # 输出:(A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, N2, O2, P2, Q2, R2, S2, T2) col_cells = ws["b"] # 选取B列 print(col_cells) # 输出:(B1, B2, B3, B4, B5, B6, B7, B8, B9, B10) row_range_cells = ws[2:5] # 选取2、3、4、5共4行 print(row_range_cells) # 输出: # ((A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, N2, O2, P2, Q2, R2, S2, T2), # (A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, N3, O3, P3, Q3, R3, S3, T3), # (A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, N4, O4, P4, Q4, R4, S4, T4), # (A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, N5, O5, P5, Q5, R5, S5, T5)) col_range_cells = ws["B:D"] # 选取B、C、D共3列 print(col_range_cells) # 输出: # ((B1, B2, B3, B4, B5, B6, B7, B8, B9, B10), # (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10), # (D1, D2, D3, D4, D5, D6, D7, D8, D9, D10)) range_cells = ws["c3:f6"] # 选取 C3到F6区域共16个元素 print(range_cells) # 输出: # ((C3, D3, E3, F3), # (C4, D4, E4, F4), # (C5, D5, E5, F5), # (C6, D6, E6, F6))

1.以上输出应该类似、 ,为了好看,简化为A2、B2的形式 2.以上获取到的多个单元格,返回的是元组或元组套元组,可以通过遍历的方式访问或修改

2.2 通过iter_rows或iter_cols取值

iter_rows()与iter_cols()都可以指定最大最小的行列,下标从1开始 返回结果是生成器

... # wb.save("test.xlsx") cells = ws.iter_rows(min_row=1, max_row=3, min_col=2, max_col=5) for cell in cells: print(cell) # 输出: # (B1, C1, D1, E1) # (B2, C2, D2, E2) # (B3, C3, D3, E3) cells = ws.iter_cols(min_row=1, max_row=3, min_col=2, max_col=5) for cell in cells: print(cell) # 输出: # (B1, B2, B3) # (C1, C2, C3) # (D1, D2, D3) # (E1, E2, E3)

iter_cols和iter_rows都可以指定参数values_only=True,这样只返回值而不是cell对象

也可以使用rows或columns属性遍历全部行或列,values属性取出所有值,它们都得到迭代器,但是注意只读模式下columns属性无效

for cell in ws.rows: print(cell) for cell in ws.columns: print(cell) for row in ws.values: for value in row: print(value) 3.操作单元格 3.1合并单元格

合并单元格,会保留最左上角的单元格的数据和样式,其他单元格会被清空,即使取消合并。即,合并之后只保留左上角第一个单元格的数据和样式

from openpyxl import Workbook wb = Workbook() ws = wb.active i = 1 for x in range(1, 11): for y in range(1, 21): ws.cell(row=x, column=y, value=i) i += 1 print(ws["C2"].value) # 输出:23 ws.merge_cells("A1:F3") ws.unmerge_cells("A1:F3") print(ws["C2"].value) # 输出:None # 等同于下面的代码 # ws.merge_cells(start_row=1, start_column=1, end_row=3, end_column=6) # ws.unmerge_cells(start_row=1, start_column=1, end_row=3, end_column=6) wb.save("./test.xlsx") 3.2 删除或插入行列 from openpyxl import Workbook wb = Workbook() ws = wb.active i = 1 for x in range(1, 11): for y in range(1, 21): ws.cell(row=x, column=y, value=i) i += 1 ws.insert_cols(5) # 在第5列即E列插入1列,原来的E列及后面的列都往后移动 ws.insert_rows(2, 3) # 在第2行后面插入3行 ws.delete_cols(2, 3) # 从2列开始往后删除3列 ws.delete_rows(5, 3) # 从5行开始往后删除3行 wb.save("./test.xlsx") 3.3 移动单元格

可以使用move_range()合并指定范围的单元格,但是注意,如果移动到的位置原来有数据会被覆盖掉,移动之后公式会丢失,可以通过设置translate=True来更新,默认是False

from openpyxl import Workbook wb = Workbook() ws = wb.active i = 1 for x in range(1, 11): for y in range(1, 21): ws.cell(row=x, column=y, value=i) i += 1 ws.move_range("B1:D3", rows=6, cols=-1, translate=False) # 移动单元格,向下移动6行,向左移动1列 wb.save("./test.xlsx")


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有