openpyxl的简单使用。

一、增删相关

1、创建新工作簿

import openpyxl
#创建一个新的工作簿
wb = openpyxl.WOrkbook()
#拿到工作的工作表,新创建的工作簿,默认有sheet工作表,且是该表是激活的
ws=wb.active
#给工作表设置名字,这里是将sheet工作表名字设置成语文成绩
ws.title = '语文成绩'
#保存
wb.save('新的工作簿.xlsx')

2、创建新的工作表

import openpyxl 
#读取存在的工作簿
wb = openpyxl.load_workbook('有基础资料和库存.xlsx')
#创建新的工作表
wb.create_sheet(title='新的工作表')
#保存
wb.save('有基础资料和库存.xlsx')

3、插入新的空白行或空白列

3.1、插入空白行

import openpyxl
#读取存在的工作簿
wb = openpyxl.load_workbook('有基础资料和库存.xlsx')
#通过工作表名字拿到要操作的工作表
ws = wb['库存']
#idx是行号,在idx处插入count个空白行
ws.insert_rows( idx ,count=1 )
wb.save('有基础资料和库存.xlsx')

3.2、插入空白列

import openpyxl
#读取存在的工作簿
wb = openpyxl.load_workbook('有基础资料和库存.xlsx')
#通过工作表名字拿到要操作的工作表
ws = wb['库存']
#idx是列号,在idx处插入count个空白列
ws.insert_cols( idx ,count=1 )
wb.save('有基础资料和库存.xlsx')

4、删除行和列

4.1、删除列

import openpyxl
#读取存在的工作簿
wb = openpyxl.load_workbook('有基础资料和库存.xlsx')
#通过工作表名字拿到要操作的工作表
ws = wb['库存']
#idx是列号,在idx列往后删除count个列(包括idx所在列)
ws.delete_cols( idx ,count=1 )
wb.save('有基础资料和库存.xlsx')

4.2、删除行

import openpyxl
#读取存在的工作簿
wb = openpyxl.load_workbook('有基础资料和库存.xlsx')
#通过工作表名字拿到要操作的工作表
ws = wb['库存']
#idx是列号,在idx处往下count个行(包括idx行)
ws.delete_rows( idx ,count=1 )
wb.save('有基础资料和库存.xlsx')

5、批量增数据

ws.append([1,2,3])
#在最后一行插入数据 1,2,3

ws.append({1:'lhz',2:'zzh',3:'yf'})
#最后一行的第1列写入数据 lhz
#最后一行的第2列写入数据 zzh
#最后一行的第3列写入数据 yf

ws.append({'a':'hh','b':'juju','f':'我来了'})
#最后一行的a列写入数据 hh
#最后一行的b列写入数据 juju
#最后一行的f列写入数据 我来了

列不能是数字和字母混着写。

二、查改相关

1、查

1.1、查基本信息

工作簿属性:

import openpyxl

wb = openpyxl.load_workbook('test.xlsx')
#1\获取到工作簿的所有工作表的名字,返回的是工作表名字列表
ws_name = wb.sheetnames
#2\获取工作簿中所有工作簿对象,返回的是工作表对象列表
ws_obj=wb.worksheets

#拿到具体的工作表对象
ws_active = wb.active #拿到激活的工作表,如果工作簿只有一张工作表,推荐使用
ws1 = wb['工作表名字'] #通过工作表名字获取工作表对象
ws2 = wb.worksheets[0] #通过索引获取工作表对象

工作表属性:

工作表行列情况

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
ws = wb['运维']
#获取工作表的最大行数
max_row = ws.max_row
#获取工作表的最小行数
min_row = ws.min_row
#获取工作表的最大列数
max_col = ws.max_column
#获取工作表的最小列数
min_col = ws.min_column

单元格遍历:

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
ws = wb['语文成绩']
1、data_iter = ws.values: 结果是生成器,一次next获取一行数据,不是一行单元格对象
    
2、row_iter = ws.rows :结果是生成器,一次next获取一行单元格对象,需要循环next出来的行,cell.value拿到单元格的数据
    
3、col_iter = ws.columns :结果是生成器,一次next获取一列单元格对象,需要循环next出来的列,通过cell.value拿到单元格的数据
    
4、ws.iter_rows: 可以指定区域,一次next获取指定区域的一行
    for  rows in ws.iter_rows(min_col=1,max_col=3,min_row=1,max_row=10):
        lis=[ c.value for c in rows]
    #c是单元格对象,c.value才是单元格对应的数据

5、ws.iter_cols: 可以指定区域,一次next获取指定区域的一列
    for  cols in ws.iter_cols(min_col=1,max_col=3,min_row=1,max_row=10):
        lis=[ c.value for c in cols]
    #c是单元格对象,c.value才是单元格对应的数据
 

单元格属性:

1、ws.cell(column=2,row=9).column_letter  :  输出列字母号:B

2、ws.cell(column=2,row=9).coordinate  输出单元格的键:B9

3、ws.cell(column=2,row=9).col_idx   输出的是单元格的列号是数字,2

4、ws['A4'].row  拿到的行

5、ws['A7'].column  拿到列号

6、ws['B7'].value 拿到数值  

根据数字获取列的字母

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

2、改

修改数据:

A1表示法  工作表['A1'] 工作表.cell(行号,列号)
月份   金额
1       100
2        200
3        300
4        400
总金额   
将总金额求出来,放到对应框中


通过ws.iter_cols() :min_row=2,最小开始行,max_col和min_col=2说明的是去第2列,max_row 是最大行高
import openpyxl
wb = openpyxl.load_workbook('业绩.xlsx')
ws = wb['demo']
sh =  list(ws.iter_cols(min_row=2,max_col=2,min_col=2,max_row=ws.max_row-1))[0]
sh_value = sum([i.value for i in sh])
#修改方式1
ws[f'B{ws.max_row}']=sh_value
#修改方式2
ws.cell(row=行,column=列,value='值')
wb.save('业绩.xlsx')

你可能感兴趣的:(openpyxl,openpyxl处理excel)