展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

读写excel

  • xlrd 新版本只支持 xls 格式,所以我们这里指定安装 1.2.0 老版本,可以支持xlsx格式
pip install xlrd==1.2.0
  • 新建income.xlsx,放到代码同一目录

  • 官方文档

  • 案例1:计算2017年的收入

import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_name('2017')
# 收入在第2列
incomes = sheet.col_values(colx=1,start_rowx=1)
print(f"2017年账面收入为: {int(sum(incomes))}")
# 去掉包含星号的月份收入
toSubstract = 0
# 月份在第1列
monthes = sheet.col_values(colx=0)
for row,month in enumerate(monthes):
if type(month) is str and month.endswith('*'):
income = sheet.cell_value(row,1)
print(month,income)
toSubstract += income
print(f"2017年真实收入为: {int(sum(incomes)- toSubstract)}")
  • 案例2:计算3年收入
import xlrd
book = xlrd.open_workbook("income.xlsx")
# 得到所有sheet对象
sheets = book.sheets()
incomeOf3years = 0
for sheet in sheets:
# 收入在第2列
incomes = sheet.col_values(colx=1,start_rowx=1)
# 去掉包含星号的月份收入
toSubstract = 0
# 月份在第1列
monthes = sheet.col_values(colx=0)
for row,month in enumerate(monthes):
if type(month) is str and month.endswith('*'):
income = sheet.cell_value(row,1)
print(month,income)
toSubstract += income
actualIncome = int(sum(incomes)- toSubstract)
print(f"{sheet.name}年真实收入为: {actualIncome}")
incomeOf3years += actualIncome
print(f'全部收入为{incomeOf3years}')
  • 安装库
pip install openpyxl
xlrd 只能读取Excel内容,如果你要 创建 一个新的Excel并 写入 数据,可以使用 openpyxl 库。
openpyxl 库既可以读文件、也可以写文件、也可以修改文件。
但是,openpyxl 库不支持老版本 Office2003 的 xls 格式的Excel文档,如果要读写xls格式的文档,可以使用 Excel 进行相应的格式转化。
  • 案例3:新建、写入、读取操作
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['工资表']
# 给第一个单元格写入内容
sh['A1'] = '你好'
# 获取某个单元格内容
print(sh['A1'].value)
# 根据行号列号, 给第一个单元格写入内容,
# 注意和 xlrd 不同,是从 1 开始
sh.cell(2,2).value = '白月黑羽'
# 根据行号列号, 获取某个单元格内容
print(sh.cell(1, 1).value)
book.save('信息.xlsx')
  • 案例4:写入
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['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')
  • 案例5:写入
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:
# 添加到下一行的数据
sh.append(row)
# 保存文件
book.save('信息.xlsx')
  • 修改
import openpyxl
# 加载 excel 文件
wb = openpyxl.load_workbook('income.xlsx')
# 得到sheet对象
sheet = wb['2017']
sheet['A1'] = '修改一下'
## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
  • 插入
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')
  • 删除
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')
  • 设置文字样式
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')
posted @   DogLeftover  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2022-10-07 整合springboot
2022-10-07 快速失败、非bean入参校验
2022-10-07 分组校验、级联校验、自定义验证规则
点击右上角即可分享
微信分享提示