两个高效处理excel的python开源库(代码片段)

呆呆敲代码的阿狸 呆呆敲代码的阿狸     2022-12-06     212

关键词:

 

Excel在工作中经常会用到,很多公司的招聘要求就是要求熟练掌握办公软件,其中就包含Excel。对于应用开发者而言,我们经常需要将Excel文件转换为应用程序。大多数情况下我们都把Excel作为数据的导出格式,有时也将其作为数据的输入格式。虽然Excel不是编程语言,但是生活中很多工作都离不开它,在工作中能够自动处理Excel中的数据也是一个重要方向。

 

而在Python中,借助openpyxl 和 formulas 是两个成熟的开源库,处理Excel电子表格,可以实现自动访问、处理表格中数据的功能,省时高效,不易出错,是处理Excel表格的一种好办法。

 

更多源码资料,请私信小编。如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。

 

我们主要利用openpyxl 和 formulas 是两个成熟的开源库来完成以下工作

1.处理Excel文件,用不同的方法访问其中数据;

2.使用formulas;

3.输出Excel文件。

 

一、打开一个Excel文件

 

在Openpyxl中,我们把Excel文件称为"workbook",用openpyxl.workbook.Workbook类的实例来表示。

 

wb = load_workbook(path)

 

 

在Openpyxl中,可以同时进行读取和写入工作,而当我们用完一个Excel文件后,必须关闭它:

 

wb.close

 

二、处理一个Excel文件

 

通常,Workbooks中可能有几个表,我们选择Excel文件中的一个表,访问其中的数据。现在,假设我们对active工作表中的数据比较感兴趣——当用户在他们的应用中打开文件就会看到的工作表:

 

sheet = web.active

 

1)对行进行遍历:

for  row  in  sheet.rows():

 

2)使用cols方法对列进行遍历

for col in sheet.cols():

 

遍历列与遍历行的操作基本相同:它们本身都是可迭代的,并且可以通过索引寻址。

 

3)通过地址访问单元格

 

如果我们需要某个单元格中的数据,那么并不需要遍历整个表格去找;可以使用excel样式的坐标来访问这个单元格:

cell = sheet['C5']

 

4)处理单元格

 

在任何情况下,想要处理电子表格中的数据,就必须访问每个单元格。在Openpyxl中,单元格有一个值和许多仅用于编写的其他信息,比如样式信息。更方便的是,我们可以把单元格中的值作为Python对象(数字、日期、字符串等),用Openpyxl将它们转换为Excel类型。因此,单元格内容就不一定要是字符串。例如,我们以数字的形式读取单元格的内容:

tax_percentage = sheet['H16'].value
tax_amount = taxable_amount * tax_percentage

 

同样,我们在读取之前可以先用Python的isinstance函数来检查单元格中值的类型,询问单元格它存储的数据类型是什么,避免发生不必要的错误。

if isinstance(cell.value, numbers.Number):
 if cell.data_type == TYPE_NUMERIC:
        

 

4)单元格高级寻址

 

我们不一定要一个一个的寻址单元格-还可以设定范围来访问单元格:

  • sheet['D']是指一整行(本例中是D这一行)
  • sheet[7]是指一整列(本例中是第7列)
  • sheet['B:F']代表许多行
  • sheet['4:10'] 代表许多列
  • sheet['C3:H5']是最通用的选择,代表任意范围的单元格
  •  

以上任何一种情况,结果都是一个按行迭代所有单元格(除非迭代的范围以列为标准,在这种情况下,单元格按列顺序进行迭代):

for cell in sheet['B2:F10']:
for cell in sheet['4:10']:

 

 

 

5)单元格迭代器

 

如果上述寻址方案解决不了问题,那我们可以考虑一些简单的方法iter_rows和iter_columns,它们分别按行和列返回单元格生成器。需要指出,这些方法都需要5个参数:

  • min_row - 起始行的编号(1就是A,2就是B,以此类推)
  • min_col - 起始列的编号
  • max_row - 最后一行的编号
  • max_col - 最后一列的编号
  • values_only - 生成器将只显示每个单元格的值,而不是整个单元格对象。所以,我们不需要用cell.value,而只要value。另一方面,我们不能访问单元格的其他属性,比如data_type。例如,如果我们想按列在B2:F10的范围上进行迭代,可以这样写:
for cell in sheet.iter_columns(min_row=2, min_col=2, max_row=6, max_col=10):

 

6)编写一个Excel文件

 

要写一个Excel文件,我们只需在workbook上调用save方法:

wb.save('someFile.xlsx')

 

知道如何保存一个workbook后,让我们看看如何修改它,这将会很有趣。我们可以修改文件中的workbook,也可以修改在Python中创建的workbook。

 

7)添加或移除表格

 

到目前为止,我们已经看到了如何处理一些对象,特别是workbooks和worksheets——就像处理字典一样,访问其中的细节:工作表、行、列、单个单元格、单元格范围。现在,我们将学习如何添加新信息,以及如何更改现有信息。我们先从表格开始。

使用 create_sheet方法来创建worksheet:

new_sheet = wb.create_sheet()

 

这样就可以在workbook中的其他表格之后添加一个新表,我们可以给这个新表一个标题:

new_sheet = wb.create_sheet(title = 'My new sheet')

 

要删除一个表格的话有两种方法。可以根据名字进行删除:

del wb['My sheet']

 

或者还能调用remove方法来删除表格:

wb.remove(sheet)

 

8)增加或移除行、列、单元格

wb = Workbook()
self.assertEqual(wb.active.max_row, 1)
wb.active['A1'].value = 11
wb.active.insert_rows(0, 3)
self.assertEqual(wb.active.max_row, 4)
self.assertEqual(wb.active['A4'].value, 11)

 

三:在Openpyxl中使用formulas

 

1)把单独的formulas编译为Python函数:

func = formulas.Parser().ast(value)[1].compile()

 

2)基于单元格范围使用formulas

 

到目前为止,compute_cell_value函数使用基于其他单元格的formulas,成功地计算了单元格的值。然而,对于那些不依赖于单个单元格,而是依赖于许多单元格的formulas,又该如何计算呢?在这种情况下,函数的输入是一个范围表达式,例如=SUM(A1:21)中的A1:Z1。我们给compute_cell_ value传入以下信息:

def compute_cell_value(input: Union[Cell, Tuple]):
   if isinstance(input, Tuple):
       return tuple(map(compute_cell_value, input))
   if not has_formula(input):
       return input.value
   func = formulas.Parser().ast(input.value)[1].compile()
   args = []
   sheet = input.parent
   for key in func.inputs.keys():
       args.append(compute_cell_value(sheet[key]))
   return func(*args)

 

3)添加新的formula函数:

 

formulas支持许多内置的Excel函数,但不包括所有函数。当然,它也不支持VBA中的自定义函数。但是,我们可以添加一些新的Python函数,这样就可以在formulas中调用这些函数:

def is_number(number):
FUNCTIONS = formulas.get_functions()
FUNCTIONS['ISNUMBER'] = is_number

 

函数的输入值就是Python中的值,比如字符串、数字、日期等,而不是cell类中的值。此外,与普通Python函数相比,我们需要防止XIError,它表示计算中的错误,例如#DIV/0!或#REF! (当我们在输入formulas中犯了一些错误时,通常会在Excel中看到这些):

def is_number(number):
    if isinstance(number, XlError):
        return False
    ...

 

通过使用openpyxl和formulas这两个成熟的开源库,我们可以更高效地用Python处理Excel。对于那些经常使用Excel的用户来说,能够处理复杂的Excel文件是一个非常有用的功能。

 

在这里还是要推荐下我自己建的Python学习Q群:249029188,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

numpy模块(代码片段)

...构要高效的多(该结构也可以用来表示矩阵)。numpy库有两个作用:区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型计算速 查看详情

任何用于处理 Excel(*.xls 和 *.xlsx)文件的开源/免费库? [复制]

】任何用于处理Excel(*.xls和*.xlsx)文件的开源/免费库?[复制]【英文标题】:Anyopensource/freelibraryforhandlingExcel(both*.xlsand*.xlsx)files?[duplicate]【发布时间】:2013-04-0603:10:50【问题描述】:我知道一些用于处理Excel文件的开源库,但这... 查看详情

python如何对excel数据进行处理

在python语言中,可以使用xlrd和xlwt两个库操作excel。在python语言中处理Excel的方法:在python项目中,新建python文件,并依次导入xlrd和参考技术A在python语言中,可以使用xlrd和xlwt两个库操作excel。在python语言中处理Excel的方法:在pyth... 查看详情

d-tale,实现pandasgui高效数据探索分析(代码片段)

作者|Python大数据分析来源| Python大数据分析想必很多人都用过Pandas来处理数据,作为Python数据科学领域的顶级库,Pandas确实有着强大的数据处理能力。特别是结合JupyterNotebook平台,简直可以称作编程里的Excel。Pandas是... 查看详情

python操作excel,你觉得哪个库更好呢?(代码片段)

对比学习python,更高效~Excel数据的类型及组织方式很多人学习python,不知道从何学起。很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。很多已经做案例的人,却不知道如何去学习更加高深的知识。那么针对... 查看详情

机器学习基础---numpy的基本使用(代码片段)

...型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。  NumPy(NumericPython)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行... 查看详情

python中多个词典和列表字典的高效快速数据存储和处理,以及列表的两个词典的交集(代码片段)

我有一个表格例子字典:-all_ways=key1:[list1],key2:[list2],...keyN[listN]我想只找到ith列表中的那些元素,使得它是至少另一个列表的一部分,例如jthlist(i!=j),然后对于所有键只存储满足上述条件的那些元素。除了使用多个循环之外,还... 查看详情

数据分析:工具篇numpynumpy介绍(代码片段)

...重要的科学计算库之一,它提供了丰富的多维数组对象、高效的向量化计算、数组操作、数组切片和索引、广播机制、矩阵计算、随机数生成、通用函数、数学函数和统计函数、数据类型转换等各种强大的功能,可以方便地进行... 查看详情

transbigdata:一款基于python的超酷炫交通时空大数据工具包(代码片段)

...析与可视化的实战!其中主要是使用TransBigData库快速高效地处理、分析、挖掘出租车GPS数据。所介绍的相关技术开发了Python开源库TransBigData,该库面向交通时空大数据分析不同阶段的处理需求,以简洁、高效、灵活、... 查看详情

python自动化高效办公第二期,带你项目实战{excel数据处理批量化生成word模板pdf和ppt等自动化操作}(代码片段)

 相关文章和数据源:Python自动化办公--Pandas玩转Excel【一】Python自动化办公--Pandas玩转Excel数据分析【二】Python自动化办公--Pandas玩转Excel数据分析【三】python处理Excel实现自动化办公教学(含实战)【一】python处理Excel... 查看详情

python代码加速100倍,针对excel自动化处理的加速实战!(代码片段)

...#xff0c;我们先来澄清一下并发(Concurrency)和并行(Parallelism)这两个概念,因为这个两个概念的含义是不同的。并行(Parallelism)指的就是在同一时刻,有两个或两个以上的任务的代码在处理器上执行。从这个概念我们... 查看详情

使用python的pandas库操作excel(代码片段)

使用Python的pandas库操作Excel最近因需要用Excel电子表格处理数据,使用了其它一些方式处理Excel文件数据,这是学习笔记的整理。Excel2003及以前版:列数最大256(2的8次方)列,行数最大65536(2的16次方)行;Excel2007及... 查看详情

python自动化教程:excel自动化:使用pandas库(代码片段)

...动化,是用Python程序创建、编辑、修改Excel文件,处理其中的数据,从而无人化、大批量处理excel文件数据。本篇讲解pandas库操作excel.第二篇 Excel自动化:使用pandas库一、首先用PIP安装openpyxl、xlwings、pandas库 打开... 查看详情

python处理excel表格--读取excel表格(代码片段)

...取Excel表格二、项目:2010年美国人口普查数据自动化处理2.1做什么、如何做?2.2print()与pprint()2.3完整源码及分析前言python处理Excel的方式openpyxl若报错的话,可以下载下面的第三方库pipinstalllxmlpipinstallpillow了解Excel的一... 查看详情

用python处理excel的14个常用操作(代码片段)

...公式:Vlookupvlookup是excel几乎最常用的公式,一般用于两个表的关联查询等。所以我先把这张表分为两个表。df1=sale[['订单明细号','单据日期','地区名称','业务员名称','客户分类','存货 查看详情

用python处理excel表格学习笔记(2021版)(代码片段)

...前言合理的使用Python处理Excel表格文件,可以让我们高效的筛 查看详情

信号处理开源库sp++介绍(代码片段)

SP++(SignalProcessinginC++)是一个关于信号处理与数值计算的开源C++程序库,该库提供了信号处理与数值计算中常用算法的C++实现。SP++中所有算法都以C++类模板方法实现,以头文件形式组织而成,所以不需要用户进行本地编译,只要... 查看详情

pythonasyncpg:高效的基于python/asyncio的postgresql客户端库(代码片段)

查看详情