python读写Excel文件的函数--使用xlrd/xlwt
python中读取Excel的模块或者说工具有很多,如以下几种:
| Packages | 文档下载 | 说明 |
|---|---|---|
| openpyxl | Download | Documentation | Bitbucket |
The recommended package for reading and writing Excel 2010 files (ie: .xlsx) |
| xlsxwriter | Download | Documentation | GitHub |
An alternative package for writing data, formatting information, in particular, charts in the Excel 2010 format (ie: .xlsx) |
| xlrd | Download | Documentation | GitHub |
This package is for reading data and formatting information from older Excel files (ie: .xls) |
| xlwt | Download | Documentation | GitHub |
This package is for writing data and formatting information to older Excel files (ie: .xls) |
| xlutils | Download | Documentation | GitHub |
This package collects utilities that require both xlrd and xlwt, including the ability to copy and modify or filter existing excel files. |
| python-xlsx | Download | Documentation | GitHub |
This package is for creating and modifying Microsoft Excel .xlsx files from Office 2007 and later. |
| pyExcelerator | Download | Sourceforge |
Generating Excel 97+ files with Python 2.4+ (need decorators), importing Excel 95+ files |
关于上面几种工具的优缺点对比分析,可以参考博文《用Python读写Excel文件》,文章有详细的说明。
虽然上面比较推荐的工具是openpyxl,但是由于其不支持xls,还是决定使用xlrd/xlwt来实现Excel的导入导出。
在使用前,请确保已安装xlrd/xlwt模块,可使用Pip进行安装;另导出数据到Excel有用到Django(输出浏览器时),可安装引入模块或者注释掉相关代码。
import xlrd import xlwt from datetime import date,datetime from django.http import HttpResponse, HttpRequest
具体实现如下:
'''
# 读取Excel数据
#
# 参数:
# file_name : xls文件,含路径
# col_list : 读取数据后对应的列字段,如: ['id' , 'name' , 'value']
# 返回: List
'''
def readExcel(file_name , col_list):
# 判断文件是否存在,以及是否以xls后缀
if not os.path.isfile(file_name) or os.path.basename(file_name).split('.')[1] != 'xls':
return returnInfo(-1 , 'file is not valid')
try:
# 打开Excel文件
curBook = xlrd.open_workbook(file_name)
# 获取Sheet表, Sheet索引起始为0.
sheet1 = curBook.sheet_by_index(0)
# 或者,通过Sheet名称获取相应的Sheet
#sheet1_name = curBook.sheet_names()[0]
#sheet1 = curBook.sheet_by_name(sheet1_name)
# 获取Sheet行数
rowNum = sheet1.nrows
# 获取Sheet列数
#colNum = sheet1.ncols
# 此处,以实际接受的字段为准
colNum = len(col_list)
# 用于接收数据
dataList = []
# 默认从第二行开始读取,第一行为列标题
'''
# 读取单元格的值 : A2
sheet1.cell(1,0).value
sheet1.cell_value(rowx=1, colx=0)
sheet1.row(1)[0].value.encode('utf-8')
# 单元格的类型
# ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
sheet1.cell(1,0).ctype
'''
# 循环读取行数据
for i in range(1 , rowNum):
curRow = {}
# 读取行内各列
for j in range(colNum):
#
if sheet1.cell(i,j).ctype == 3:
# 如果单元格的数据为日期类型,读取后得到是浮点数;此处进行格式化处理
date_value = xlrd.xldate_as_tuple(sheet1.cell_value(i,j),curBook.datemode)
curRow[col_list[j]] = date(*date_value[:3]).strftime('%Y-%m-%d')
else:
curRow[col_list[j]] = sheet1.cell(i,j).value
# 行数据保存到list
dataList.append(curRow)
# 异常处理
except Exception as e:
print('Error:', e)
return returnInfo(-1 , 'file read failed')
return returnInfo(0 , 'success' , dataList)
'''
# 写入数据到Excel
#
# 参数:
# dataList : 数据列表,如[{'id':1,'name':'ice cream','value':66},...]
# file_title : 文件标题
# col_list : 列字段及列标题,如: [['id','序号'],['name','名称'],...]
# isSave : 是否保存到指定路径;否表示输出到浏览器
# savePath : 保存路径
# 返回: Mixed
'''
def writeExcel(dataList , file_title , col_list , isSave = False , savePath = ''):
# 添加后缀,指定文件的名称
fileName = file_title + time.strftime("_%Y%m%d%H%M%S", time.localtime()) + '.xls'
try:
# 创建workbook对象
curBook = xlwt.Workbook()
# 设定编码
curBook.encoding='gbk'
# 添加Sheet表;其中cell_overwrite_ok,表示是否可以覆盖单元格
sheet1 = curBook.add_sheet(u'sheet1',cell_overwrite_ok = True)
# 行数
rowNum = len(dataList)
# 列数
colNum = len(col_list)
# 第一行,合并单元格,设定文件标题
# write_merge(x, x + h, y, y + w, string, style),x表示行,y表示列,h表示跨行个数,w表示跨列个数
sheet1.write_merge(0 , 0 , 0 , colNum-1 , file_title , set_style('华文中宋',320))
# 第二行,设定列标题
colTitleStyle = set_style('华文宋体',240)
for k in range(0,colNum):
sheet1.write(1 , k , col_list[k][1] , colTitleStyle)
# 第三行起,开始写入数据
for i in range(0,rowNum):
for j in range(0,colNum):
sheet1.write(i+2 , j , dataList[i][col_list[j][0]])
if isSave:
# 如保存xls到路径
full_filename = os.path.join(savePath , fileName)
# 执行保存
curBook.save(full_filename)
return returnInfo()
else:
# 否则输出到浏览器
response = HttpResponse(content_type='application/vnd.ms-excel;charset=utf-8;name="' + file_title + '.xls"')
response['Content-Disposition'] = 'attachment; filename=' + fileName
# 保存返回
curBook.save(response)
return response
# 异常处理
except Exception as e:
print('Error:', e)
return returnInfo(-1 , 'data export failed')
'''
# 设定样式
#
# 参数:
# font_name : 字体
# font_height : 字体大小,注:20 = 1pt
# font_bold : 字体是否加粗
# border : 是否设置边框
# 返回: Style
'''
def set_style(font_name = 'Times New Roman' , font_height = 220 , font_bold = False , border = False):
# 初始化Style
style = xlwt.XFStyle()
# 设定字体样式
font = xlwt.Font()
font.name = font_name
font.color_index = 4
font.height = font_height #
font.bold = font_bold
style.font = font
# 设定边框属性
if border:
borders= xlwt.Borders()
borders.left= 1
borders.right= 1
borders.top= 1
borders.bottom= 1
style.borders = borders
# 居中对齐,'general': 0 , 'left': 1 , 'centre': 2 , 'right': 3, ...
style.alignment.horz = 2
# 水平对齐,HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, ...
# 竖直对齐,VERT_TOP, VERT_CENTER, VERT_BOTTOM, ...
#style.alignment.horz = xlwt.Alignment.HORZ_CENTER
#style.alignment.vert = xlwt.Alignment.VERT_CENTER
# 设置背景颜色
#pattern = xlwt.Pattern()
#pattern.pattern = xlwt.Pattern.SOLID_PATTERN
#pattern.pattern_fore_colour = 5
#style.pattern = pattern
# 其他,可参见xlwt源码
# 或者使用easyxf
#style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on' , num_format_str='#,##0.00')
# 返回样式
return style
python读写Excel文件的函数--使用xlrd/xlwt的更多相关文章
- python读写Excel文件_xlrd模块读取,xlwt模块写入
一.安装xlrd模块和xlwt模块(服务器) 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd ...
- Python读写Excel文件和正则表达式
Python 读写Excel文件 这里使用的是 xlwt 和 xlrd 这两个excel读写库. #_*_ coding:utf-8 _*_ #__author__='观海云不远' #__date__ ...
- [转]用Python读写Excel文件
[转]用Python读写Excel文件 转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...
- python读写Excel文件--使用xlrd模块读取,xlwt模块写入
一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...
- python 读写 Excel文件
最近用python处理一个小项目,其中涉及到对excel的读写操作,通过查资料及实践做了一下总结,以便以后用. python读写excel文件要用到两个库:xlrd和xlwt,首先下载安装这两个库. ...
- 用Python读写Excel文件(转)
原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...
- 用Python读写Excel文件的方式比较
虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...
- Python读写EXCEL文件常用方法大全
前言 python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pa ...
- python读写Excel文件(xlrd、xlwr)
一.首先需要安装第三方库:pip install xlrd 1.打开Excel文件,由于写入时需要copy,所以这里加上保留原格式参数:formatting_info=True excel_file ...
随机推荐
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- Space Ant - POJ 1696 (凸包)
题目大意:给一些散列点然后初始点是坐标最下面最左面的点,然后只能往左走,求出来最多可以经过多少个点,把序号输出出来. 分析:先求出来初始的点,然后不断排序找出来最近的凸点....复杂度是 n^2* ...
- windows系统下搭建linux
1.先装虚拟机VMware Workstation(步骤参照度娘) 2.在虚拟机上装CentOS6.5Linux系统(步骤参照度娘) 3.安装SecureCRT终端仿真程序,用来登录Linux服务 ...
- angularjs post 跨域
web api搞好了:用Ajax妥妥的:但是前端用的AngulagJS,也懒得再换为Ajax了: 但是问题来了:提示: 已拦截跨源请求:同源策略禁止读取位于 http://x.x.x.x:port/a ...
- 一句话菜刀获取ip详细信息
<?php $ip="你要查的ip"; $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip ...
- Winform Windows Media Player 简易播放器 分类: WinForm 2014-07-31 20:12 589人阅读 评论(0) 收藏
新手上路,高手勿进! 窗体设计: 实现效果: 实现代码: using System; using System.Collections.Generic; using System.ComponentM ...
- docker-compose.yml 语法说明
YAML 模板文件语法 默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建. 其 ...
- bt 介绍以及 bt 种子的hash值(特征值)计算
bt种子的hansh值计算,近期忽然对bt种子感兴趣了(原因勿问) 1. bt种子(概念) bt 是一个分布式文件分发协议,每一个文件下载者在下载的同一时候向其他下载者不断的上传已经下载的数据,这样保 ...
- mysql 时区 , 夏令时,冬令时
mysql默认时区: mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_nam ...
- WCF - 地址
WCF顾名思义 即解决在windows平台下与各种平台中的程序之间通信的问题 而终结点则是WCF通信的唯一手段 终结点承载了所有通信的功能 一个WCF服务是通过对应的终结点发布出来的 发布出来的数据称 ...