前言:日常工作中,我们常常会碰到需要汇总大批量的表格数据,这时候如果单纯靠人工去手动汇总的话会花费大量的时间和精力。而学会 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)
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

flechazo 微信支付

微信支付

flechazo 支付宝

支付宝

flechazo 贝宝

贝宝