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 ...
随机推荐
- VMware workstation12 pro安装Ubuntu14.04LTS过程笔记
由于近期需要加强自己在Linux/C++编程方面的需要,把原来的CentOS6.5格了....在windows8.1系统上重新安装了VMware和Ubuntu... VMware安装Ubuntu的过程 ...
- grunt个人理解
最近在学习grunt的内容,也希望能将grunt使用在新的项目中,本文是对grunt的相关概念的个人理解,仅供与道友们交流和学习,如有疑义,欢迎道友们指点. 首先,grunt是基于nodejs的,那就 ...
- 使用PDO连接数据库 查询和插入乱码的解决方法
问题:PDO连接数据库后,查询和插入中文到数据库,出现乱码,如图: 解决方法: 法1: try{ $opts_values = array(PDO::MYSQL_ATTR_INIT_COMMAND=& ...
- Android开源项目分类汇总【畜生级别】[转]
Android开源项目分类汇总 欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star.Fork :) 微博:Trinea 主页:www.t ...
- System.in与System.out(标准输入与标准输出)详解
package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; p ...
- Qt之遍历文件夹(经典详解)
关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除. 首先看简单的: 一.Qt遍历文件夹 ...
- RPM命令用法详解
RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件包通常具有类似foo-1.0-1.i386.rp ...
- Android Studio快速生成get set等函数
方式一:Code-->Generate 方式二:通过快捷键Alt+Insert
- ssh登录很慢解决方法
使用ssh客户端(如:putty)连接Linux服务器,可能会等待10-30秒才有提示输入密码.严重影响工作效率.登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因: 1. DNS反向解析问题 ...
- dede 最近一天发布的文章标题前加hot
{dede:list pagesize ='15'} <!-- 模板1 --> <div class="news_list tp_a setp1"> < ...