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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
python修改操作系统时间的方法
May 18 Python
python自定义异常实例详解
Jul 11 Python
python实现堆和索引堆的代码示例
Mar 19 Python
python实现微信自动回复功能
Apr 11 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
Django使用rest_framework写出API
May 21 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
记一次Django响应超慢的解决过程
Sep 17 Python
小结Python的反射机制
Sep 28 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
PHP可变函数的使用详解
2013/06/14 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
Python文件及目录操作实例详解
2015/06/04 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python try...finally...的实现方法
2020/11/25 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
事业单位辞职信范文
2014/01/19 职场文书
中学生演讲稿
2014/04/26 职场文书
服务口号大全
2014/06/11 职场文书
办理房产过户的委托书
2014/09/14 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
初中作文评语
2014/12/25 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL