【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格 | 您所在的位置:网站首页 › 怎么读取表格中多列相关数据的内容 › 【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格 |
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列)单元格的数据 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 实验室设备网 版权所有 |