Python Module_openpyxl_处理Excel表格

简介: 目录目录前言软件系统Install openpyxl moduleSample codeload_workbook加载Excel文件wbObjectget_sheet_names 获取Excel表格名WorkbooktableName 定位Excel...

目录

前言

Python处理Excel表格有多种方法,其中对于.xlsx后缀的Excel版本而言openpyxl绝对是一个非常棒的选择。在openpyxl中,一个Excel文件就是一个Workbook,一张Excel文件中的表就是一个Worksheet。当我们需要对一个Excel文件进行处理的时候,需要先获取到一个Workbook对象,再获取到一个Worksheet对象,对Worksheet对象中rows、columns进行数据处理,最后通过Workbook.save()方法将Workbook对象的内容写入到磁盘中。或者可以使用Openpyxl内置的ExcelWriter()方法来关联Workbook对象,最终实现写入。

软件系统

  • 系统
    • Windows 8.1
  • 软件
    • Python 3.4.3

Install openpyxl module

使用Python3.4.3自带的软件包管理工具easy_install.exe来安装openpyxl模块
Run(Ctrl+r) cmd

cd %pythonRoot%\Scripts
easy_install.exe openpyxl

Check:安装后导入openpyxl模块不会触发ImportError

import openpyxl

Sample code

from openpyxl import Workbook
wb = Workbook()

# grab the active worksheet
ws = wb.active

# Data can be assigned directly to cells
ws['A1'] = 42

# Rows can also be appended
ws.append([1, 2, 3])

# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()

# Save the file
wb.save("sample.xlsx")

Documentationhttp://openpyxl.readthedocs.org

load_workbook()加载Excel文件

我们将一个Excel文件称之为一个workbook,workbook中又包含了许多的worksheet(工作表)。我们可以通过workbook[‘sheetName’]来定位一个worksheet。
将文件导入到内存

load_workbook(filename, read_only=False, use_iterators=False, keep_vba=False, guess_types=False, data_only=False)
In [7]: help(load_workbook)
Help on function load_workbook in module openpyxl.reader.excel:

load_workbook(filename, read_only=False, use_iterators=False, keep_vba=False, guess_types=False, data_only=False)
    Open the given filename and return the workbook

    :param filename: the path to open or a file-like object
    :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile`

    :param read_only: optimised for reading, content cannot be edited
    :type read_only: bool 

    :param use_iterators: use lazy load for cells
    :type use_iterators: bool

    :param keep_vba: preseve vba content (this does NOT mean you can use it)
    :type keep_vba: bool

    :param guess_types: guess cell content type and do not read it from the file
    :type guess_types: bool

    :param data_only: controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet
    :type data_only: bool

    :rtype: :class:`openpyxl.workbook.Workbook`

filename(str or file-like object):是一个Excel文件的路径或者是一个类文件对象。
read_only(bool):只读模式,不可编辑文件。缺省为False
use_iterators(bool):是否调用延迟加载。缺省为False
keep_vba(bool):是否保持VBA的内容。缺省为False
guess_type(bool):获取单元格内容的类型而且不能从文件中读取他。缺省为False
date_only(bool):控制包含有公式的单元格是否有任何公式,或者存储着最后读取Excel表的读取时间
Note
When using lazy load, all worksheets will be class: {openpyxl.worksheet.iter_worksheet.IterableWorksheet} and the returned workbook will be read-only.

In [29]: from openpyxl import load_workbook

In [5]: getwb = load_workbook(filename=r"Handoff.xlsx")   #返回一个Workbook对象

In [6]: getwb
Out[6]: <openpyxl.workbook.workbook.Workbook at 0x4b7c030>

getwb是一个Workbook对象,Workbook()是最基本的一个类,能够在内存中创建文件最后将文件内容写进磁盘。

wbObject.get_sheet_names() 获取Excel表格名

In [70]: getwb.get_sheet_names()    #返回一个Excel表名组成的列表
Out[70]: ['NodeCount']

In [75]: getwb.get_sheet_names()[0]
Out[75]: 'NodeCount'

Workbook[tableName] 定位Excel表

Openpyxl模块支持类似字典键值对映射的方式,来获取表格的内容

In [80]: sheetContent = getwb[getwb.get_sheet_names()[0]]

In [84]: type(sheetContent)
Out[84]: openpyxl.worksheet.worksheet.Worksheet      #返回一个Worksheet对象,用于存储表格内容

WbObject.get_sheet_by_name(sheetName) 定位Excel表

In [57]: sheet1 = getwb.get_sheet_by_name('NodeCount')

Worksheet.rows和Worksheet.columns获取表格的行列值

In [89]: sheetContent.rows
Out[89]:
((<Cell NodeCount.A1>,
  <Cell NodeCount.B1>,
  <Cell NodeCount.C1>,
  <Cell NodeCount.D1>),
 (<Cell NodeCount.A2>,
  <Cell NodeCount.B2>,
  .
  .
  .
In [90]: len(sheetContent.rows)
Out[90]: 25

In [93]: len(sheetContent.columns)
Out[93]: 4

获取Worksheet的行列数目

In [115]: sheetContent.get_highest_row()

In [117]: sheetContent.get_highest_column()

通过切片运算符划分表格区域

因为Worksheet.rows和Worksheet.columns都是Tuple数据类型,支持使用切片运算符。

In [100]: type(sheetContent.rows),type(sheetContent.columns)
Out[100]: (tuple, tuple)

1.获取sheetContent的前两列内容

In [103]: colA,colB = sheetContent.columns[:2]

2.划分出一个二维区域

In [112]: cells = sheetContent['A1':'C3']    #返回一个生成器对象

In [113]: type(cells)
Out[113]: generator

get_column_letter将一个列的索引转化为列的字母

get_column_letter(idx)
Convert a column index into a column letter
(3 -> ‘C’)

In [122]: from openpyxl.cell import get_column_letter

In [124]: for x in list(range(1,11)):
   .....:     ch = get_column_letter(x)
   .....:     print(ch)
   .....:
A
B
C
D
E
F
G
H
I
J

Worksheet.cell().value 定位单元格的数据值

基于给定的坐标(A1)返回一个单元格对象。
cell(coordinate=None, row=None, column=None, value=None) method of openpyxl.worksheet.worksheet.Worksh
Returns a cell object based on the given coordinates.

Usage: cell(coodinate='A15') **or** cell(row=15, column=1)

If `coordinates` are not given, then row *and* column must be given.

Cells are kept in a dictionary which is empty at the worksheet
creation.  Calling `cell` creates the cell in memory when they
are first accessed, to reduce memory usage.

:param coordinate: coordinates of the cell (e.g. 'B12')
:type coordinate: string

:param row: row index of the cell (e.g. 4)
:type row: int

:param column: column index of the cell (e.g. 3)
:type column: int

:raise: InsufficientCoordinatesException when coordinate or (row and column) are not given

:rtype: :class:openpyxl.cell.Cell
In [117]: sheetContent.cell("A1")
Out[117]: <Cell NodeCount.A1>

In [118]: sheetContent.cell("A1").value
Out[118]: 'Cluster'

In [120]: sheetContent.cell(row=1,column=2).value
Out[120]: 'HI'

注意:Excel表格的数据常常在其两边都伴有空格符,需要使用Str.strip()来去除多余的空格符。

直接给单元格赋值

将A列全部置为None

In [127]: colALen = len(sheetContent.columns[0])

In [128]: for i in list(range(1,colALen+1)):
   .....:     sheetContent.cell('A%s' % i).value = None
   .....:

注意:当你为单元格赋值时,Excel的数据类型由赋值的数据类型决定

Woeksheet.get_cell_collection() 获取全部的单元格数据值

获取全部的cell的数值,但是没有顺序。
get_cell_collection() method of openpyxl.worksheet.worksheet.Worksheet instance
Return an unordered list of the cells in this worksheet.
返回一个无序的包含了所有单元格的列表

In [59]: sheetContent.get_cell_collection()

enumerate(iterators)获取迭代器的索引和元素

enumerate(iterable[, start]) -> iterator for index, value of iterable
Return an enumerate object. iterable must be another object that supports
iteration. The enumerate object yields pairs containing a count (from
start, which defaults to zero) and a value yielded by the iterable argument.
enumerate is useful for obtaining an indexed list:
(0, seq[0]), (1, seq[1]), (2, seq[2]), …
接收迭代器类型的实参,返回一个可以遍历的迭代器,包含了(索引,元素)的元组。

In [46]: row1,row2 = sheetContent.rows[:2]

In [49]: for index,cell in enumerate(row1):
   ....:     print(index,cell)
   ....:
0 <Cell NodeCount.A1>
1 <Cell NodeCount.B1>
2 <Cell NodeCount.C1>
3 <Cell NodeCount.D1>

Workbook.save()保存所有操作,并生成新的Excel文件

已指定的文件名保存这个Excel文件。
save(filename) method of openpyxl.workbook.workbook.Workbook instance
Save the current workbook under the given filename.
Use this function instead of using an ExcelWriter.

.. warning::
    When creating your workbook using `write_only` set to True,
    you will only be able to call this function once. Subsequents attempts to
    modify or save the file will raise an :class:`openpyxl.shared.exc.WorkbookAlreadySaved` exception.
In [134]: getwb.save('test.xlsx')

Workbook()创建一个新的Excel文件

创建一个新的Workbook对象
class Workbook(builtins.object)
Workbook is the container for all other parts of the document.

In [40]: from openpyxl import Workbook

In [48]: outwb = Workbook()     #返回一个openpyxl.workbook.workbook.Workbook的对象

In [49]: outwb
Out[49]: <openpyxl.workbook.workbook.Workbook at 0x13665d0>

wbObject.create_sheet() 创建一个Excel表格

create_sheet(title=None, index=None) method of openpyxl.workbook.workbook.Workbook instance
Create a worksheet (at an optional index).
:param title: optional title of the sheet
:type tile: unicode
:param index: optional position at which the sheet will be inserted
:type index: int
title(unicode):创建新Excel表的标题
index(int):新Excel表在Excel文件中插入的位置

In [62]: newSheet = outwb.create_sheet('NewSheet',0)   #返回一个openpyxl.worksheet.worksheet.Worksheet对象

In [63]: type(newSheet)
Out[63]: openpyxl.worksheet.worksheet.Worksheet

Worksheet.append() 逐行追加数值到单元格

当前表格的最后一行追加一行数据。必须传递迭代器实参。
append(iterable) method of openpyxl.worksheet.worksheet.Worksheet instance
Appends a group of values at the bottom of the current sheet.

* If it's a list: all values are added in order, starting from the first column
* If it's a dict: values are assigned to the columns indicated by the keys (numbers or letters)

:param iterable: list, range or generator, or dict containing values to append
:type iterable: list/tuple/range/generator or dict

Usage:

* append(['This is A1', 'This is B1', 'This is C1'])   #添加一行三列
*#or append({'A' : 'This is A1', 'C' : 'This is C1'})  #在指定的'A'和'C'列中添加一行
*#or append({1 : 'This is A1', 3 : 'This is C1'})      #在指定的1、3行中添加一列

:raise: TypeError when iterable is neither a list/tuple nor a dict
In [131]: newSheet.append(['Test',1,2,3])

在指定的列内添加一行添加行

In [80]: newSheet.append({'A':'Add one row'})

在指定的行中添加一列

In [84]: newSheet.append({1:'Is A1',3:'Is C1'})

ExcelWriter() 将Workbook对象写入Excel文件

一般而言,通过Workbok.save()方法就可以将Workbook对象的内容写入到Excel中,openpyxl提供了ExcelWriter这一个更加强大的Excel写实现。

In [88]: from openpyxl.writer.excel import ExcelWriter

class ExcelWriter(builtins.object)
Write a workbook object to an Excel file.返回一个ExcelWriter对象。

In [92]: ewb = ExcelWriter(workbook=outwb)     #将Workbook关联到一个ExcelWriter,最后将Workbook的内容写入到磁盘中

In [95]: newSheet.title='testSheet'

In [96]: outwb.get_sheet_names()
Out[96]: ['testSheet', 'Sheet']

In [97]: for i in list(range(1,11)):
   ....:     newSheet.cell('A%s' % (i)).value = i
   ....:     newSheet.append({'B':i})
   ....:

In [98]: ewb.save(filename='test.xlsx')     #一定要Call ExcelWriterObject.save()方法将Workbook写入到磁盘中。

最后

除了使用上述的方法来处理Excel文件的数据之外,openpyxl还提供了能修改Excel表格的样式的实现openpyxl.styles,这个我们下一篇再继续搞起。 :-)

相关文章
|
2月前
|
数据处理 索引 Python
用Python实现数据录入、追加、数据校验并生成表格
本示例展示了如何使用Python和Pandas库实现学生期末考试成绩的数据录入、追加和校验,并生成Excel表格。首先通过`pip install pandas openpyxl`安装所需库,然后定义列名、检查并读取现有数据、用户输入数据、数据校验及保存至Excel文件。程序支持成绩范围验证,确保数据准确性。
108 14
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
366 10
|
3月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
223 5
|
16天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
86 8
|
8天前
|
机器学习/深度学习 存储 数据可视化
这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来
本书介绍了如何将Python与Excel结合使用,以提升数据分析和处理效率。内容涵盖Python入门、pandas库的使用、通过Python包操作Excel文件以及使用xlwings对Excel进行编程。书中详细讲解了Anaconda、Visual Studio Code和Jupyter笔记本等开发工具,并探讨了NumPy、DataFrame和Series等数据结构的应用。此外,还介绍了多个Python包(如OpenPyXL、XlsxWriter等)用于在无需安装Excel的情况下读写Excel文件,帮助用户实现自动化任务和数据处理。
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
208 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
4月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
283 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
3月前
|
SQL 数据可视化 数据挖掘
想让Excel表格设计更美观?试试这几款好用工具!
Excel表格设计在项目管理和数据分析中至关重要。本文推荐四款辅助工具:板栗看板、Excel自动图表助手、Think-Cell Chart 和 Power BI,分别在任务管理、图表生成、数据可视化等方面表现突出,帮助你设计出更专业、美观的表格。
156 2
|
2月前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
119 0

热门文章

最新文章