python openpyxl使用方法详解


Posted in Python onJuly 18, 2019

openpyxl特点

openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易 注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode

1、openpyxl 读写单元格时,单元格的坐标位置起始值是(1,1),即下标最小值为1,否则报错!

tableTitle = ['userName', 'Phone', 'age', 'Remark']

 # 维护表头
 #  if row < 1 or column < 1:
 #   raise ValueError("Row or column values must be at least 1")
 # 如上,openpyxl 的首行、首列 是 (1,1)而不是(0,0),如果坐标输入含有小于1的值,提示 :Row or column values must be at least 1,即最小值为1.
 for col in range(len(tableTitle)):
  c = col + 1
  ws.cell(row=1, column=c).value = tableTitle[col]

2、openpyxl 支持直接横纵坐标访问,如A1,B2...

ws['A4'] = 4 #直接赋值

openpyxl操作excel

Excel文件三个对象

  • workbook: 工作簿,一个excel文件包含多个sheet。
  • sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
  • cell: 单元格,存储数据对象

1、新建表

A workbook至少创建一个worksheet.

通过openpyxl.workbook.Workbook.active()得到worksheet

wb = Workbook(encoding='UTF-8')

ws = wb.active

注意:

该方法使用_active_sheet_index属性, 默认会设置0,也就是第一个worksheet。除非手动修改,否则使用active方法得到都是第一个worksheet。

你也可以创建worksheets,通过 openpyxl.workbook.Workbook.create_sheet() 方法:

ws = wb.create_sheet("Mysheet") #插入到最后(default)
#或者
 ws = wb.create_sheet("Mysheet", 0) #插入到最开始的位置

创建的sheet的名称会自动创建,按照sheet,sheet1,sheet2自动增长,通过title属性可以修改其名称。

ws.title = "New Title"
ws = wb.create_sheet(title="Pip")

默认的sheet的tab是白色的,可以通过 RRGGBB颜色来修改sheet_properties.tabColor属性从而修改sheet tab按钮的颜色:

ws.sheet_properties.tabColor = "1072BA"

当你设置了sheet的名称,可以将其看成workbook中的一个key。也可以使用openpyxl.workbook.Workbook.get_sheet_by_name() 方法

单元格赋值

#设定单元格的值,三种方式
sheet.cell(row=2,column=5).value=99
sheet.cell(row=3,column=5,value=100)
ws['A4'] = 4 #write

逐行写

ws.append(iterable)
 #添加一行到当前sheet的最底部(即逐行追加从第一行开始) iterable必须是list,tuple,dict,range,generator类型的。 1,如果是list,将list从头到尾顺序添加。 2,如果是dict,按照相应的键添加相应的键值。
 ws.append([‘This is A1', ‘This is B1', ‘This is C1'])
 ws.append({‘A' : ‘This is A1', ‘C' : ‘This is C1'})
 ws.append({1 : ‘This is A1', 3 : ‘This is C1'})

2、读表操作

#打开文件:
from openpyxl import load_workbook
excel=load_workbook('E:/test.xlsx')
#获取sheet:
table = excel.get_sheet_by_name('Sheet1')  #通过表名获取 
#获取行数和列数:
rows=table.max_row  #获取行数
cols=table.max_column  #获取列数
#获取单元格值:
Data=table.cell(row=row,column=col).value #获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉 .value
#通过名字
  ws = wb["frequency"] 
  #等同于 ws2 = wb.get_sheet_by_name('frequency')
  #不知道名字用index
  sheet_names = wb.get_sheet_names()
  ws = wb.get_sheet_by_name(sheet_names[index])# index为0为第一张表 
#或者
  ws =wb.active
  # 等同于 ws = wb.get_active_sheet() #通过_active_sheet_index设定读取的表,默认0读第一个表
  #活动表表名
  wb.get_active_sheet().title

单元格使用

c = ws['A4'] 
d = ws.cell(row = 4, column = 2) #行列读写

逐行读取

#逐行读
    ws.iter_rows(range_string=None, row_offset=0, column_offset=0): range-string(string)-单元格的范围:例如('A1:C4') row_offset-添加行 column_offset-添加列 
  # 返回一个生成器, 注意取值时要用value,例如:
  for row in ws.iter_rows('A1:C2'):
    for cell in row:
      print cell
  #读指定行、指定列:
  rows=ws.rows#row是可迭代的 
  columns=ws.columns#column是可迭代的
  #打印第n行数据 
  print rows[n]#不需要用.value 
  print columns[n]#不需要用.value

显示有多少张表

wb.get_sheet_names() 
#显示表名,表行数,表列数  
print ws.title 
print ws.max_row
print ws.max_column

公式计算formulae

ws["A1"] = "=SUM(1, 1)"
ws["A1"] = "=SUM(B1:C1)"

3、操作实例

#-*-coding:utf-8-*-
# Time:2017/9/21 19:02
# Author:YangYangJun


from openpyxl import Workbook
from openpyxl.reader.excel import load_workbook

import os
import time



def writeExcel():
  # 获取文件路径
  excelPath = os.path.join(os.getcwd(), 'ExcelData')
  print "****"
  print excelPath
  # 定义文件名称
  # invalid mode ('wb') or filename: 'Excel2017-09-21_20:15:57.xlsx'  这种方式明明文件,会提示保存失败,无效的文件名。
  # nameTime = time.strftime('%Y-%m-%d_%H:%M:%S')
  nameTime = time.strftime('%Y-%m-%d_%H-%M-%S')
  excelName = 'Excel' + nameTime + '.xlsx'
  ExcelFullName= os.path.join(excelPath,excelName)
  print ExcelFullName

  wb = Workbook()

  ws = wb.active

  tableTitle = ['userName', 'Phone', 'age', 'Remark']

  # 维护表头
  #    if row < 1 or column < 1:
  #     raise ValueError("Row or column values must be at least 1")
  # 如上,openpyxl 的首行、首列 是 (1,1)而不是(0,0),如果坐标输入含有小于1的值,提示 :Row or column values must be at least 1,即最小值为1.
  for col in range(len(tableTitle)):
    c = col + 1
    ws.cell(row=1, column=c).value = tableTitle[col]

  # 数据表基本信息
  tableValues = [['张学友', 15201062100, 18, '测试数据!'], ['李雷', 15201062598, 19, '测试数据!'],['Marry', 15201062191, 28, '测试数据!']]

  for row in range(len(tableValues)):
    ws.append(tableValues[row])
  #wb.save(ExcelFullName)
  wb.save(filename=ExcelFullName)
  return ExcelFullName

def readExcel(ExcelFullName):
  wb = load_workbook(ExcelFullName)
  #wb = load_workbook(filename=ExcelFullName)

  # 获取当前活跃的worksheet,默认就是第一个worksheet
  #ws = wb.active
  # 当然也可以使用下面的方法
  # 获取所有表格(worksheet)的名字
  sheets = wb.get_sheet_names()
  print sheets
  # # 第一个表格的名称
  sheet_first = sheets[0]
  # # 获取特定的worksheet
  #
  ws = wb.get_sheet_by_name(sheet_first)
  print "***"
  print sheet_first
  print ws.title
  print "^^^"
  # 获取表格所有行和列,两者都是可迭代的
  rows = ws.rows
  print rows

  columns = ws.columns
  # 迭代所有的行
  for row in rows:
    line = [col.value for col in row]
    print line

  # 通过坐标读取值

  print ws['A1'].value # A表示列,1表示行
  print ws.cell(row=1, column=1).value

if __name__ == '__main__':
  ExcelFullName = writeExcel()
  readExcel(ExcelFullName)
# 显示表名,表行数,表列数
print "Work Sheet Titile:", ws.title
print "Work Sheet Rows:", ws.max_row
print "Work Sheet Cols:", ws.max_column

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 自动提交和抓取网页
Jul 13 Python
python实现将汉字保存成文本的方法
Nov 16 Python
Python切图九宫格的实现方法
Oct 10 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
Python request中文乱码问题解决方案
Sep 17 Python
基于Python制作一副扑克牌过程详解
Oct 19 Python
Python基于内置函数type创建新类型
Oct 22 Python
基于Python实现粒子滤波效果
Dec 01 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 Python
Python Django基础二之URL路由系统
Jul 18 #Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 #Python
Django基础三之视图函数的使用方法
Jul 18 #Python
详解python实现小波变换的一个简单例子
Jul 18 #Python
Django基础知识 URL路由系统详解
Jul 18 #Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 #Python
Django基础知识 web框架的本质详解
Jul 18 #Python
You might like
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
javascript 面向对象 function类
2010/05/13 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
js实现表格字段排序
2014/02/19 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
python flask中动态URL规则详解
2019/11/22 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
设计专业自荐信
2014/06/19 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
委托证明范本
2014/11/25 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
嘉宾邀请函
2015/01/31 职场文书
行政处罚决定书
2015/06/24 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
新手必备Python开发环境搭建教程
2021/05/28 Python
Django中session进行权限管理的使用
2021/07/09 Python