Python操作excel的几种方式--xlrd、xlwt、openpyxl

在处理excel数据时发现了xlwt的局限性–不能写入超过65535行、256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中行数和列数有此限制),这对于实际应用还是不够的。为此经过一番寻找发现了一个支持07/10/13版本Excel的openpyxl,虽然功能很强大,但是操作起来感觉没有xlwt方便。下面分别说下几个模块的常用操作。

xlrd

xlrd是用来从Excel中读写数据的,但我平常只用它进行读操作,写操作会遇到些问题。用xlrd进行读取比较方便,流程和平常手动操作Excel一样,打开工作簿(Workbook),选择工作表(sheets),然后操作单元格(cell)。下面举个例子,例如要打开当前目录下名为”data.xlsx”的Excel文件,选择第一张工作表,然后读取第一行的全部内容并打印出来。Python代码如下:

1234567891011
#打开excel文件data=xlrd.open_workbook(‘data.xlsx‘)     #获取第一张工作表(通过索引的方式)table=data.sheets()[0] #data_list用来存放数据data_list=[]    #将table中第一行的数据读取并添加到data_list中data_list.extend(table.row_values(0))#打印出第一行的全部数据for item in data_list:    print item

上面的代码中读取一行用table.row_values(number),类似的读取一列用table.column_values(number),其中number为行索引,在xlrd中行和列都是从0开始索引的,因此Excel中最左上角的单元格A1是第0行第0列。
xlrd中读取某个单元格用table.cell(row,col)即可,其中row和col分别是单元格对应的行和列。
下面简单归纳一下xlrd的用法

xlrd用法总结

  • 打开Excel工作簿

    1
    data=xlrd.open_workbook(filename)
  • 查看工作簿中所有sheet的名称
    1
    data.sheet_names()
  • 选择某一个工作表(通过索引或表名称)
    12345678
    #获取第一个工作表table=data.sheets()[0]
    
    #通过索引获取第一个工作表table=data.sheet_by_index(0)
    
    #通过表名称选择工作表table=data.sheet_by_name(u‘哈哈‘)
  • 获取表格的行数和列数
    12
    nrows=table.nrowsncols=table.ncols
  • 获取整行和整列的值
    12
    table.row_values(number)table.column_values(number)
  • 通过循环读取表格的所有行
    12
    for rownum in xrange(table.nrows):    print table.row_values(rownum)
  • 获取单元格的值
    12345
    cell_A1=table.row(0)[0].value#或者像下面这样cell_A1=table.cell(0,0).value#或者像下面这样通过列索引cell_A1=table.col(0)[0].value

写操作自己很少用,所以就不归纳了。

xlwt

如果说xlrd不是一个单纯的Reader(如果把xlrd中的后两个字符看成Reader,那么xlwt后两个字符类似看成Writer),那么xlwt就是一个纯粹的Writer了,因为它只能对Excel进行写操作。xlwt和xlrd不光名字像,连很多函数和操作格式也是完全相同。下面简要归纳一下常用操作。

xlwt常用操作

新建一个Excel文件(只能通过新建写入)

1
data=xlwt.Workbook()

新建一个工作表

1
table=data.add_sheet(‘name‘)

写入数据到A1单元格

1
table.write(0,0,u‘呵呵‘)

注意:如果对同一个单元格重复操作,会引发overwrite Exception,想要取消该功能,需要在添加工作表时指定为可覆盖,像下面这样

1
table=data.add_sheet(‘name‘,cell_overwrite_ok=True)

保存文件

1
data.save(‘test.xls‘)

这里只能保存扩展名为xls的,xlsx的格式不支持

xlwt支持一定的样式,操作如下

1234567891011121314151617
#初始化样式style=xlwt.XFStyle()

#为样式创建字体font=xlwt.Font()

#指定字体名字font.name=‘Times New Roman‘

#字体加粗font.bold=True

#将该font设定为style的字体style.font=font

#写入到文件时使用该样式sheet.write(0,1,‘just for test‘,style)

openpyxl

该模块支持最新版的Excel文件格式,对Excel文件具有响应的读写操作,对此有专门的Reader和Writer两个类,便于对Excel文件的操作。虽然如此,但我一般还是用默认的workbook来进行操作。常用操作归纳如下:

openpyxl常用操作

读取Excel文件

123
from openpyxl.reader.excel import load_workbook

wb=load_workbook(filename)

显示工作表的索引范围

1
wb.get_named_ranges()

显示所有工作表的名字

1
wb.get_sheet_names()

取得第一张表

12
sheetnames = wb.get_sheet_names()  ws = wb.get_sheet_by_name(sheetnames[0])

获取表名

1
ws.title

获取表的行数

1
ws.get_highest_row()

获取表的列数

1
ws.get_highest_column()

单元格的读取,此处和xlrd的读取方式很相近,都是通过行和列的索引来读取

12
#读取B1单元格中的内容ws.cell(0,1).value

当然也支持通过Excel坐标来读取数据,代码如下

12
#读取B1单元格中的内容ws.cell("B1").value

写文件,只有一种操作方式,就是通过坐标。例如要向单元格C1写数据,就要用类似ws.cell(“C1”).value=something这样的方式。
一般推荐的方式是用openpyxl中的Writer类来实现。代码类似下面这样:

12345678910111213141516171819202122232425262728
from openpyxl.workbook import Workbook 

#ExcelWriter,里面封装好了对Excel的写操作from openpyxl.writer.excel import ExcelWriter  

#get_column_letter函数将数字转换为相应的字母,如1-->A,2-->B  from openpyxl.cell import get_column_letter  

#新建一个workbook  wb = Workbook()  

#新建一个excelWriter  ew = ExcelWriter(workbook = wb)  

#设置文件输出路径与名称  dest_filename = r‘empty_book.xlsx‘  

#第一个sheet是ws  ws = wb.worksheets[0]  

#设置ws的名称  ws.title = "range names"

#向某个单元格中写入数据ws.cell("C1").value=u‘哈哈‘

#最后保存文件ew.save(filename=dest_filename)

向某个单元格内写文件时要先知道它对应的行数和列数,这里注意行数是从1开始计数的,而列则是从字母A开始,因此第一行第一列是A1,这实际上是采用坐标方式操作Excel。例如,想向表格的第三行第一列插入一个数值1.2,用xlwt写就是table.write(2,0,1.2),因为xlwt中行列索引都从0开始;而如果用openpyxl写就是ws.cell(“A3”).value=1.2。一般对于一个较大的列数,需要通过get_column_letter函数得到相应的字符,然后再调用cell函数写入。
下面是我之前写的一个代码的一部分,可以用来演示将多位数组保存到Excel文件中。为了体现多维数组,这里用到了numpy,另外这里为了简化过程,没有用ExcelWriter。代码如下:

12345678910111213141516171819
#coding:utf-8

from openpyxl import Workbookfrom openpyxl.cell import get_column_letter

import numpy as np#生成一个对角阵a=np.diag([1,2,3,4,5])

#新建一个工作簿wb=Workbook()#使用当前激活的工作表(默认就是Excel中的第一张表)ws=wb.active#下面是对a的遍历,注意cell中行和列从1开始,a中索引从0开始。for row in xrange(1,a.shape[0]+1):    for col in xrange(1,a.shape[1]+1):        col_letter=get_column_letter(col)        ws.cell(‘%s%s‘%(col_letter,row)).value=a[row-1,col-1]wb.save(‘test.xlsx‘)

暂时介绍这么多,基本够用了。

总结

读取Excel时,选择openpyxl和xlrd差别不大,都能满足要求
写入少量数据且存为xls格式文件时,用xlwt更方便
写入大量数据(超过xls格式限制)或者必须存为xlsx格式文件时,就要用openpyxl了。

除以上几个模块外,还有Win32com等模块,但没有用过,就不说了。

【转自】 http://wenqiang-china.github.io/2016/05/13/python-opetating-excel/  author: wenqiang

原文地址:https://www.cnblogs.com/yanhuidj/p/9011870.html

时间: 2024-10-08 09:28:45

Python操作excel的几种方式--xlrd、xlwt、openpyxl的相关文章

python操作Excel的几种方式

1 Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 2 3 1.xlrd主要是用来读取excel文件 4 5 import xlrd 6 7 workbook = xlrd.open_workbook(u'有趣装逼每日数据及趋势.xls') 8 9 sheet_names= workbook.sheet_names() 10 11 for sheet_name in sheet_names: 12 13 sheet2 = wo

Python 操作 MySQL 的5种方式

不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的5种方式,你可以在实际开发过程中根据实际情况合理选择. 1.MySQLdb MySQLdb又叫MySQL-python ,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows

python操作数据库的几种方式

参照python 操作mysql python-mysqldb : http://www.cnblogs.com/wupeiqi/articles/5095821.html (python3 不支持) pymysql : http://www.cnblogs.com/wupeiqi/articles/5713330.html ORM sqlachemy学习:http://www.cnblogs.com/alex3714/articles/5978329.html 原文地址:https://www

自动化办公:python操作Excel

1.安装 -- upgrade pippython -m pip install --- install pypipip install pypi 执行python setup.py install进行安装xlrd Python操作Excel,主要用到xlrd和xlwt这两个库,即xlrd是读Excel,xlwt是写Excel的库 pip install xlrdpip install xlwtpip install xlutilspip install xlsxwriter 2.操作一个简单的

【转】python操作excel表格(xlrd/xlwt)

[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究"(用此一词让我觉得颇有成就感)之后,基本解决了日常所需.主要记录使用过程的常见问题及解决. python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库.可从这里下载https://pyp

八、python操作excel及网络编程和异常处理

一.python操作excel 1.读excel,xlrd模块用来读excel # book = xlrd.open_workbook(r'students.xlsx')#打开excel# print(book.sheet_names())#获取所有sheet的名字# sheet = book.sheet_by_index(0)#根据sheet页的位置去取sheet# sheet2 = book.sheet_by_name('Sheet2')#根据sheet页的名字获取sheet页# print

Python操作excel工具

python操作excel的工具类有很多,下面举几个常见的工具类: 一. 1.xlrd 只能读取excel操作,支持xls和xlsx两种格式的 2.xlwt 只能写入excel操作,只支持 xls格式的 3.xlsxwtiter 只能写入excel操作,同时支持xls格式和xlsx的 附python操作excel的常见参考链接: https://xlsxwriter.readthedocs.io/format.html https://blog.csdn.net/qq_24495287/arti

python 操作 excel

python操作execel主要是读写 读 通过 http://pypi.python.org/pypi/xlrd 写 通过 http://pypi.python.org/pypi/xlwd 下载tar包,解压出来,安装即可, 如果没有权限,将xlrd/xlrd拷贝到当前目录下,也可以使用. 如下是xlrd的使用例子 1 # -*- coding: utf-8 -*- 2 import xdrlib ,sys 3 import xlrd 4 import sys 5 def open_excel

python基础(六)python操作excel

一.python操作excel,python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的.这几个模块使用pip安装即可,下面是这几个模块的使用. 二.xlrd模块,xlrd模块用来读excel,具体用法如下: import xlrd #打开excel wb=xlrd.open_workbook('abc.xlsx')#打开的这个excel必须存在,否则会报错 print(wb.shee