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的更多相关文章

  1. python读写Excel文件_xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块(服务器) 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd ...

  2. Python读写Excel文件和正则表达式

    Python 读写Excel文件 这里使用的是 xlwt 和 xlrd 这两个excel读写库. #_*_ coding:utf-8 _*_ #__author__='观海云不远' #__date__ ...

  3. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  4. python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  5. python 读写 Excel文件

    最近用python处理一个小项目,其中涉及到对excel的读写操作,通过查资料及实践做了一下总结,以便以后用. python读写excel文件要用到两个库:xlrd和xlwt,首先下载安装这两个库. ...

  6. 用Python读写Excel文件(转)

    原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...

  7. 用Python读写Excel文件的方式比较

    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...

  8. Python读写EXCEL文件常用方法大全

    前言 python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pa ...

  9. python读写Excel文件(xlrd、xlwr)

    一.首先需要安装第三方库:pip install xlrd 1.打开Excel文件,由于写入时需要copy,所以这里加上保留原格式参数:formatting_info=True excel_file ...

随机推荐

  1. java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误

    /** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...

  2. Java+protobuf 实例

    之前开发都是JSON格式, 据说用这种格式的 安全, 输入输出全是二进制文件,且 数据占用内存小. 主要永远移动端数据传送.以下是代码: controller: 请求的是实体: package cn. ...

  3. 源文件名和public 类名

    问题: 源文件名和类名不一样 解决方法:将源文件的文件名test修改成Test 

  4. Android无法更新sdk的解决办法

    修改 windows/system32/drivers/etc/hosts 文件 添加 203.208.46.146 dl.google.com203.208.46.146 dl-ssl.google ...

  5. nginx代理人server结合tomcat采用

    相信非常多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那到底它有什么作用呢?可能非常多人未必了解. 说到反向代理,可能非常多人都听说,但详细什么是反向代理,非常多人预计就 ...

  6. Android 颜色渲染(十) ComposeShader组合渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(十) ComposeShader组合渲染 public ComposeShader(Shader sh ...

  7. Android获得线性渐变某点的颜色

    安卓官方确实提供了好多非常强大的工具给我们了,例如我们最近经常在shape中加入gradient(渐变),像我的项目中用的是线性渐变, <?xml version="1.0" ...

  8. ASP.NET Core和ASP.NET Framework共享Identity身份验证

    .NET Core 已经热了好一阵子,1.1版本发布后其可用性也越来越高,开源.组件化.跨平台.性能优秀.社区活跃等等标签再加上"微软爸爸"主推和大力支持,尽管现阶段对比.net ...

  9. Xcode常见报错及解决办法

    报错一: 在iOS7的真机运行时,弹出错误:App installation failed. There was an internal API error. 如图 解决办法: 在Xcode -> ...

  10. Android制作粒子爆炸特效

    简介 最近在闲逛的时候,发现了一款粒子爆炸特效的控件,觉得比较有意思,效果也不错. 但是代码不好扩展,也就是说如果要提供不同的爆炸效果,需要修改的地方比较多.于是我对源代码进行了一些重构,将爆炸流程和 ...