python操作excel

python操作Excel

openpyxl模块

0.介绍

openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx / xlsm / xltx / xltm文件。

它的诞生是因为缺少可从Python本地读取/写入Office Open XML格式的库。

作为openpyxl,对PHPExcel团队的所有赞誉最初都是基于PHPExcel。

安全

默认情况下,openpyxl不能防范二次爆炸或数十亿次的xml笑话攻击。为了防止这些攻击,请安装defusedxml。

必知

在使用openpyxl模块前,需要了解openpyx中名称的概念:

在openpyxl中,主要用到三个概念:Workbook,Sheet,Cell

Workbook:指一个工作簿;

Sheet:指工作簿中的一张表;
Cell:指表中的一个单元格。

openpyxl在读或写时顺序为:打开Workbook,定位Sheet,操作Cell

1. 安装

pip3 install openpyxl

2. 创建工作簿

from openpyxl import Workbook

wb = Workbook()

创建一个工作簿之后,会默认生成一个工作表 (Sheet) 。您可以使用Workbook.active属性来获取它

ws = wb.active
默认情况下设置为0。除非您修改其值,否则始终将使用此方法获得第一个工作表。

3. 创建工作表

通过 Workbook.create_sheet( ) 方法创建新的工作表

Workbook.create_sheet( ) 的参数依次是title=表名,索引=index,默认索引追加在默认的Sheet表后面

# 创建两张表

sheet1 = wb.create_sheet('表1')
sheet2 = wb.create_sheet('表2')

# 表的顺序(Sheet,表1,表2)

4. 保存工作簿

# 保存工作簿,filename='文件的地址'
# 如果文件名相同的话,后面的文件会覆盖原来文件的内容

wb.save('demo.xlsx')

5. 数据的三种写入方式

5.1 通过定位单元格写入

# 语法: 表['单元格名称'] = '值'

sheet1['A1'] = '我是A1' # 不区分大小写

5.2 通过行列定位

# 通过row(行),column(列),定位指定单元格 添加数据

# 第二行第一列的单元格
sheet1.cell(row=2, column=1).value = '你好'

5.3 通过append方法

append( )方法的参数是一个可迭代对象, 可以批量添加, 而且自带默认换行.

# append(iterable)追加,默认从当前表格的末尾追加,自动换行

sheet1.append(['我是A1', '我是B1', '我是C1'])
sheet1.append(['我是A2', '我是B2', '我是C2'])
# 一次追加多行
data_list = [
    ['1','2','3'],
    ['4','5','6'],
    ['7','8','9'],
]
for item in data_list:
    sheet1.append(item)

6. 读取本地工作簿

6.1 获取本地工作簿对象

wb = openpyxl.load_workbook(r'D:demo1.xlsx')

6.2 获取工作簿下的所有表名

# 返回一个列表,每个元素都是表名
names = wb.sheetnames
# 通过for循环查询
for sheet in wb:
     print(sheet.title) # 表.title = '表名'

6.3 获取工作簿的表

  • wb.active

    始终获取当前工作簿的第一张表

  • 通过表名的key

    ws = wb['表1']
    
  • 通过表名获取

    ws = wb.get_sheet_by_name('表1')
    

6.4 循环获取由表格的值组成的矩阵

  • 即循环表格中的值,这种方法,不能设置读取范围
for row in ws.values:
    print(row) # row是每行的数据组成的元组

6.5 可设置范围的读取

循环表中的每一行

可以设置范围 range_string= 'A1:B1' 矩阵范围

min_row=1,min_col=1 最小行从第1行,最小列从第1列 开始默认到数据最大行最大列

max_row=3,max_col=3 最大行只到第3行 ,最大列只到第3列 默认从第一行第一列开始

values_only=True 只读

for row in ws.iter_rows(min_row=2, min_col=2):
    for cell in row:
        print(cell.value) # cell.value = '单元格的值'

关于三个对象的常用属性

wb.sheetnames 返回工作簿下的所有表名
wb.active 返回第一张表
ws.title 表名
cell.value 单元格的值
原文地址:https://www.cnblogs.com/xcymn/p/12942869.html