boxmoe_header_banner_img

Hello! 欢迎少见的朋友!

加载中

文章导读

openpyxl使用笔记


avatar
言子渊 2025-11-12 48

#openpyxl 中主要用到 3 个概念是 Workbook、Sheet 和 Cell。 Workbook 是一个 Excel 工作簿(Excel 文件); openpyxl不支持旧的.xls格式。 如果需要读取旧的.xls文件,可以使用'xlrd'库。 如果需要写入旧的.xls文件,可以使用'xlwt'库。 如果数据量特别大,可以使用'Pandas'库,但是不如ipenpyxl精细,表格/数据级别,面向结构化数据,更适用于数据清洗、分析、汇总、批量转换. Sheet 是工作簿中的一张表; Cell 是一个简单的单元格。 openpyxl 就是围绕着这 3 个概念进行操作的,不论读写,操作步骤都是打开 Workbook,定位 Sheet,操作 Cell。 openpyxl 中有 3 个不同层次的类,Workbook 是对工作簿的抽象,Worksheet 是对工作表的抽象,Cell 是对单元格的抽象。这 3 个类中每一个类都包含很多属性和方法。

import openpyxl 导入整个库

导入已有工作簿

wb_exist = openpyxl.load_workbook('122.xlsx')
    使用openpyxl库的load_workbook方法打开已有的'122.xlsx'文件,并且定义   
    为wb_exist 变量

新建空白工作簿

wb_new = openpyxl.Workbook()
    使用openpyxl库的Workbook 方法新建一个工作簿,并且定义为 wb-new变量

操作工作表

获取所有工作表 : sheetnames     ,执行 print(wb_exist.sheetnames),   

    会打印一个 ['Sheet1', 'Sheet2', 'Sheet3']列表

获取活动工作表:sheet = workbook.active          ,使用avtive方法

    让workbook的工作簿目前活跃的工作表(sheet)页,作为活跃(操作)工作表,
    并且把这个工作表作为sheet变量.

创建新工作表:workbook.create_sheet(title='新工作表名称')
删除工作表:del workbook['要删除的工作表名称']  /   workbook.remove(workbook['要删除的工作表名称'])
获取或设置工作表的标题  ws = workbook.active  # 先获取工作表    ws.title = "Data"     # 然后设置标题

单元格读写 通过'A1'这种坐标方式进行读取和写入.

    ASKDJ = sheet['A1']
    ASKDJ.value = 'yanziyuan'    
    把sheet页的A1单元格作为ASKDJ变量, 然后使用value方法对这个变量赋值
        为'yanziyuan',            可以使用print(ASKDJ.value) 打印出来
    也可以 sheet['A1'].value = 'yanziyuan'      来完成,
    用print(sheet['A1'].value)  来打印输出.
    这样可以减少变量.同时也可以把"'A1'"  和"'yanziyuan'"作为变量,来引入其他修改功能.
通过行号列号写入.
    sheet.cell(1, 1, 'Hello')      
    执行可以直接写入到sheet工作表的第一行,第一列单元格,但是不能使用(A,1),需要数字序号.
        即cell(row, column, value)先行号,后列号(而非列标),再赋值.
        #如A1  1为行号,A为列标.
        print(sheet.cell(row=1, column=1).value)进行输出读取,
        同样可以使用变量进行动态.

在表格末尾添加整行数据.

sheet.append(['A', 'B', 'C'])

此操作是用通用的append 来添加,即在sheet页中的第一个可用行开始按列表把 每一项填写在整行中. 如果使用[['A', 'B', 'C'],['A', 'B', 'C'],['A', 'B', 'C']]此类嵌套列表 进行区域填充,需要使用for循环来写入区域,不能直接写入.

# 读取第1行到第5行,第1列到第3列的单元格值,输出为元组(使用 iter_rows() 或 iter_cols() 是处理大量数据的最佳实践)

for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3, values_only=True):
print(row)
# 输出示例: ('值A1', '值B1', '值C1')

# 从第2行开始,A列10 B列值为20,C列值为30

new_data = [('A', 10), ('B', 20), ('C', 30)]
for row_index, (col1_val, col2_val) in enumerate(new_data, start=2): #第二行开始
    sheet.cell(row=row_index, column=1, value=col1_val)
    sheet.cell(row=row_index, column=2, value=col2_val)

# 遍历所有行

for row in sheet.iter_rows(values_only=True):
    print(row)

# 遍历特定范围

for row in sheet.iter_rows(min_row=2, max_row=10, min_col=1, max_col=5, values_only=True):
    print(row)

# 必须保存修改才会生效

wb.save('filename.xlsx')

# 保存为新文件

wb.save('new_filename.xlsx')

# 获取最大行和列

max_row = sheet.max_row
max_column = sheet.max_column
print(f"工作表尺寸: {max_row}行 × {max_column}列")

# 获取当前活动工作表

active_sheet = wb.active

# 选择特定工作表

specific_sheet = wb['Sheet1']

# 检查工作表是否存在

if 'Sheet1' in wb.sheetnames:
    print("Sheet1 exists")

# 复制工作表

source = wb['Sheet1']
target = wb.copy_worksheet(source)

# 对于大文件,使用只读模式

wb = openpyxl.load_workbook('非常大的文件.xlsx', read_only=True)

# 对于只写操作,使用只写模式

wb = openpyxl.load_workbook('large_file.xlsx', write_only=True)

#公式处理:读取计算结果,用load_workbook读取包含公式的单元格时,默认读到的是公式本身(如=SUM(A1:A10))。如果想直接拿到计算结果,需要加上data_only=True参数

wb = openpyxl.load_workbook('包含公式的文件.xlsx', data_only=True) 

如果这个Excel文件从未被Excel应用程序打开并计算过,用此方式读取到的结果可能是None

#调整行高与列宽

ws.row_dimensions[1].height = 30  # 设置第1行的行高
ws.column_dimensions['A'].width = 20  # 设置A列的列宽

#单元格格式与保护

cell.number_format = '0.00%'  # 设置为百分比格式,保留两位小数
ws.protection.sheet = True  # 启用工作表保护
ws.protection.password = '你的密码'  # 设置密码(可选)

# 设置字体和样式

    from openpyxl.styles import Font, Alignment
cell = sheet['A1']
cell.font = Font(bold=True, size=12)
cell.alignment = Alignment(horizontal='center')

# 错误处理

try:
wb = openpyxl.load_workbook('file.xlsx')
except FileNotFoundError:
print("文件不存在")
except Exception as e:
print(f"读取文件时出错: {e}")



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码