python用openpyxl操作excel

本文详细介绍如何使用Python库openpyxl进行Excel文件的操作,包括创建、读取、修改工作簿,以及单元格数据的赋值、表达式输入和保存等。同时,还介绍了如何遍历工作表、操作单元格和范围,以及使用iter_rows和iter_cols方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装

$ pip install openpyxl

例子1:创建一个工作簿

from openpyxl import Workbook
wb = Workbook()
# 激活 workbook
ws = wb.active
# 数据可以直接分配到单元格中
ws['A1'] = 42
# 可以附加行,从第一列开始附加
ws.append([1,2,3])
# Python 类型会被自动转换
import datetime
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
# 向A1到A10添加数据(range(10)=[0,1,2,3,4,5,6,7,8,9])
for i in range(10):
    ws['D%d' % (i+1)] = i + 1
# 向excel表中输入表达式
ws['E2'] = '=SUM(A:A)'
# 保存文件
wb.save("sample.xlsx")

打开Excel如下:

例子2:打开一个工作簿

# -*- coding:utf-8 -*-
 
# 导入
from openpyxl import workbook
from openpyxl import load_workbook
 
# 打开一个工作薄
wb = load_workbook('F:/Py/Demo/Excel/sample.xlsx')
# 此处填绝对路径,填相对路径可能会报错KeyError: 'Worksheet Sheet1 does not exist.'
# 如果是在sample.xlsx同级目录下打开的终端,则可以写相对路径'sample.xlsx'
# 获取一张表
sheet = wb.get_sheet_by_name("Sheet1")
# 获取A1格的值
print sheet['A1'].value
# 获取表的最大工作行数
print sheet.max_row
# 获取表的最大工作列数 
print sheet.max_column
# 打印C列的所有内容(以下格式代表不换行)
for i in sheet["C"]:
    print i.value, '   ',
print ''
# 打印1行的所有内容
for i in sheet["1"]:
    print i.value, '   ',
print ''

worksheet

创建工作表:

ws1 = wb.create_sheet("Mysheet") #插入到最后(default)
#或者
ws2 = wb.create_sheet("Mysheet", 0) #插入到最开始的位置

创建的sheet的名称会自动创建,按照sheet,sheet1,sheet2自动增长,通过title属性可以修改其名称:

# 更改表名
ws1.title = "New Title"

默认的sheet的tab是白色的,可以通过 RRGGBB颜色来修改sheet_properties.tabColor属性从而修改sheet tab按钮的颜色:

ws1.sheet_properties.tabColor = "1072BA"

查看所有工作表名:

sheets = wb.sheetnames
print sheets
# ['Sheet2', 'New Title', 'Sheet1']

# 遍历工作表
for sheet in wb:
    print sheet.title

操作数据

操作单元格:

# 取值
c = ws['A4']

# 赋值
ws['A4'] = 4

使用openpyxl.worksheet.Worksheet.cell()方法操作某行某列的某个值:

ws.cell(row=4,column=2,value=10)

# 创建100*100cells的工作表
for i in range(1,101):
    for j in range(1,101):
        ws.cell(row=i, column=j)
# 不指定值也会创建

访问多个cells

cell_range = ws['A1':'C2']

colC = ws['C']
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[5:10]

也可以使用 openpyxl.worksheet.Worksheet.iter_rows() 方法:(需要指定行->行,截止列)

for row in ws.iter_rows(min_row=1,max_col=3,max_row=2)
    for cell in row:
        print(cell)

# <Cell Sheet1.A1>
# <Cell Sheet1.B1>
# <Cell Sheet1.C1>
# <Cell Sheet1.A2>
# <Cell Sheet1.B2>
# <Cell Sheet1.C2>

# 同理可以使用openpyxl.worksheet.Worksheet.iter_cols()
# row行,col列

如果你需要遍历所有文件的行或列,可以使用openpyxl.worksheet.Worksheet.rows() 属性:

ws = wb.active
ws['C9'] = 'hello world'
tuple(ws.rows)
# tuple() 是将列表转化成元组

#tuple()插曲
tuple([1,2,3,4])
# (1, 2, 3, 4)
tuple({1:2,3:4})    #针对字典 会返回字典的key组成的tuple
# (1, 3)
tuple((1,2,3,4))    #元组会返回元组自身
# (1, 2, 3, 4)

'''
((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值