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编写的最短路径算法
Mar 25 Python
python实现各进制转换的总结大全
Jun 18 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
Python实现两款计算器功能示例
Dec 19 Python
理解python中生成器用法
Dec 20 Python
Python如何发布程序的详细教程
Oct 09 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python使用pyecharts控件绘制图表
Jun 05 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
python概率计算器实例分析
2015/03/25 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
tensorflow的计算图总结
2020/01/12 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
出生医学证明样本
2014/01/17 职场文书
网吧消防安全制度
2014/01/28 职场文书
保护环境的建议书
2014/03/12 职场文书
学生评语大全
2014/04/18 职场文书
环境日宣传活动总结
2014/07/09 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
 python中的元类metaclass详情
2022/05/30 Python