python读取excel

openpyxl 库既可以读文件、也可以写文件、修改文件

安装该库

pip install openpyxl

参考文档英文

参考文档中文

openpyxl 库不支持老版本 Office2003 的 xls 格式的Excel文档,如果要读写xls格式的文档,

方法一:手动打开xls文件,然后另存为xlsx类型的文件

方法二:xls==>xlsx,使用pywin32模块进行转换,示例代码如下

复制代码
import os
import win32com.client as win32
filename
= r'C:\Users\XH\Desktop\1.xls' Excelapp = win32.gencache.EnsureDispatch('Excel.Application') workbook = Excelapp.Workbooks.Open(filename)
# 转xlsx时: FileFormat=51, workbook.SaveAs(filename.replace('xls', 'xlsx'), FileFormat=51)
# 如果想将xlsx的文件转换为xls的话,则可以使用以下的代码:
# workbook.SaveAs(filename.replace('xlsx', 'xls'), FileFormat=56)
workbook.Close()
Excelapp.Application.Quit()

#
删除源文件
# os.remove(filename)
复制代码

 

基础示例

复制代码
import openpyxl

# 创建一个Excel workbook 对象
book = openpyxl.Workbook()

# 创建时,会自动产生一个sheet,通过active获取
sh = book.active

# 修改当前 sheet 标题为 工资表
sh.title = '工资表'

# 保存文件
book.save('信息.xlsx')

# 增加一个名为 '年龄表' 的sheet,放在最后
sh1 = book.create_sheet('年龄表-最后')

# 增加一个 sheet,放在最前
sh2 = book.create_sheet('年龄表-最前',0)

# 增加一个 sheet,指定为第2个表单
sh3 = book.create_sheet('年龄表2',1)

# 根据名称获取某个sheet对象
sh = book['工资表']
# 获取sheet页方式二
# sh = book.get_sheet_by_name('工资表')
# 获取所有sheet页
# sh = book.sheetnames
# 给第一个单元格写入内容 sh['A1'] = '你好' # 获取某个单元格内容 print(sh['A1'].value)
# print(book.cell(row=1,column=1).value)
# 根据行号列号, 给第一个单元格写入内容, # 注意和 xlrd 不同,是从 1 开始 sh.cell(2,2).value = '天才九少'
# 根据行号列号, 获取某个单元格内容 print(sh.cell(1, 1).value) book.save('信息.xlsx')
复制代码

新建Excel,写入数据

写入字典数据

复制代码
import openpyxl

name2Age = {
    '张飞' :  38,
    '赵云' :  27,
    '许褚' :  36,
    '典韦' :  38,
    '关羽' :  39,
    '黄忠' :  49,
    '徐晃' :  43,
    '马超' :  23,
}

# 创建一个Excel workbook 对象
book = openpyxl.Workbook()

# 创建时,会自动产生一个sheet,通过active获取
sh = book.active

sh.title = '年龄表'

# 写标题栏
sh['A1'] =  '姓名'
# sh.cell(row=1, column=1) = '姓名' sh['B1'] = '年龄'
# 写入内容 row = 2 for name,age in name2Age.items(): sh.cell(row, 1).value = name sh.cell(row, 2).value = age row += 1 # 保存文件 book.save('信息.xlsx')
复制代码

写入列表/元组数据

复制代码
import openpyxl

name2Age = [
    ['张飞' ,  38 ] ,
    ['赵云' ,  27 ] ,
    ['许褚' ,  36 ] ,
    ['典韦' ,  38 ] ,
    ['关羽' ,  39 ] ,
    ['黄忠' ,  49 ] ,
    ['徐晃' ,  43 ] ,
    ['马超' ,  23 ]
]

# 创建一个Excel workbook 对象
book = openpyxl.Workbook()
sh = book.active
sh.title = '年龄表'

# 写标题栏
sh['A1'] =  '姓名'
sh['B1'] =  '年龄'

for row in name2Age:  # 使用append方法在sheet的末尾添加新行
    # 添加到下一行的数据
    sh.append(row)

# 保存文件
book.save('信息.xlsx')
复制代码

单元格获取

 

复制代码
# 访问A1至C3范围单元格
cell_range = ws2['A1':'C3']  # 切片方式
# 访问A列所有存在数据的单元格 colA = ws2['A']
# 访问A列到C列所有存在数据的单元格 col_range = ws2['A:C']
# 访问第1行所有存在数据的单元格 row1 = ws2[1]
# 访问第1行至第5行所有存在数据的单元格 row_range = ws2[1:5]
for each_cell in cell_range:  # 遍历 元组cell_range,colA
    for each in each_cell:
     print(each.value)

for each_cell in colA:
    print(each_cell.value)
复制代码

 

 

修改数据

  • 修改单元格内容
  • 插入行/列
  • 删除行/列
  • 样式风格
  • 背景色
  • 插入图片

修改单元格内容

复制代码
import openpyxl

# 加载 excel 文件
wb = openpyxl.load_workbook('income.xlsx')

# 得到sheet对象
sheet = wb['2017']

sheet['A1'] = '修改一下'

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
复制代码

插入行/列

sheet 对象的 inset_rows 和 insert_cols 方法,分别用来插入  行 列 

复制代码
import openpyxl

# 加载工作簿 wb
= openpyxl.load_workbook('income.xlsx') sheet = wb['2018'] # 在第2行的位置插入1行 sheet.insert_rows(2) # 在第3行的位置插入3行 sheet.insert_rows(3,3) # 在第2列的位置插入1列 sheet.insert_cols(2) # 在第2列的位置插入3列 sheet.insert_cols(2,3) ## 指定不同的文件名,可以另存为别的文件 wb.save('income-1.xlsx')
复制代码

删除行/列

sheet 对象的delete_rows 和 delete_cols方法,分别用来删除 和

复制代码
import openpyxl

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

# 在第2行的位置删除1行
sheet.delete_rows(2)

# 在第3行的位置删除3行
sheet.delete_rows(3,3)

# 在第2列的位置删除1列
sheet.delete_cols(2)

# 在第3列的位置删除3列
sheet.delete_cols(3,3)

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
复制代码

样式风格

单元格里面的样式风格(包括 颜色、字体、大小、下划线 等) 都是通过 Font对象设定的

复制代码
import openpyxl
# 导入Font对象 和 colors 颜色常量
from openpyxl.styles import Font,colors

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

# 指定单元格字体颜色,
sheet['A1'].font = Font(color=colors.RED, #使用预置的颜色常量
                        size=15,    # 设定文字大小
                        bold=True,  # 设定为粗体
                        italic=True # 设定为斜体
                        )

# 也可以使用RGB数字表示的颜色
sheet['B1'].font = Font(color="981818")

# 指定整行 字体风格, 这里指定的是第3行
font = Font(color="981818")
for y in range(1, 100): # 第 1 到 100 列
    sheet.cell(row=3, column=y).font = font

# 指定整列 字体风格, 这里指定的是第2列
font = Font(bold=True)
for x in range(1, 100): # 第 1 到 100 行
    sheet.cell(row=x, column=2).font = font

wb.save('income-1.xlsx')
复制代码

背景色

复制代码
import openpyxl
# 导入Font对象 和 colors 颜色常量
from openpyxl.styles import PatternFill

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

# 指定 某个单元格背景色
sheet['A1'].fill = PatternFill("solid", "E39191")

# 指定 整行 背景色, 这里指定的是第2行
fill = PatternFill("solid", "E39191")
for y in range(1, 100): # 第 1 到 100 列
    sheet.cell(row=2, column=y).fill = fill

wb.save('income-1.xlsx')
复制代码

插入图片

复制代码
import openpyxl
from openpyxl.drawing.image import Image

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

# 在第1行,第4列 的位置插入图片
sheet.add_image(Image('1.png'), 'D1')

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
复制代码

 

参考学习:

https://www.byhy.net/tut/py/extra/excel/

https://zhuanlan.zhihu.com/p/342422919

 

posted @   天才九少  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示