处理Excel电子表格

一个Excel电子表格文档称为一个工作薄。

每个工作薄可以包含多个工作表。

用户当前查看的表,称为活动表。

python没有自带openpyxl,所以必须安装。

c:\python\Scripts>pip3.6 install openpyxl
Collecting openpyxl
  Downloading openpyxl-2.4.9.tar.gz (157kB)
    100% |████████████████████████████████| 163kB 183kB/s
Collecting jdcal (from openpyxl)
  Downloading jdcal-1.3.tar.gz
Collecting et_xmlfile (from openpyxl)
  Downloading et_xmlfile-1.0.1.tar.gz
Installing collected packages: jdcal, et-xmlfile, openpyxl
  Running setup.py install for jdcal ... done
  Running setup.py install for et-xmlfile ... done
  Running setup.py install for openpyxl ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.3 openpyxl-2.4.9
c:\python>python.exe
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import openpyxl
>>>

用openpyxl模块打开Excel文档

>>> import openpyxl
>>> wb=openpyxl.load_workbook('example.xlsx')
>>> type(wb)
<class 'openpyxl.workbook.workbook.Workbook'>

openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件。

example.xlsx需要在当前工作目录,才能处理它。可以导入os,使用函数os.getcwd()确定当前工作目录,并用os.chdir()改变当前工作目录。

从工作薄中取得工作表

调用get_sheet_names()方法可以取得工作薄中所有表名的列表。

>>> import openpyxl
>>> wb=openpyxl.load_workbook('example.xlsx')
>>> wb.get_sheet_names()
['Sheet1', 'Sheet2', 'Sheet3']
>>> sheet=wb.get_sheet_by_name('Sheet3')
>>> sheet
<Worksheet "Sheet3">
>>> type(sheet)
<class 'openpyxl.worksheet.worksheet.Worksheet'>
>>> sheet.title
'Sheet3'
>>> anotherSheet=wb.get_active_sheet()
>>> anotherSheet
<Worksheet "Sheet3">

每个表由一个Worksheet对象表示,可以通过向工作薄方法get_sheet_by_name()传递表名字符串获得。

调用Workbook对象的get_active_sheet()方法,取得工作薄的活动表。

从表中取得单元格

>>> import openpyxl
>>> wb=openpyxl.load_workbook('example.xlsx')
>>> sheet=wb.get_sheet_by_name('Sheet1')
>>> sheet['A1']
<Cell 'Sheet1'.A1>
>>> sheet['A1'].value='apple'
>>> sheet['A1'].value
'apple'
>>> c=sheet['B1']
>>> c.value='juice'
>>> str(c.row)
'1'
>>> c.row
1
>>> c.column
'B'
>>> c.coordinate
'B1'

Cell对象的value属性,包含这个单元格中保存的值。

Cell对象也有row、column和coordinate属性,提供该单元格的位置信息。

第一行或第一列的整数是1,不是0。

>>> sheet.cell(row=1,column=2)
<Cell 'Sheet1'.B1>
>>> sheet.cell(row=1,column=2).value
'juice'
>>> for i in range(1,8,2):
...     print(i,sheet.cell(row=i,column=2).value)
...
1 juice
3 None
5 None
7 None

可以通过Worksheet对象的get_highest_row()和get_highest_column()方法,确定表的大小。

get_highest_column()方法返回一个整数,而不是Excel中出现的字母。

列字母和数字之间的转换

要从字母转换到数字,就调用openpyxl.cell.column_index_from_string()函数。

要从数字转换到字母,就调用openpyxl.cell.get_column_letter()函数。

从表中取得行和列

>>> import openpyxl
>>> wb=openpyxl.load_workbook('example.xlsx')
>>> sheet=wb.get_sheet_by_name('Sheet1')
>>> tuple(sheet['A1':'C3'])
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>))
>>> for i in sheet['A1':'C3']:
...     for j in i:
...             print(j.coordinate,j.value)
...     print('--- END OF ROW ---')
...
A1 apple
B1 juice
C1 cake
--- END OF ROW ---
A2 None
B2 nurse
C2 None
--- END OF ROW ---
A3 None
B3 None
C3 None
--- END OF ROW ---

总结:

1、导入openpyxl模块

2、调用openpyxl.load_workbook()函数

3、取得Workbook对象

4、调用get_active_sheet()或get_sheet_by_name()工作薄方法

5、取得Worksheet对象

6、使用索引或工作表的cell()方法,带上row和column关键字参数

7、取得Cell对象

8、读取Cell对象的value属性



【扩展】

1、Font对象

Font对象的style属性影响文本在单元格中的显示方式。

要设置字体风格属性,就向Font()函数传入关键字参数。

2、公式

>>> sheet['B10']='=sum(B1:B9)'
>>> wb.save('example.xlsx')       ##保存

3、调整行和列

Worksheet对象由row_dimensions和column_dimensions属性,控制行高和列宽。

>>> sheet.row_dimensions[1].height=70
>>> sheet.column_dimensions['B'].width=40
>>> wb.save('example.xlsx')

利用merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。

要拆分单元格,就调用unmerge_cells()工作表方法。

>>> sheet.merge_cells('A1:D3')
>>> wb.save('example.xlsx')

在OpenPyXL中,每个Worksheet对象都有一个freeze_panes属性,可以设置为一个Cell对象或一个单元格坐标的字符串。

单元格上边的所有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结。

要解冻所有的单元格,就将freeze_panes设置为None或‘A1’。

>>> sheet.freeze_panes='A2'  ##行1将永远可见
>>> wb.save('example.xlsx')

如果需要创建图标,需要做下列事情:

1、从一个矩形区域选择的单元格,创建一个Reference对象

2、通过传入Reference对象,创建一个Series对象

3、创建一个Chart对象

4、将Series对象添加到Chart对象

5、可选地设置Chart对象的drawing.top、drawing.left、drawing.width和drawing.height变量

6、将Chart对象添加到Worksheet对象

如果加载一个Workbook对象,然后马上保存到同样的.xlsx文件名中,实际上会删除其中的图表。

时间: 2024-11-06 14:34:30

处理Excel电子表格的相关文章

第三篇 从EXCEL电子表格到数据库

一个靠EXCEL电子表格处理各部门业务数据的公司和一个使用一个统一的数据库存储各个部门用到的业务数据并提供大量权限不同的使用界面给用户的公司两者有什么不同呢? EXCEL电子表格是数据和操纵数据的功能在同一个视界内.销售部门用自己的EXCEL表中的数据,仓储用自己的EXCEL表中的数据,采购用自己的EXCEL表中的数据,财务用自己的EXCEL表中的数据.这些数据分散地存储在各个部门各自使用的EXCEL表中,并没有紧密的关联.也许,不同的部门对于同一种客观实体的编码(coding)用的是不同的规则

网页中模拟Excel电子表格实例分享

原文来自http://www.6excel.com/doc/20049 一.电子表格中用到的快捷键: ← → ↑ ↓  :左,右,上,下 Home :当前行的第一列 End  :当前行的最后一列 Shift+Home :表格的第一列 Shift+End:表格的最后一列 如图: 代码如下: <%@ page language="java" pageEncoding="UTF-8"%><html>  <head>    <tit

Excel 电子表格文件格式剖析

Excel 电子表格文件格式,这种Excel和其他的Excel是不同的.他的本质上是一个Xml文件(用英文版的UtraEdit可以看到),所以他可以保存任何符号的字符,包括&(它在Xml文件中是一种特殊字符.所以用aspose等工具是不能读取这种字符的). 反过来说,我们从中可以得到一种快速生成带有多个Worksheet的Workbook的Excel,从xml文件处理的个角度入手. <?xml version="1.0"?><?mso-application

介绍一款开源的类Excel电子表格软件

Excel一直以霸主的地位,占据了Windows桌面表格软件市场No 1,与此同时,Office套装产品几乎成为了IT行业的标配办公技能.有无类似Excel的桌面程序,绿色版,实现基本的数据编辑功能呢? 假如不安装Office,可否实现表格编辑.公式编辑.打印.导出.导出等操作呢? 可以的,本文介绍的这款开源的SpreadDesginer即可实现这样的需求.      谁适合阅读此文? 软件设计师 产品经理 Excel用户 系统必备: .NET Framework 4.0 在管理平台中嵌入Exc

《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

?? 两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存储Excel云文件,既通过云方式读取.加载Excel文件.在本文,我们就大家关心的云存储进行实战操练---基于SpreadDesign源码基础. 系统必备: 本文选用的国内比较流行的七牛云存储. SpreadDesign.exe已经升级为最新的Spread Studio 8.35.20143.0内核 .

为Excel电子表格添加快速打印功能按钮的方法

对于需要频繁切换打印机来完成打印工作的人来说,切换打印机的重复操作非常繁琐且没有效率.其实微软早就为大家准备了各种解决重复劳动的各种工具,比如“快速访问工具栏”和“宏”.下面笔者就跟大家来讲讲如何利用这两个工具来为Excel电子表格添加快速打印的功能按钮,只要轻轻点击一下这个按钮,内容就会发送至指定的打印机进行打印,而不用管当前默认的打印机是哪一台. 一.添加“快速打印”功能按钮 首先打开Excel电子表格,点开窗口左上角下拉箭头的“自定义快速访问工具栏”,然后选择相应的功能即可.比如我们选择“

开源顺顺表格excel电子表格控件免费下载

顺顺表格开源版是基于Web的类似于微软Excel的网页电子表格控件,是一款Javascript电子表格控件.顺顺表格开源版的源代码开放,可以用于Web报表设计器,Web电子表格编辑器,中国特色的电子表单设计器等. 该Web Excel控件可以和Java/Jsp/Asp.Net集成, 实现更强大的电子表格在线编辑功能. 顺顺表格开源版特色 无限制的行和列(增加删除) 电子表格多单元格操作 单元格不同格式(字体,字号等) 统计函数 无限制undo/redo 下载试用 产品 顺顺表格开源版试用版  (

Office word excel电子表格在线编辑的实现方法

Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav的服务器端,可以很容易的实现office word,excel在线编辑. 可以简单的实验一下: 确保IIS的webdav扩展安装并被启用了,建立一个虚拟目录test,在其中放一个word文档a.doc,然后打开word, 文件->打开->输入word文档的访问url(http://localhos

LinqToExcel: LINQ查询Excel电子表格

Linq的强大人所共知,能不能将Linq扩展到读取excel呢? 答案当然是肯定的. LinqToExcel就是一个实现了使用Linq语法查询excel表格的.net开源类库. 在nuget搜索下载安装到项目,添加using LinqToExcel引用,然后参见如下代码使用: rtb_Result.Text = "LinqTOExcel的使用(支持Excel2003及以下版本.)\n"; OpenFileDialog excelOpener = new OpenFileDialog()