Python处理Excel
xlrd库 —— 读写Excel
安装xlrd库 :pip install xlrd==1.2.0
获取Book对象
import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(f"表单名分别为:{book.sheet_names()}")
>>> 表单名分别为:['2018', '2017', '2016']
获取Sheet表单对象
根据表单索引获取表单对象
import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheet_by_index(0))
>>> <xlrd.sheet.Sheet object at 0x000001F048839F40>
根据表单名获取表单对象
import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheet_by_name('2018'))
>>> <xlrd.sheet.Sheet object at 0x000001F048839F40>
获取所有表单对象,返回一个列表
import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheets())
>>> [<xlrd.sheet.Sheet object at 0x000001F048839F40>, <xlrd.sheet.Sheet object at 0x000001F048839F70>, <xlrd.sheet.Sheet object at 0x000001F048839FA0>]
获取完表单对象后,就可以获取表单行数、列数、表单名、表单索引
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
print(f"表单名:{sheet.name} ")
print(f"表单索引:{sheet.number}")
print(f"表单行数:{sheet.nrows}")
print(f"表单列数:{sheet.ncols}")
获取单元格内容
cell_value()指定单元格
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
# 行号、列号都是从0开始计算
print(f"单元格A1内容是: {sheet.cell_value(rowx=0, colx=0)}")
>>> 单元格A1内容是: 月份
row_values()指定行所有单元格内容,列表返回
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
# 行号、列号都是从0开始计算
print(f"第一行内容是: {sheet.row_values(rowx=0)}")
>>> 第一行内容是: ['月份', '收入']
col_values()指定列所有单元格内容,列表返回
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
# 行号、列号都是从0开始计算
print(f"第一列内容是: {sheet.col_values(colx=0)}")
>>> 第一列内容是: ['月份', 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]
获取指定范围内的数据
指定开始位置start_rowx(也可以指定结束位置end_rowx)
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
# 行号、列号都是从0开始计算
print(f"第一列内容是: {sheet.col_values(colx=0,start_rowx=1)}")
>>> 第一列内容是: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]
———————————————————————————————————————————
示例
enumerate()函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
enumerate(sequence);这里的参数sequence:一个序列、迭代器或其他支持迭代对象
seasons = ['Spring', 'Summer', 'Autumn', 'Winter']
# [(0, 'Spring'), (1, 'Summer'), (2, 'Autumn'), (3, 'Winter')]
print(list(enumerate(seasons)))
# [(1, 'Spring'), (2, 'Summer'), (3, 'Autumn'), (4, 'Winter')]
print(list(enumerate(seasons, start=1))) # 下标从1开始
参考自:[Python] enumerate()函数_python中for index, task in enumerate(tasks, start=1-CSDN博客
示例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)#收入在第2列
print(month,income)
toSubstract += income
print(f"2017年真实收入为: {int(sum(incomes)- toSubstract)}")
>>> 2017年账面收入为: 248634
6* 20774.0
2017年真实收入为: 227860
示例2.统计3年除去*月份收入的总和
import xlrd
book = xlrd.open_workbook("income.xlsx")
# 得到所有sheet对象
sheets = book.sheets()
incomeOf3years = 0#3年全部收入
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}')
>>> 3* 30105.0
7* 30109.0
2018年真实收入为: 301088
6* 20774.0
2017年真实收入为: 227860
9* 19374.0
2016年真实收入为: 213084
全部收入为742032
openpyxl库 —— 新建并写入
可读取、写入、修改文件
pip install openpyxl
新建Excel,写入数据
创建一个excel文件
import openpyxl
# 创建一个Excel workbook 对象
book = openpyxl.Workbook()
# 创建时,会自动产生一个sheet,通过active获取
sh = book.active
# 修改当前 sheet 标题为 工资表
sh.title = '工资表'
# 增加一个名为 '年龄表' 的sheet,放在最后
sh1 = book.create_sheet('年龄表-最后')
# 增加一个 sheet,放在最前
sh2 = book.create_sheet('年龄表-最前',0)
# 增加一个 sheet,指定为第2个表单
sh3 = book.create_sheet('年龄表2',1)
# 保存文件
book.save('信息.xlsx')
对单元格的操作
# 根据名称获取某个sheet对象
sh = book['工资表']
# 给第一个单元格写入内容
sh['A1'] = '你好'
# 获取某个单元格内容
print(sh['A1'].value)
# 根据行号列号, 给第一个单元格写入内容,注意和 xlrd 不同,是从 1 开始
sh.cell(2,2).value = '白月黑羽'#sh.cell(2,2,value='白月黑羽')
# 根据行号列号, 获取某个单元格内容
print(sh.cell(1, 1).value)
book.save('信息.xlsx')
示例
将字典中的年龄表的内容 写入到excel文件中
数据在字典里 —— items
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')
Python字典items()函数作用:以列表返回可遍历的(键,值)元组数组
dict = {'老大':'15岁',
'老二':'14岁',
'老三':'2岁',
'老四':'在墙上'
}
print(dict.items())
>>> dict_items([('老大', '15岁'), ('老二', '14岁'), ('老三', '2岁'), ('老四', '在墙上')])
参考自:Python 字典 items()方法的简单解析与用法-CSDN博客
数据在列表或元组里 —— append
import openpyxl
# name2Age = [
# ['张飞' , 38 ] ,
# ['赵云' , 27 ] ,
# ['许褚' , 36 ] ,
# ['典韦' , 38 ] ,
# ['关羽' , 39 ] ,
# ['黄忠' , 49 ] ,
# ['徐晃' , 43 ] ,
# ['马超' , 23 ]
# ]
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')
修改Excel内容
修改单元格内容
import openpyxl
# 加载 excel 文件
wb = openpyxl.load_workbook('income.xlsx')
# 得到sheet对象
sheet = wb['2017']
sheet['A1'] = '修改一下'
## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
在Excel表中插入行、插入列
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')
在Excel表中删除行、删除列
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
单元格里面的 样式风格
(包括 颜色、字体、大小、下划线 等) 都是通过 Font
对象设定的
import openpyxl
# 导入Font对象 和 colors 颜色常量
from openpyxl.styles import Font
wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']
# 指定单元格字体颜色,
sheet['A1'].font = Font(color="BD6C6C", #使用预置的颜色常量
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')
背景色 —— PatternFill
import openpyxl
# 导入Font对象 和 colors 颜色常量
from openpyxl.styles import PatternFill
wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']
# 指定 某个单元格背景色;solid固定该种颜色
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')
插入图片
原文地址:https://blog.csdn.net/m0_73557953/article/details/143000748
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!