干货--Excel的表格数据的一般处理和常用python模块。
写在前面:
本文章的主要目的在于:
- 介绍了python常用的Excel处理模块:xlwt,xlrd,xllutils,openpyxl,pywin32的使用和应用场景。
- 本文只针对于Excel表中常用的表格数据的处理,其他复杂操作如公式,柱状图等其他数据没有涉及。
- 大佬的肩膀:http://www.gocalf.com/blog/python-read-write-excel.html#excel
读取模块1:xlrd
官方quick start(急于求成有时候很有用)
import xlrd
book = xlrd.open_workbook("myfile.xls") # 打开文件
print("The number of worksheets is {0}".format(book.nsheets)) # nsheets 是Excel中有多少个sheet
print("Worksheet name(s): {0}".format(book.sheet_names())) # sheets的名字
sh = book.sheet_by_index(0) # 拿到第一个sheet ** 注意xlrd中开始都是从0
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols)) # 本sheet的名字,行数,列数
print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3))) # d30单元格中的值
for rx in range(sh.nrows):
print(sh.row(rx)) # 遍历每一行,打印每一个值。每个row是一个列表
详细参数和功能
wb = xlrd.open_workbook("myfile.xls")
其中还有一个重要参数:formatting_info,该参数默认为False,当打开时会保留xls文件的格式和样式信息。在row_values中有体现。在xlutils中用的更多。
file_contents:第二种打开方式。顾名思义是文件的二进制流,最大的用处在于服务端接收到文件后无需转存直接进行读取操作。例子:
wb = xlrd.open_workbook(file_contents=f.read(), formatting_info=True) # f是打开的文件句柄
wb = xlrd.open_workbook(file_contents=request.FILE.get('file', ''), formatting_info=True) # 模拟视图函数
sh = book.sheet_by_index(0)
其他的打开方式
ws = wb.get_sheet(0)
ws = wb.sheet_by_name('sheet1')
ws = wb.get_sheets()[0]
ws = wb._sheet_list[0] # 当以file_content方式打开上边的方式都会报错,因为已经把所有sheets load进来了。
ws.row_values(row_num) #另一个常用的遍历方式,获得某一行的单元格数据。
ws.merged_cells
merged_cells是一个列表来展示所有被合并的单元格。比如:[(0, 1, 0, 3), (1, 2, 0, 3)]
这里诡异的是:其中的数字表示的以文件左上角为0,0的坐标上的数值。使用需注意。
最后:xlrd比较古老,本来只支持xls格式的Excel文件,现在也能读取xlsx文件的数据,但是不能使用formatting_info功能。
写入模块:xlwt
quick start
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('sheet1') # sheet1 是第一个sheet的名称
ws.write(0, 0, 'test', style1) # 在第0行的第0列写入 其中的style1是下面介绍的样式
ws.write_merge(1, 2, 0, 25, u'合并单元格', style1) # 将第一行中的25列个单元格合并写入
wb.save('test2.xls')
# wb.save('test.xlsx') # 可以生成xlsx文件
样式设计
写一个Excel文件需要的参数上面不是很多,但是往往在样式设计上要求较高。
内容居中:
alignment = xlwt.Alignment() # 初始化一个居中对象
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平和左右的居中
alignment.vert = xlwt.Alignment.VERT_CENTER
边框:
borders = xlwt.Borders()
borders.left = 1 # 边框的宽度
borders.right = 1
borders.top = 1
borders.bottom = 1
borders.bottom_colour = 0x3A # 具体的颜色设计可百度255中颜色的十六进制的表示
单元格底色:
pattern = xlwt.Pattern()
pattern.pattern = Pattern.SOLID_PATTERN # 设置其模式为实型
pattern.pattern_fore_colour = 22 # 这里的22位灰
字体
fn1 = xlwt.Font()
fn1.bold = False # 加粗
fn1.name = u'宋体' # 字体
fn1.height = 280 # 大小 字体的大小会影响到行高
单元格大小设置
hang1 = ws.col(0) # 拿到一列并设置宽度
hang1.width = 256 * 20
tall_style = xlwt.easyxf('font:height 400;') hang_sale = ws.row(0) # 拿到一行设置高度
hang_sale.set_style(tall_style)
合成style
将上述的样式封装成一个style。
style1 = xlwt.XFStyle()
style1.font = fn1 # 同理其他的样式以这种方式设置
修改模块:xlutils
在Excel表格的模块中本质上都不支持的Excel的直接修改,都是先读取后写入的形式来实现。故在修改的过程中会出现诸多的bug,比如样式的丢失。
from xlutils.copy import copy
rb = open_workbook('test.xls)
wb = copy(rb)
之后的操作便于xlwt别无差别了。但是在修改的时候一般都不想主动的修改Excel的样式。这里,xlrd中的formatting_info参数便很关键了。即使如此,在我的实践中仍存在某些单元格的边框的样式自动丢失的情况,有待解决!
总结:上述的三兄弟是比较常用的Excel处理模块,若是没有太高的需求一般足够用了。但是这三兄弟目前只是更加针对xls文件,其实在格式转化xlsx文件的时候无能为力。要是遇到像xlsx文件的修改等需求的时候,xlutils会将xlsx源文件输出成为没有任何格式的xlsx文件。所以下面介绍openpyxl模块是只使用于xlsx。(xls读都读不了)
xlsx模块openpyxl
book = openpyxl.load_workbook('2.xlsx')
ws = book.worksheets[0]
aa = ws.rows
print next(aa)[0].value # 也可以用等于进行设置值
book.save('test.xlsx')
openpyxl的用法大致和xl三兄弟一致,但是在功能上要多一些,所以效率上要差一些。在只进行读取操作的时候可以加上read_only的参数。
pywin32模块
如开头链接给出的对比一样,功能最完善的自然是Windows的api了。毕竟这个东西就是人家出的。但是缺点也是最明显的:
1.无法跨平台,只适用Windows系统,还得有Excel程序。
2.过程中占用Excel程序,不注意会造成和wps等程序的冲突。
3.十分缓慢
from win32com.client import Dispatch, DispatchEx
xlApp = Dispatch('Excel.Application') # 会在打开Excel的基础上进行,没有就打开
xlBook = xlApp.Workbooks.Open(r'C:\Users\PycharmProjects\windOFapi\1242.xlsx', ) # 这里要写全路径,否则加载到Windows系统中报错
sht = xlBook.Worksheets('sheet1')
req = sht.Cells(4, 3).value
print req
下面的两个openpyxl和pywin32模块用的较少,掌握不多,不敢多写。
干货--Excel的表格数据的一般处理和常用python模块。的更多相关文章
- excel的表格数据插入到数据库
看到有excel保存insert的数据,自己照着教程弄了一下,可以的. 表格数据 接下来我们在d3的位置输入 =CONCATENATE("insert into user(code, nam ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- python3美化表格数据输出结果
技术背景 在前面一篇博客中我们介绍过关于python的表格数据处理方案,这其中的工作重点就是对表格类型的数据进行梳理.计算和展示,本文重点介绍展示这个方面的工作.首先我们看一个案例,定义一个数组形式的 ...
- jxl读取Excel表格数据
调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...
- asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- JXL读取写入excel表格数据
问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...
- Visual Studio 2010利用libxl读写excel表格数据
C++读写数据,一般通过txt文件,但是随着数据量的增大,采集数据时运用excel表格的优势得以逐步体现.本文主要介绍一下运用第三方库libxl,对excel表格数据进行读写.分为三个部分,第一部分是 ...
随机推荐
- CSS学习笔记05 display属性
HTML标记一般分为块标记和行内标记两种类型,它们也称块元素和行内元素. 块元素 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高度.对齐等属性,常用于网页布局和网页结构的搭建.并且块级 ...
- 【Android Developers Training】 82. 序言:传输数据时减少对电池寿命的影响
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- MySQL实例
建表实例: CREATE TABLE command_content( ID ) PRIMARY KEY NOT NULL AUTO_INCREMENT, CONTENT ), COMMAND_ID ...
- RedHat安装中文支持和字体
操作系统: Red Hat Enterprise Linux 6.3 x86 安装中文语言支持: yum install "@chinese support" 安装完中文支持后,可 ...
- ES6中的Set、Map数据结构
Map.Set都是ES6新的数据结构,他们都是新的内置构造函数.也就是说typeof的结果,多了两个. 他们是什么: Set是不能重复的数组. Map是可以任何东西当做键的对象: ES6 提供 ...
- Asp.net MVC-3-执行过程
本篇主要讲述MVC处理请求时创建Controller和执行Action的完整过程. 创建Controller 先查看MvcHandler中处理请求的方法BeginProcessRequest: pro ...
- Html 学习
行内元素和块级元素 行内元素(行级元素) 多个元素会在一行内显示 块级元素 独立成行 注意:块级元素能够嵌套行内元素 <div> <span></span> < ...
- 上传图片并生成相关缩略图-PHP
if(!empty($_FILES["fileField"]["name"])){//检测表单传递文件数据 $fileinfo = $_FILES[" ...
- 理解梯度下降法(Gradient Decent)
1. 什么是梯度下降法? 梯度下降法(Gradient Decent)是一种常用的最优化方法,是求解无约束问题最古老也是最常用的方法之一.也被称之为最速下降法.梯度下降法在机器学习中十分常见,多用 ...
- Threads(线程)(二)
前一章我们提到了同步异步,多线程:在开始今天的文章之前,先来总结一下上一篇文章的内容,多线程的优点. 多线程有哪些优点呢,在这里通过代码依次来总结. 异步多线程的三大特点 1)同步方法卡界面,原因是主 ...