Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)


Posted in Python onFebruary 13, 2020

Python中几种常用包比较

Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)

2、用xlrd包读取Excel文件

引用包

import xlrd

打开文件

xlrd.open_workbook(r'/root/excel/chat.xls')

获取你要打开的sheet文件

# 获取所有sheet
sheet_name = workbook.sheet_names()[0]
# 根据sheet索引或者名称获取sheet内容
sheet = workbook.sheet_by_index(0) # sheet索引从0开始

获取指定单元格里面的值

sheet.cell_value(第几行,第几列)

获取某行或者某列的值

# 获取整行和整列的值(数组)
rows = sheet.row_values(1) # 获取第2行内容
cols = sheet.col_values(2) # 获取第3列内容

获取sheet的名称,行数,列数

# sheet的名称,行数,列数
print (sheet.name,sheet.nrows,sheet.ncols)

源码示例

import xlrd
from datetime import date,datetime
arrayNum = 6
#array = {'L1':'','L2':'','L3':'','L4':'','Question':'','Answer':''}
tables = []
newTables = []
def read_excel():
 # 打开文件
 workbook = xlrd.open_workbook(r'/root/chat.xls')
 # 获取所有sheet
 sheet_name = workbook.sheet_names()[0]
 # 根据sheet索引或者名称获取sheet内容
 sheet = workbook.sheet_by_index(0) # sheet索引从0开始
 # sheet = workbook.sheet_by_name('Sheet1')
 #print (workboot.sheets()[0])
 # sheet的名称,行数,列数
 print (sheet.name,sheet.nrows,sheet.ncols)
 # 获取整行和整列的值(数组)
 rows = sheet.row_values(1) # 获取第2行内容
 # cols = sheet.col_values(2) # 获取第3列内容
 print (rows)
 # print (cols)
 for rown in range(sheet.nrows):
  array = {'L1':'','L2':'','L3':'','L4':'','Question':'','Answer':''}
  array['L1'] = sheet.cell_value(rown,0)
  array['L2'] = sheet.cell_value(rown,1)
  array['L3'] = sheet.cell_value(rown,2)
  array['L4'] = sheet.cell_value(rown,3)
  array['Question'] = sheet.cell_value(rown,4)
  array['Answer'] = sheet.cell_value(rown,5)
  tables.append(array)
 print (len(tables))
 #print (tables)
 #print (tables[5])
if __name__ == '__main__':
 # 读取Excel
 read_excel();
 print ('读取成功')

3、尽量不用xlwt包写入Excel文件

原因

在xlwt中生成的xls文件最多能支持65536行数据。如果写入过多,会报错

由于数据太多,会报这个错误:

ValueError: row index (65536)not an intin range(65536)错误

源码示例

# 1. 导入模块
import xlwt
def write_excel():
# 2. 创建Excel工作薄
myWorkbook = xlwt.Workbook()
# 3. 添加Excel工作表
mySheet = myWorkbook.add_sheet('A Test Sheet')
# 4. 写入数据
myStyle = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00') #数据格式
mySheet.write(i, j, 1234.56, myStyle)
mySheet.write(2, 0, 1)       #写入A3,数值等于1
mySheet.write(2, 1, 1)       #写入B3,数值等于1
mySheet.write(2, 2, xlwt.Formula("A3+B3"))  #写入C3,数值等于2(A3+B3)
#5. 保存
myWorkbook.save('excelFile.xls')
if __name__ == '__main__':
 # 写入Excel
 write_excel();
 print ('写入成功')

4、用openpyxl包写入Excel文件

引用包

import openpyxl

创建工作簿

f = openpyxl.Workbook() #创建工作簿

创建sheet

sheet1 = f.create_sheet()

设置每个单元格里面的值

for jkey in range(len(newTables)):
 jk = 1
 for cT in range(arrayNum):
  jk = jkey + 1
  if cT == 0:
  sheet1.cell(row=jk,column=cT+1).value='1'
  else:
  sheet1.cell(row=jk,column=cT+1).value='2'

保存文件

f.save("chatPy.xlsx") #保存文件

源码示例

import openpyxl
#写excel
def write_excel():
 f = openpyxl.Workbook() #创建工作簿
 sheet1 = f.create_sheet()
 #sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
 row0 = [u'L1',u'L2',u'L3',u'L4',u'问题',u'答案']
 #生成第一行
 #for i in range(len(row0)):
 # sheet1.cell(column=i,row=0).value='L1')
 #生成后续
 for jkey in range(len(newTables)): 
  jk = 1
  for cT in range(arrayNum):
   jk = jkey + 1
   if cT == 0:
   sheet1.cell(row=jk,column=cT+1).value='1'
   else:
   sheet1.cell(row=jk,column=cT+1).value='2'
   
 f.save("chatPy.xlsx") #保存文件
if __name__ == '__main__':
 # 写入Excel
 write_excel();
 print ('写入成功')

5、用xlsxwriter包写入Excel文件

简介

由于xlwt最大只支持65536行数据于是我找到了xlsxwriter这个模块,它生成的文件后缀名为.xlsx,最大能够支持1048576行数据,16384列数据

引用包

import xlsxwriter

创建工作簿

workbook = xlsxwriter.Workbook('demo1.xlsx')#创建一个excel文件

创建sheet

worksheet = workbook.add_worksheet(u'sheet1')#在文件中创建一个名为TEST的sheet,不加名字默认为sheet1

设置每个单元格里面的值

worksheet.write(3,0,35.5)#第4行的第1列设置值为35.5

关闭工作簿

workbook.close()

源码示例

import xlsxwriter
#写excel
def write_excel(): 
 workbook = xlsxwriter.Workbook('chat.xlsx')#创建一个excel文件
 worksheet = workbook.add_worksheet(u'sheet1')#在文件中创建一个名为TEST的sheet,不加名字默认为sheet1
 
 worksheet.set_column('A:A',20)#设置第一列宽度为20像素
 bold= workbook.add_format({'bold':True})#设置一个加粗的格式对象
 
 worksheet.write('A1','HELLO')#在A1单元格写上HELLO
 worksheet.write('A2','WORLD',bold)#在A2上写上WORLD,并且设置为加粗
 worksheet.write('B2',U'中文测试',bold)#在B2上写上中文加粗
 
 worksheet.write(2,0,32)#使用行列的方式写上数字32,35,5
 worksheet.write(3,0,35.5)#使用行列的时候第一行起始为0,所以2,0代表着第三行的第一列,等价于A4
 worksheet.write(4,0,'=SUM(A3:A4)')#写上excel公式
 workbook.close()
if __name__ == '__main__':
 # 写入Excel
 write_excel();
 print ('写入成功')

更多关于Python3读写Excel文件方法请查看下面的相关链接

Python 相关文章推荐
Python函数参数类型*、**的区别
Apr 11 Python
详解Python中的array数组模块相关使用
Jul 05 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
python实现Zabbix-API监控
Sep 17 Python
python2与python3共存问题的解决方法
Sep 18 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
基于python实现把json数据转换成Excel表格
May 07 Python
python初步实现word2vec操作
Jun 09 Python
python的pip有什么用
Jun 17 Python
Python‘==‘ 及 ‘is‘相关原理解析
Sep 05 Python
python压包的概念及实例详解
Feb 17 Python
python输出pdf文档的实例
Feb 13 #Python
python打印文件的前几行或最后几行教程
Feb 13 #Python
Python创建空列表的字典2种方法详解
Feb 13 #Python
python-docx文件定位读取过程(尝试替换)
Feb 13 #Python
Python 实现向word(docx)中输出
Feb 13 #Python
Python如何把多个PDF文件合并代码实例
Feb 13 #Python
python读取csv文件指定行的2种方法详解
Feb 13 #Python
You might like
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
新手入门常用代码集锦
2007/01/11 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python的range和linspace使用详解
2019/11/27 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Django 批量插入数据的实现方法
2020/01/12 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
优纳科技软件测试面试题
2012/05/15 面试题
信息部岗位职责
2013/11/12 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
经典洗发水广告词
2014/03/13 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
大学教师个人总结
2015/02/10 职场文书
上甘岭观后感
2015/06/10 职场文书