利用 Python 对 Excel 文件进行操作需要使用第三方库: openpyxl,可执行 pip install openpyxl 进行安装

1. 导入 openpyxl 模块

导入 openpyxl 模块后,利用它的 load_workbook() 方法可以打开一个 Excel 文件,该方法使用一个文件名称作为参数,示例如下:

>>> import openpyxl

>>> wb = openpyxl.load_workbook('example.xlsx')

>>> type(wb)

<class 'openpyxl.workbook.workbook.Workbook'>

2. openpyxl 常用方法

可以使用 openpyxl 对象的 get_sheet_names() 方法得到打开的工作薄中存在的所有工作表名称、用 get_sheet_by_name() 方法获取工作表对象、用 active 属性可获取当前活跃工作表的名称:

>>> 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.active

>>> anotherSheet

<Worksheet "Sheet1">

3. 获取单元格属性

可以直接使用单元格名称获取指定单元格,同时单元格具有值、行、列、坐标属性,举例如下:

>>> sheet = wb.get_sheet_by_name('Sheet1')

>>> sheet['A1']

<Cell Sheet1.A1>

>>> sheet['A1'].value

datetime.datetime(2015, 4, 5, 13, 34, 2)

>>> c = sheet['B1']

>>> c.value

'Apples'

>>> 'Row ' + str(c.row) + ', Column ' + c.column + ' is ' + c.value

'Row 1, Column B is Apples'

>>> 'Cell ' + c.coordinate + ' is ' + c.value

'Cell B1 is Apples'

>>> sheet['C1'].value

73

4. 使用 cell()

同时也可以使用工作表对象的 cell() 方法来直接指定单元格,使用该方法时要注意,工作表中的行、列都是从1而不是0开始的:

>>> sheet.cell(row=1, column=2)

<Cell Sheet1.B1>

>>> sheet.cell(row=1, column=2).value

'Apples'

>>> for i in range(1, 8, 2):

print(i, sheet.cell(row=i, column=2).value)

1 Apples

3 Pears

5 Apples

7 Strawberries

5. 获取当前工作表中有效数据区域的行数和列数

>>> sheet.max_row

7

>>> sheet.max_column

3

6. 行、列之间的转换

需要使用 get_column_letter、column_index_from_string 这两个方法

>>> from openpyxl.cell import get_column_letter, column_index_from_string

>>> get_column_letter(1)

'A'

>>> get_column_letter(2)

'B'

>>> get_column_letter(27)

'AA'

>>> get_column_letter(900)

'AHP'

>>> get_column_letter(sheet.max_column)

'C'

>>> column_index_from_string('A')

1

>>> column_index_from_string('AA')

27

7. 获取区域数据

>>> 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>))

8. 获取指定一行或一列数据

>>> sheet.columns[1]

(<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>)

 9. Excel 读操作总结

利用 openpyxl 对 excel 文件进行读操作,主要步骤有以下几点:

  • 导入 openpyxl 模块
  • 调用 openpyxl.load_workbook() 函数
  • 获得 Workbook 对象
  • 读取活跃工作表变量或者调用 get_sheet_by_name() 方法
  • 获得 Worksheet 对象
  • 使用索引或使用行、列关键词调用工作表的 cell() 方法
  • 获得 Cell 对象
  • 读取 Cell 对象的属性值

10. 创建与保存 Excel 文件

创建 Excel 文件需要使用 openpyxl 模块的 Workbook() 方法,对文件进行操作后,需要调用工作薄对象的 save() 方法进行保存方可使操作生效。

>>> import openpyxl

>>> wb = openpyxl.Wrokbook()

>>> wb.get_sheet_names()

['Sheet']

>>> sheet = wb.active

>>> sheet.title

'Sheet'

>>> sheet.title = 'Spam Bacon Eggs Sheet'

>>> wb.get_sheet_names()

['Spam Bacon Eggs Sheet']

>>> wb.save('example_copy.xlsx')

11. 新增或删除工作表

增加工作表,需要使用工作薄对象的 create_sheet() 方法。对应的,删除工作表,需要使用 remove_sheet() 方法。

>>> wb.create_sheet()

<Worksheet "Sheet1">

>>> wb.get_sheet_names()

['Sheet', 'Sheet1']

>>> wb.create_sheet(index=0, title='First Sheet')

<Worksheet "First Sheet">

>>> wb.create_sheet(index=2, title='Middle Sheet')

<Worksheet "Middle Sheet">

>>> wb.get_sheet_names()

['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']

如上,创建新工作表时,默认按序号顺序创建,并在当前已有工作表末尾附加。如果指定索引和标题,则会以给定的标题在指定索引处进行创建,索引从0开始。

删除工作表则略复杂,不能直接给 remove_sheet() 方法传递工作表名或索引进行删除,而必须传递一个工作表对象方可进行删除。

>>> wb.remove_sheet(wb.get_sheet_by_name('Middle Sheet'))

>>> wb.remove_sheet(wb.get_sheet_by_name('Sheet1'))

>>> wb.get_sheet_names()

['First Sheet', 'Sheet']

最后,记得要进行 save() 操作,方可使增加或删除操作生效。

12. 向单元格写入数据

向单元格写入数据,只需要在工作表对象中,指定单元格坐标,再进行类似于变量赋值的操作即可

>>> sheet['A1'] = 'Hello world!'

>>> sheet['A1'].value

'Hello world!'

13. 使用 cell() 方法

除了使用单元格坐标的方式获取单元格对象外,还可以使用工作表对象的 cell() 方法,向其传入整型的行数、列数来进行指定

>>> sheet.cell(row=2, column=2).value = 'Hello'

>>> sheet['B2'].value

'Hello'

14. 设置字体样式

对 Excel 中的单元格内的字体样式进行设置,需要使用 Font() 方法,向其传入指定参数并将其赋值给指定单元格的 font 属性即可进行相应设置。该方法需要从 openpyxl.styles 中导入

>>> italic24Font = Font(size=24, italic=True)

>>> sheet['A1'].font = italic24Font

>>> sheet['A1'] = 'Hello world!'

>>> wb.save('styled.xlsx')

一些常用的 Font() 对象属性

name: 字符串类型。字体名称,如 Calibri、Times New Roman

size: 整型。字号

bold: 布尔型。是否为粗体

italic: 布尔型。是否为斜体

使用示例:

>>> fontObj1 = Font(name='Times New Roman', bold=True)

>>> sheet['A1'].font = fontObj1

>>> sheet['A1'] = 'Bold Times New Roman'

>>> fontObj2 = Font(size=24, italic=True)

>>> sheet['B3'].font = fontObj2

>>> sheet['B3'] = '24 pt Italic'

>>> wb.save('styles.xlsx')

15. 使用公式

使用公式相对简单,和向单元格写入数据相同,把公式作为待写数据写入到单元格中即可

>>> sheet['B9'] = '=SUM(B1:B8)'

应注意的是,公式总是以等号(=)开头的

16. 调整行高与列宽

openpyxl 模块中有专门的工作表对象变量对行高与列宽进行调整。设置行高,可使用 row_dimensions 属性,设置列宽,可使用 column_dimensions 属性

>>> sheet['A1'] = 'Tall row'

>>> sheet['B2'] = 'Wide column'

>>> sheet.row_dimensions[1].height = 70

>>> sheet.column_dimensions['B'].width = 20

>>> wb.save('dimensions.xlsx')

应当注意的是,如果把行高或列宽设置为0,则会将该行、列隐藏

17. 合并单元格与拆分单元格

合并单元格使用 merge_cells() 方法,拆分单元格使用 unmerge_cells() 方法,这两个方法接受一个字符串格式的参数,该参数从左上角至右下角指定一整块区域用于合并或拆分。举例如下

>>> sheet.merge_cells('A1:D3')

>>> sheet['A1'] = 'Twelve cells merged together.'

>>> sheet.merge_cells('C5:D5')

>>> sheet['C5'] = 'Two merged cells.'

>>> wb.save('merged.xlsx')

>>> sheet.unmerge_cells('A1:D3')

>>> sheet.unmerge_cells('C5:D5')

>>> wb.save('merged.xlsx')

18. 冻结窗格

要实行冻结窗格操作,需要使用工作表对象的 freeze_panes 属性,向该属性指定一个单元格位置,则在该单元格左侧与上侧的区域将被冻结。但该单元格本身并不在冻结范围内

>>> sheet.freeze_panes = 'A2'

以上代码将把工作表中第一行给冻结

19. 创建图表

创建图表相对较为复杂,主要有以下5个步骤

  • 从一块矩形区域中创建一个 Reference 对象
  • 使用该 Reference 对象创建一个 Series 对象
  • 创建 Chart 对象
  • 把 Series 对象附加到 Chart 对象中
  • 把 Chart 对象添加到工作表对象中。可以选择指定图表左上角位置

Reference 对象使用 openpyxl.chart.Reference() 创建,其接收3个参数:

  • 包含用于创建图表的数据的工作表对象
  • 由2个整型数据组成的组合。分别代表数据区域的左上角单元格的行数、列数
  • 由2个整型数据组成的组合。分别代表数据区域的右下角单元格的行数、列数

(作者此处描述似乎有误,准确的说应该是5个参数了,第1个是工作表对象,第2个是数据区域左上角单元格所在的行数,第3个是数据区域左上角单元格所在的列数,第4个是数据区域右下角单元格所在的行数,第5个是数据区域右下角单元格所在的列数)

创建图表示例如下:

>>> refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=1, max_row=10)

>>> seriesObj = openpyxl.chart.Series(refObj, title='First series')

>>> chartObj = openpyxl.chart.BarChart()

>>> chartObj.title = 'My Chart'

>>> chartObj.append(seriesObj)

>>> sheet.add_chart(chartObj, 'C5')

>>> wb.save('sampleChart.xlsx')

本示例中,数据区域为 A1:A10

结果如下(图中各个 pixels 参数可忽略):

作者在 sheet.add_chart() 函数中指定了图表左上角位置为 C5,但在结果中显示的却并不是这样。在下亦不解

Python 操作 MS Excel 文件的更多相关文章

  1. python批量处理excel文件数据

    https://www.zhihu.com/question/39299070?sort=created 作者:水中柳影链接:https://www.zhihu.com/question/392990 ...

  2. python下读取excel文件

    项目中要用到这个,所以记录一下. python下读取excel文件方法多种,用的是普通的xlrd插件,因为它各种版本的excel文件都可读. 首先在https://pypi.python.org/py ...

  3. 关于python如何引用excel文件

    关于python如何引用excel文件 import pandas as pd #引用pandas库,as:将pandas简写为pd Nowcoder = pd.read_excel("1. ...

  4. 使用Python操作Office——EXCEL

    首先介绍下office win32 com接口,这个是MS为自动化提供的操作接口,比如我们打开一个EXCEL文档,就可以在里面编辑VB脚本,实现我们自己的效果.对于这种一本万利的买卖,Python怎么 ...

  5. Python使用读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  6. Python如何读写Excel文件-使用xlrd/xlwt模块

    时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...

  7. 使用Python xlwt写excel文件

    如果需要使用Python写Excel文件,首先下载或者安装xlwt. pip install xlwt 下面的这些demo应该可以帮助开发者快速上手使用xlwt写Excel文件: 创建工作簿(work ...

  8. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  9. python从Microsoft Excel文件中导入数据

    excel中后缀为csv和xls,二者区别如下:1.xls 文件就是Microsoft excel电子表格的文件格式.2.csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. ...

随机推荐

  1. SAP CRM 将组件整合至导航栏中

    到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...

  2. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  3. iOS 方法修饰符

     一.NS_DESIGNATED_INITIALIZER 用来修饰init方法,被修饰的方法称为designated initializer:没有被这个修饰的init方法称为convenience i ...

  4. 数据分布转换:非正态 -> 正态

    来源:丁香园论坛:SPSS上的把非正态分布数据转换为正态分布数据 一楼 可以应用变量变换的方法,将不服从正态分布的资料转化为非正态分布或近似正态分布.常用的变量变换方法有对数变换.平方根变换.倒数变换 ...

  5. windows 部署 git 服务器报 Please make sure you have the correct access rights and the repository exists.错误

    这两天在阿里云上弄windows 服务器,顺便部署了一个git服务.根据网上教程一步步操作下来,最后在 remote远程仓库的时候提示 fatal: 'yourpath/test.git' does ...

  6. mono for android Json 上传文件

    void button_Click(object sender, EventArgs e) { string Url = "上传地址,服务器端负责接收"; byte[] fbyte ...

  7. ABP框架理论研究总结(典藏版)

    目前,我已经完成了Module-Zero的翻译,请查看我的<Module-Zero学习目录>. 到现在为止,使用ABP框架开发正式项目已经3个月有余了,期间翻阅了大量文档资料,包括ABP官 ...

  8. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  9. Jquery双向select控件Bootstrap Dual Listbox

    效果预览: 一. 下载插件 github地址:https://github.com/istvan-ujjmeszaros/bootstrap-duallistbox 也可以在这个网站中下载:http: ...

  10. 如何在高并发分布式系统中生成全局唯一Id

    月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1.     ...