资讯专栏INFORMATION COLUMN

python实现——处理Excel表格(超详细)

Richard_Gao / 2087人阅读

摘要:目录和基本操作用模块打开文档,查看所有表通过名称获取表格获取活动表获取表格的尺寸获取单元格中的数据获取单元格的行列坐标获取区间内的数据获取指定区间的数据获取指定行列的数据按行列获取值获取活动表的行列数操作创建新的修改单

  • 一个Excel电子表格文档称为一个工作簿
  • 一个工作簿保存在一个扩展名为.xlsx的文件中
  • 一个工作簿可以包含多个表
  • 用户当前查看的表(或关闭Excel前最后查看的表)称为活动表
  • 在特定行和列的方格称为单元格、格子

处理Excel表格需要用到openpyxl模块,该模块需要手动安装pip install openpyxl

xls和xlsx

简单来说:
xls是excel2003及以前版本所生成的文件格式
xlsx是excel2007及以后版本所生成的文件格式
(excel 2007之后版本可以打开上述两种格式,但是excel2013只能打开xls格式)
进一步的详细解释参见:excel后缀.xls和.xlsx有什么区别

基本操作

用到的test.xlsx表格
在这里插入图片描述

1:用openpyxl模块打开Excel文档,查看所有sheet表

openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件,这个有点类似File对象代表一个打开的文本文件。

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")	# 返回一个workbook数据类型的值print(workbook.sheetnames)	# 打印Excel表中的所有表# 结果:# ["Sheet1", "Sheet2"]

2.1:通过sheet名称获取表格

在第10行,使用workbook["Sheet1"]获取指定sheet表

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值print(workbook.sheetnames)  # 打印Excel表中的所有表sheet = workbook["Sheet1"]  # 获取指定sheet表print(sheet)# 结果:# ["Sheet1", "Sheet2"]# 

2.2:获取活动表

使用workbook.active获取活动表

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active     # 获取活动表print(sheet)# 结果:# 

3.1:获取表格的尺寸

这里所说的尺寸大小,指的是excel表格中的数据有几行几列,针对的是不同的sheet而言
使用sheet.dimensions获取表格的尺寸
下面打印的A1:B7是什么意思呢?

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook["Sheet1"]  # 获取指定sheet表print(sheet.dimensions)     # 获取表格的尺寸大小# 结果:# A1:B7

4.1:获取单元格中的数据

方法1:指定坐标的方式
sheet[“A1”]

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active     # 获取活动表# print(sheet.dimensions)     # 获取表格的尺寸大小cell1 = sheet["A1"]         # 获取A1单元格的数据cell2 = sheet["B7"]         # 获取B7单元格的数据# cell2 = sheet["B7"].value		# 另一种写法# 正确示范# cell1.value获取单元格A1中的值# cell2.value获取单元格B7中的值print(cell1.value,cell2.value)  # 姓名 18# 错误示范print(cell1,cell2)  #  

方法2: 指定行列的方式
sheet.cell(row=, column=)方式

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active     # 获取活动表# print(sheet.dimensions)     # 获取表格的尺寸大小cell1 = sheet.cell(row=1,column=1)         # 获取第1行第1列的数据cell2 = sheet.cell(row=3,column=2)         # 获取第3行第4的数据# 正确示范# cell1.value获取单元格A1中的值# cell2.value获取单元格B7中的值print(cell1.value,cell2.value)  # 姓名 41

4.2:获取单元格的行、列、坐标

  • .row 获取某个格子的行数;
  • .columns 获取某个格子的列数;
  • .corordinate 获取某个格子的坐标;
import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表# print(sheet.dimensions)     # 获取表格的尺寸大小cell = sheet.cell(row=3, column=2)  # 获取第3行第4的数据print(cell.value, cell.row, cell.column, cell.coordinate)"""结果:41 3 2 B3"""

5:获取区间内的数据

获取单行单列数据的时候,使用一层for循环;获取多行多列、指定区间的数据时,使用两层for循环

获取指定区间的数据

  1. 使用sheet["A1:A5"]拿到指定区间
  2. 使用两个for循环拿到数据
import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:")print(sheet)cell = sheet["A1:A5"]  # 获取A1到A5的数据print(cell)# 打印A1到A5的数据for i in cell:    for j in i:        print(j.value)# 结果:# 当前活动表是:# # ((,), (,), (,), (,), (,))# 姓名# 张三# 李四# 王五# 赵六

获取指定行列的数据

  • sheet[“A”] — 获取A列的数据
  • sheet[“A:C”] — 获取A,B,C三列的数据
  • sheet[5] — 只获取第5行的数据

下面的代码,获取一列数据的时候,使用一层for循环

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))cell = sheet["2"]  # 获取第2行的数据# 打印A1到A5的数据for i in cell:    print(i.value)# 结果:# 当前活动表是:# 张三# 74

下面代码,获取两列数据的时候,使用两层for循环。注意到,两列的结果打印到一起了,可读性较差

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))cell = sheet["A:B"]  # 获取AB列的数据# 打印AB列数据for i in cell:    for j in i:        print(j.value)# 结果:# 当前活动表是:# 姓名# 张三# 李四# 王五# 赵六# alice# bob# 年龄# 74# 41# 56# 12# 17# 18

按行、列获取值

iter_rows():按行读取
iter_cols():按列读取

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))# 按行获取值print("按行获取值")for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2):    for j in i:        print(j.value)# 按列获取值print("按列获取值")for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):    for j in i:        print(j.value)# 结果:# 当前活动表是:# 按行获取值# 张三# 74# 李四# 41# 王五# 56# 赵六# 12# 按列获取值# 张三# 李四# 王五# 赵六# 74# 41# 56# 12

获取活动表的行列数

方法1:使用
sheet.max_row 获取行数
sheet.max_column 获取列数

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("2.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))rows = sheet.max_row        # 获取行数column = sheet.max_column   # 获取列数print(rows)print(column)"""结果:当前活动表是:3816"""

方法2:自己写一个for循环

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))row = []column = []# 获取当前活动表有多少行for i in sheet.rows:    row.append(list(i))         # i是元组类型,转为列表# 获取当前活动表有多少列for i in sheet.columns:    column.append(list(i))    # i是元组类型,转为列表print("行数:"+str(len(row)))print("列数:"+str(len(column)))"""结果:当前活动表是:行数:12列数:3"""

操作

创建新的excel

第9行代码用来指定创建的excel的活动表的名字:

  • 不写第9行,默认创建sheet
  • 写了第9行,创建指定名字的sheet表
import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.Workbook()sheet = workbook.activesheet.title = "1号sheet"workbook.save("1.xlsx")

修改单元格、excel另存为

第9行代码,通过给单元格重新赋值,来修改单元格的值
第9行代码的另一种写法sheet["B1"].value = "age"
第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表sheet["A1"] = "name"workbook.save("test.xlsx")

添加数据

插入有效数据

使用append()方法,在原来数据的后面,按行插入数据

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))data = [    ["素子",23],    ["巴特",24],    ["塔奇克马",2]]for row in data:    sheet.append(row)   # 使用append插入数据workbook.save("test.xlsx")

插入空行空列

  • insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入
  • insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入
import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))sheet.insert_rows(idx=3, amount=2)sheet.insert_cols(idx=2, amount=1)workbook.save("test.xlsx")

删除行、列

  • delete_rows(idx=数字编号, amount=要删除的行数)
  • delete_cols(idx=数字编号, amount=要删除的列数)
import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))sheet.delete_rows(idx=10)           # 删除第10行sheet.delete_cols(idx=1, amount=2)  # 删除第1列,及往右共2列workbook.save("test.xlsx")

移动指定区间的单元格(move_range)

move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上

import osimport openpyxlpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))sheet.move_range("D11:F12",rows=0,cols=-3)  # 移动D11到F12构成的矩形格子workbook.save("test.xlsx")

字母列号与数字列号之间的转换

核心代码

from openpyxl.utils import get_column_letter, column_index_from_string# 根据列的数字返回字母print(get_column_letter(2))  # B# 根据字母返回列的数字print(column_index_from_string("D"))  # 4

举个例子:

import osimport openpyxlfrom openpyxl.utils import get_column_letter, column_index_from_stringpath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("2.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:" + str(sheet))# 根据列的数字返回字母print(get_column_letter(2))  # B# 根据字母返回列的数字print(column_index_from_string("D"))  # 4

字体样式

查看字体样式

import osimport openpyxlimport openpyxl.stylespath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是:"+str(sheet))cell = sheet["A1"]font = cell.fontprint("当前单元格的字体样式是")print(font.name, font.size, font.bold, font.italic, font.color)"""当前活动表是:当前单元格的字体样式是等线 11.0 False False Parameters:rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type="theme""""

修改字体样式

openpyxl.styles.Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)
其中,字体颜色中的color是RGB的16进制表示

import osimport openpyxlimport openpyxl.stylespath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print(sheet)cell = sheet["A1"]cell.font = openpyxl.styles.Font(name="微软雅黑", size=20, bold=True, italic=True, color="FF0000")workbook.save("test.xlsx")

再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法

import osimport openpyxlimport openpyxl.stylespath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print(sheet)cell = sheet["A"]for i in cell:    i.font = openpyxl.styles.Font(name="微软雅黑", size=20, bold=True, italic=True, color="FF0000")workbook.save("test.xlsx")

设置对齐格式

Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)
水平对齐:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,"right,‘general’
垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’

import osimport openpyxl.stylespath = r"C:/Users/asuka/Desktop"os.chdir(path)  # 修改工作路径workbook = openpyxl.load_workbook("test.xlsx")  # 返回一个workbook数据类型的值sheet = workbook.active  # 获取活动表print("当前活动表是&#           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122569.html

相关文章

  • 如何利用python读取excel表格?下文给大家详细解答

      小编写这篇文章的一个主要目的,主要就是给大家去做一个解答,接的内容主要是利用python去读取excel表格,那么,怎么才能快速的实现这个操作呢?下面就给大家详细解答下。  一、python读取excel表格数据  1、读取excel表格数据常用操作  importxlrd   #打开excel表格   data_excel=xlrd.open_workbook('data/datas...

    89542767 评论0 收藏0
  • python3与Excel的完美结合

    摘要:对象也有和属性提供该单元格的位置信息。读取对象的属性一个完整的案例代码如下读取文档返回一个对象,有点类似于文件对象在工作薄中取得工作表返回一个列表,存储表中所有的工作表返回一个对象,返回当前的活动表获取工作表中,单元格的信息的属性 Excel 是 Windows 环境下流行的、强大的电子表格应用。openpyxl 模块让 Python 程序能读取和修改 Excel 电子表格文件。例如,...

    enrecul101 评论0 收藏0
  • python实现读取excel表格详解方法

      小编写这篇文章的主要目的,主要是给大家讲解关于python的一些知识,讲解的内容是关于如何读取excel表格的一些详细方法,请大家要仔细阅读哦。  一、python读取excel表格数据  1、读取excel表格数据常用操作  importxlrd   #打开excel表格   data_excel=xlrd.open_workbook('data/dataset.xlsx')...

    89542767 评论0 收藏0
  • python 让挑选家具更方便

    摘要:也浏览过家具城的官网,本着在一定的预算范围之类挑选最合适的,作为一个程序猿,一颗不安分的心,决定自己爬虫下网站,列出个表格,也方便给父母辈们查看,顺带再练习下爬虫的。根据行列坐标将数据写入单元格。设置列宽,指定开始列位置,指定结束列位置。 原文链接:https://mp.weixin.qq.com/s/tQ... 家中想置办些家具,听朋友介绍说苏州蠡(li第二声)口的家具比较出名,因...

    ermaoL 评论0 收藏0
  • pythonpdfplumber库成批提取pdf表格内容转换成excel

      此篇文章关键给大家介绍了python使用pdfplumber库成批提取pdf表格内容转换成excel格式的实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪  要求  需要提取pdf的信息,储存到excel中。尽管是完全可以运用WPS将pdf文件导出成excel,但是这个作用是收取费用的,而且如果把很多pdf转excel的情况下,手动式去导出是很用...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<