前言:日常工作中,我们常常会碰到需要汇总大批量的表格数据,这时候如果单纯靠人工去手动汇总的话会花费大量的时间和精力。而学会 Python 了之后,这些可以在很短的时间内搞定,能大大地提高工作效率。接下来就好好介绍一下用 Python 处理那些 Excel 文件需要掌握的基本操作。学会以下这些,你也能一顿操作猛如虎!
日常工作中,我们常常会碰到需要汇总大批量的表格数据,这时候如果单纯靠人工去手动汇总的话会花费大量的时间和精力。而学会 Python 了之后,这些可以在很短的时间内搞定,能大大地提高工作效率。接下来就好好介绍一下用 Python 处理那些 Excel 文件需要掌握的基本操作。学会以下这些,你也能一顿操作猛如虎!
缘起:工作中,我们常常会碰到需要汇总大批量的表格数据,这时候如果单纯靠人工去机械汇总的话会花费大量的时间和精力。而学会 Python 了之后,这些可以在很短的时间内搞定,能大大地提高工作效率。接下来就好好介绍一下用 Python 处理那些 Excel 文件需要掌握的基本操作。学会以下这些,你也能一顿操作猛如虎啦!
首先,你需要知道 Python 处理 excel 文件的有两个基本模块,分别是 xlrd 和 openpyxl 模块。那这两个模块有什么区别呢?
xlrd 只能读取 excel 文件,支持 **xls,xlsx (需要安装 xlrd2)** 格式的 excel 文件。
openpyxl 可读可写可修改,但不能读取 xls 格式的 excel 文件。
# 一、这里开始介绍 xlrd 模块读取 excel 文件的基本语法:
# 1、创建 book 对象及它的一些属性和方法
import xlrd | |
#通过 open_workbook () 方法获取一个 book 对象 | |
book=xlrd.open_workbook(r'E:\日记账2020年.xls') | |
print(book.nsheets)#工作表数量 | |
print(book.sheet_names())#获取所有表单名,并以列表形式返回 | |
print(book.sheets())#获取所有表单,并以类对象 (可迭代) 形式返回 | |
for ss in book.sheets(): | |
print(ss.name)#依次打印所有表单名 |
# 2、创建 sheet 对象及它的一些属性
#通过 sheet_by_name (name),sheet_by_index (index) 获取一个表单对象 | |
sheet1=book.sheet_by_name('现金') | |
sheet2=book.sheet_by_index(1) | |
print(sheet1.name)#表单名称 | |
print(sheet2.number)#表单索引 | |
print(sheet1.nrows)#表单行数 | |
print(sheet1.ncols)#表单列数 |
# 3、sheet 对象获取值
#通过 cell_value (rowx=n,clox=n) 来获取单元格值 | |
print(sheet1.cell_value(0,0))#行数,列数都以 0 开始 | |
#通过 row_values (rowx=n),col_values (rowx=n) 方法返回第 n 行,第 n 列的数据(列表形式) | |
print(sheet1.row_values(8))#获取第 9 行数据 | |
print(sheet1.row_values(8,start_colx=1))#获取第 9 行但从第 2 列开始数据 | |
print(sheet1.col_values(8))#获取第 9 列数据 | |
print(sheet1.col_values(8,start_rowx=1))#获取第 9 列但从第 2 行开始数据 |
# 二、下面是 openpyxl 模块读取 excel 文件的基本语法:
# 1、创建 book 和 sheet 对象及它们的一些属性和方法
import openpyxl | |
#通过 Workbook 方法创建一个 book 对象 | |
book=openpyxl.Workbook() | |
#通过 active 方法返回一个 sheet 对象 | |
sh=book.active | |
# 修改当前 sheet 标题为 工资表 | |
sh.title='工资表' | |
# 增加一个名为 ' 年龄表 ' 的 sheet,放在最后 | |
sh1=book.create_sheet('年龄表')#不加参数默认放在最后,前面没有 active 方法也会生成一个默认 Sheet 的表单 | |
# 增加一个 sheet,放在最前 | |
sh2=book.create_sheet('性别表',0) | |
# 增加一个 sheet,指定为第 2 个表单 | |
sh3=book.create_sheet('姓名表',1) | |
#获取所有 sheet 对象 | |
sheet_names=book.sheetnames | |
# 根据名称获取某个 sheet 对象 | |
sh=book['工资表'] | |
# 给第一个单元格写入内容 | |
sh['A1']='星期日' | |
# 获取某个单元格内容 | |
print(sh['A1'].value) | |
# 根据行号列号, 给第一个单元格写入内容, | |
# 注意和 xlrd 模块不同,是从 1 开始 | |
sh.cell(2,2).value='100' | |
# 根据行号列号, 获取某个单元格内容 | |
print(sh.cell(2,2).value) | |
# 保存文件 | |
book.save(r'E:\日记账2020年.xlsx') |
# 2、可以用 append 方法写入数据
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') |
# 3、修改 Excel 中的数据 (load_workbook 方法打开一个 excel 文件)
#使用 load_workbook 方法打开一个 excel 文件 | |
book1=openpyxl.load_workbook(r'E:\工资表.xlsx') | |
sh=book1['工资表'] | |
sh['A1']='星期日' | |
sh.cell(2,2).value='100' | |
# 在第 2 行的位置插入 1 行 | |
sh.insert_rows(2) | |
# 在第 3 行的位置插入 3 行 | |
sh.insert_rows(3,3) | |
# 在第 2 列的位置插入 1 列 | |
sh.insert_cols(2) | |
# 在第 2 列的位置插入 3 列 | |
sh.insert_cols(2,3) | |
# 在第 2 行的位置删除 1 行 | |
sh.delete_rows(2) | |
# 在第 3 行的位置删除 3 行 | |
sh.delete_rows(2,3) | |
# 在第 2 列的位置删除 1 列 | |
sh.delete_cols(2) | |
# 在第 3 列的位置删除 3 列 | |
sh.delete_cols(2,3) | |
#可以另存为其他表名 | |
book1.save(r'E:\工资表2.xlsx') | |
#删除某一工作表 | |
## 方法一 | |
del book1['工资表'] | |
## 方法二 | |
book1.remove('工资表') | |
#复制一个工作表(注意只能在同一个 book 对象间复制) | |
cp_sh = book1.copy_worksheet(sh) | |
print(cp_sh.title) #输出:工资表 Copy | |
cp_sh.title = '工资表2' #修改表名 |
好了,以上如果有什么问题或者不懂的地方,欢迎在下方留言或者私信告诉我,我一定会一一进行回答。
# Python 写 excel——xlwt
Python 写 excel 的难点不在构造一个 workbook 的本身,而是填充的数据,不过这不在范围内。在写 excel 的操作中也有棘手的问题,比如写入合并的单元格就是比较麻烦的,另外写入还有不同的样式。
详细代码如下:
import xlwt | |
#设置表格样式 | |
def set_style(name,height,bold=False): | |
style = xlwt.XFStyle() | |
font = xlwt.Font() | |
font.name = name | |
font.bold = bold | |
font.color_index = 4 | |
font.height = height | |
style.font = font | |
return style | |
#写 Excel | |
def write_excel(): | |
f = xlwt.Workbook() | |
sheet1 = f.add_sheet('学生',cell_overwrite_ok=True) | |
row0 = ["姓名","年龄","出生日期","爱好"] | |
colum0 = ["张三","李四","恋习Python"] | |
#写第一行 | |
for i in range(0,len(row0)): | |
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True)) | |
#写第一列 | |
for i in range(0,len(colum0)): | |
sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True)) | |
sheet1.write(1,3,'2006/12/12') | |
sheet1.write_merge(6,6,1,3,'未知')#合并行单元格 | |
sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格 | |
sheet1.write_merge(4,5,3,3,'打篮球') | |
f.save('test.xls') | |
if __name__ == '__main__': | |
write_excel() |
# Python 读 excel——xlrd
Python 读取 Excel 表格,相比 xlwt 来说,xlrd 提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期、读合并单元格内容。
图表数据
整体思路为,打开文件,选定表格,读取行列内容,读取表格内数据
详细代码如下:
import xlrd | |
from datetime import date,datetime | |
file = 'test3.xlsx' | |
def read_excel() | |
wb = xlrd.open_workbook(filename=file)#打开文件 | |
print(wb.sheet_names())#获取所有表格名字 | |
sheet1 = wb.sheet_by_index(0)#通过索引获取表格 | |
sheet2 = wb.sheet_by_name('年级')#通过名字获取表格 | |
print(sheet1,sheet2) | |
print(sheet1.name,sheet1.nrows,sheet1.ncols) | |
rows = sheet1.row_values(2)#获取行内容 | |
cols = sheet1.col_values(3)#获取列内容 | |
print(rows) | |
print(cols) | |
print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式 | |
print(sheet1.cell_value(1,0)) | |
print(sheet1.row(1)[0].value) |