Python利用openpyxl库写入或修改xlsx文件

写在前面

1、openpyxl库写入数据时,默认下标是从1开始,而不是习惯性的从0开始

常用函数

导入openpyxl

from openpyxl.reader.excel import load_workbook
from openpyxl.utils import column_index_from_string
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet

创建一个新的工作簿

相当于新建一个Excel文件

wb = Workbook()

获取工作表

默认名为Sheet

sheet: Worksheet = wb.active

修改表名称

sheet.title = "成绩汇总"

写入指定【单元格】

1. 字母+数字方式写入

字母不区分大小写

sheet['A1'] = "报考岗位代码"
sheet['B1'] = "准考证"
sheet['C1'] = "职业能力测验"
sheet['d1'] = "综合应用能力"
sheet['e1'] = "总成绩"

2.利用cell函数写入

row = 2  # 行,下标从1开始,第2行
column = 1  # 列,下标从1开始,第1列
sheet.cell(row, column, '15325002000000001')

row = 2  # 行,下标从1开始,第2行
column = 2  # 列,下标从1开始,第2列
sheet.cell(row, column, "1153481903719")
score = [107.5, 107.5, 215]
for i, s in enumerate(score):
    sheet.cell(2, i + 3, s)

按【行】写入

使用append函数,传递的参数为二维数组

使用场景:有很多行数据,并且每行的数据都是知道的,需要一行一行的录入

append会直接在有数据的下一行开始写入

data = [
    ['15325002000000001', '1153481903719', 107.5, 107.5, 215],
    ['15325002000000001', '1153481904705', 104, 105, 209],
    ['15325002000000001', '1153481907121', 82.5, 101, 183.5],
    ['15325002000000001', '1153481902605', 87, 95, 182],
]
for row_data in data:
    sheet.append(row_data)

按【列】写入

使用append函数,传递的参数为字典dict

使用场景:有很多行数据,但是每行的数据只有某一列,要提前录入

比如:只知道报考岗位代码,要先录入报考岗位代码

data = {'A': "15325002000000001"}
sheet.append(data)
data = {'A': "15325002000000002"}
sheet.append(data)
for i in range(3, 6):
    data = {'A': f"1532500200000000{i}"}
    sheet.append(data)

只写入某一列的数据

image-20260521184823127

从某个单元格开始写入数据

只需要拼接出cell函数的行号和列号,然后写入数据即可

data = [
    ['15325002000000003', '1153250101321', 101, 105, 206],
    ['15325002000000003', '1153481904926', 103.5, 102, 205.5],
    ['15325002000000003', '1153250104211', 94, 95, 189],
    ['15325002000000003', '1153481900102', 87.5, 98.5, 186],
    ['15325002000000003', '1153250104318', 78, 104, 182],
]
start_row = 16  # 从第16行开始写入
start_column = column_index_from_string('e')  # 从第A列开始写入
for i, row_data in enumerate(data):
    for j, cell_data in enumerate(row_data):
        sheet.cell(start_row + i, start_column + j, cell_data)

保存工作簿

wb.save("创建.xlsx")

修改工作簿数据

只需要把新建工作簿替换为加载已存在的工作簿即可

写入数据的函数不变,原有单元格数据被写入时就是覆盖!

打开已经存在的文件

wb = load_workbook("学生成绩汇总表.xlsx")=

加载表格

sheet = wb['表格1']

其他操作不变,例如

# 修改单元格

sheet['C2'] = '王明明'

# 修改单元格

sheet.cell(7, 5, '2088/8/8')
wb.save("覆盖.xlsx")

代码

# -*- coding: utf-8 -*-
"""
File Name: write_data.py
Author: Administrator
Date: 2026/5/16
"""
from openpyxl.reader.excel import load_workbook
from openpyxl.utils import column_index_from_string
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet


def main():
    # 创建一个新的工作簿(相当于新建一个Excel文件)
    wb = Workbook()

    # 获取工作表(默认名为Sheet)
    sheet: Worksheet = wb.active

    # 修改表名称
    sheet.title = "成绩汇总"

    # 写入指定【单元格】
    # 1.字母+数字方式写入,字母不区分大小写
    sheet['A1'] = "报考岗位代码"
    sheet['B1'] = "准考证"
    sheet['C1'] = "职业能力测验"
    sheet['d1'] = "综合应用能力"
    sheet['e1'] = "总成绩"

    # 2.利用cell函数写入
    row = 2  # 行,下标从1开始,第2行
    column = 1  # 列,下标从1开始,第1列
    sheet.cell(row, column, '15325002000000001')

    row = 2  # 行,下标从1开始,第2行
    column = 2  # 列,下标从1开始,第2列
    sheet.cell(row, column, "1153481903719")
    score = [107.5, 107.5, 215]
    for i, s in enumerate(score):
        sheet.cell(2, i + 3, s)

    # 按【行】写入
    # 使用append函数,传递的参数为二维数组
    # 使用场景:有很多行数据,并且每行的数据都是知道的,需要一行一行的录入
    # append会直接在有数据的下一行开始写入
    data = [
        ['15325002000000001', '1153481903719', 107.5, 107.5, 215],
        ['15325002000000001', '1153481904705', 104, 105, 209],
        ['15325002000000001', '1153481907121', 82.5, 101, 183.5],
        ['15325002000000001', '1153481902605', 87, 95, 182],
    ]
    for row_data in data:
        sheet.append(row_data)

    # 按【列】写入
    # 使用append函数,传递的参数为字典dict
    # 使用场景:有很多行数据,但是每行的数据只有某一列,要提前录入
    # 比如:只知道报考岗位代码,要先录入报考岗位代码
    data = {'A': "15325002000000001"}
    sheet.append(data)
    data = {'A': "15325002000000002"}
    sheet.append(data)
    for i in range(3, 6):
        data = {'A': f"1532500200000000{i}"}
        sheet.append(data)

    # 从某个单元格开始写入数据
    data = [
        ['15325002000000003', '1153250101321', 101, 105, 206],
        ['15325002000000003', '1153481904926', 103.5, 102, 205.5],
        ['15325002000000003', '1153250104211', 94, 95, 189],
        ['15325002000000003', '1153481900102', 87.5, 98.5, 186],
        ['15325002000000003', '1153250104318', 78, 104, 182],
    ]
    start_row = 16  # 从第16行开始写入
    start_column = column_index_from_string('e')  # 从第A列开始写入
    for i, row_data in enumerate(data):
        for j, cell_data in enumerate(row_data):
            sheet.cell(start_row + i, start_column + j, cell_data)

    # 保存工作簿
    wb.save("创建.xlsx")

    # 打开已经存在的文件
    wb = load_workbook("学生成绩汇总表.xlsx")
    # 加载表格
    sheet = wb['表格1']
    # 修改单元格
    sheet['C2'] = '王明明'
    # 修改单元格
    sheet.cell(7, 5, '2088/8/8')
    wb.save("覆盖.xlsx")


if __name__ == "__main__":
    main()

仓库地址

learn_openpyxl · 南风丶轻语/python-learning-notes - 码云 - 开源中国

posted @ 2026-05-21 18:51  南风丶轻语  阅读(78)  评论(0)    收藏  举报