基于最新Python的Excel应用浅析
2021-06-29樊潮秦娥
樊潮 秦娥
摘 要: 利用最新版Python实现对最新版本Excel中数据的存取,文章对该功能的编程及其应用进行了分析,解决了最新版的Python与最新版的Excel一起使用时出现的不兼容情况,实现了对Excel中的大批量数据的处理。对一些想利用Python来处理Excel数据的人,具有一定的帮助。
关键词: Python; Openpyxl; Excel; Cell; Windows; Office; 数据
中图分类号:TP391 文献标识码:A 文章编号:1006-8228(2021)04-69-04
Abstract: Using the latest version of Python to access the data in the latest version of Excel, this paper analyzes the programming and application of this function, solves the incompatibility between the latest version of Python and the latest version of Excel, and realizes the processing of large amount of data in Excel. It is helpful for those who want to use Python to process Excel data.
Key words: Python; Openpyxl; Excel; Cell; Windwos; Office; data
0 引言
Python作为现代比较热门的语言之一,其应用在几乎所有的领域。其处理能力是很强的。微软出品的Office从推出到广泛应用,早已成为办公软件的必需品。Office家族中的Excel电子表格在各行各业的数据存储和处理上占有重要的地位。对Excel电子表格数据的存取也成为了许多人的日常工作。
随着计算机技术的飞速发展,各种软件的更新周期越来越短,Python也如此。Python 1991年主要发行2.0版本,直到2008年12月才发行了以3.0为主的版本。而随着Python的不断更新,很多以Python2.0版本的库慢慢迁移到以Python3.0为主的版本中,在以Python3.0为主的版本的更新过程中,如3.1版本中的电子表格处理命令,会在3.9版本中出错。而在3.9.0b4的版本中能使用的命令会出错,但是没有提示如何修改,可是在使用3.10.0a1版本时,会提示警告或报错,有时报错并提示如何修改。这说明Python确实在不断的优化和改进。
Excel是很实用的软件,它的功能和方便性在不断地增强,它的版本也在不断地更新。在这个软件不断更新、功能越来越强大的前提下,我们来分析在最新Python环境中对最新版本的电子表格的应用。
1 Excel数据分析
微软的Office作为现代人们办公的一种工具,其具有很大的市场,而在这个工具中有一个作为数据存储,而且方便人们来处理这种数据的就是Excel表格。Excel的功能越来越强大起来,其自带的函数,可以完成人们大部分的工作,其形成的图表,也是能实现人们的大部分的要求。但是,Excel中的数据如果按自己的一些对Cell的要求来处理时,就不是那么的得心应手了,所以采用一些易用的编程方式来实现Cell数据的存取,是简单可行的。VBA能够处理Excel中的数据,如Office2019版本,“省计算机等级考试上报数据的自动生成系统实现”[1]中对数据的处理,程序运行,出现了一些误差,有一些数据处理了,有一些数据还保持原样,没有被处理,经多次程序的修改和验证,不能完全满足简单的Cell数据处理要求。为了把Excel中的Cell数据取出来,我们可以尝试采用现代最流行的编程工具之一Python来处理Excel中的数据。
2 Python分析
Python是“Python is powerful... and fast; plays well with others; runs everywhere; is friendly & easy to learn; is Open.”[2] 它是一个跨平台的计算机语言,是一个高抽象的具有解释性、编译性、互动性和面向对象的脚本编程语言。它现在应用的领域是越来越多,它可以应用于:人工智能、桌面界面开发、软件开发、后端开发、Web 和 Internet开发、科学计算和统计、网络爬虫等方面。但是在应用于Excel表格处理方面,缺少具体实现的一些程序和应用的分析,在查找了百度和Python网站后,结合一些Excel的数据,进行了编程和分析,尝试发现了如何用Python程序来处理Excel中的数据。因为在Python官方网站中声明了Python2.7版本在2020年1月1日后不再提供支持和更新,所以就采用了Python-3.10.0a2-amd64最新的版本来进行我们的应用分析。
3 Python和EXCEL应用浅析
Python做为编程语言,本文中采用了最新的版本3.10.0a2,这是一个测试的版本,也代表是最新的,而不是稳定的版本,但是它代表了,以后的版本中會出现新的功能或新的特性。而采用这个版本时,是来进行对Excel中的数据进行操作的,采用的操作环境是在Windwos10基础上的PythonWindwos版。在Python中是不能直接对Excel中数据进行直接操作的,所以采用了第三方模块Openpyxl。Openpyxl模块让Python程序能读取和修改Excel电子表格文件[3]。在Python编程环境中导入对Excel表格进行操作的对应的Openpyxl模块,就可以利用这个库对Excel表格进行操作了。在导入Import Openpyxl模块时,如果提示“MoudleNotFoundError:No module named ‘openyxl”出错,就表明你没有把Openpyxl这个第三方模块导入到当前的编程环境中来,这时你就要以管理员的权限来运行cmd命令,在打开的cmd窗口中输入:pip install openpyxl,如果安装成功,然后在Python的IDLE环境再次输入命令:Import Openpyxl,没有提示,那就表明你已经成功安装了Openpyxl这个模块,接下来就你可以引用这个模块中对应于Excel操作的函数了。如图1(导入需要的第三方模块)所示。
图1中所示的命令Import os,是为了改变当前的工作目录为C盘根目录,你可以把要处理的Excel文件放在C盘根目录中,以避免和其他的Excel文件混淆。
接下来,打开要处理的Excel文件,命令格式为:wb=openpyxl.load_workbook('ww.xlsx'),如果你的Excel文件也为ww.xlsx,那么用openpyxl.load_workbook()函数就可以打开你的Excel文件,把打开的文件传递给变量wb。在这打开的过程中,由于测试是采用xls的文件格式,这是早期Excel文件格式,所以打开这个Excel文件时会提示错误,Openpyxl库只能打开新版本的Excel,并会提示你用Xlrd模块来打开旧版本xls格式的文件,这是要注意的。而在采用Python3.9.0b4版本中,并不会提示可以采用Xlrd模块来操作,只会报错。所以我们采用最新的Python编程环境,以及最新的Office2019,并采用Openpyxl模塊来进行操作。
打开Excel工作薄,访问这个工作薄内的工作表。如图2(Excel中数据的表结构)所示。
定义一个变量如:shet1=wb['Sheet1']的形式,就可以访问ww工作薄中的以Sheet1为表名的工作表了,如果你有二个以上工作表中的数据要处理,你可以命名多个变更来进行,如:shet3=wb['Sheet3']等等,把这个表传递给变量shet1。在你的工作薄中的一个表有几列数据时,可以先命名变量进行简化处理,可以更方便来访问和使用,例如:cc="C++"、ja="JAVA"、os="操作系统"、sj="数据结构"这样的形式,可以形成一个字典的格式,例如:Dicttbk={2:cc,3:ja,4:os,5:sj}操作,在字典的定义中,可以把其中的键2、3、4、5理解为对应的某表中的第几列,方便记忆和使用,其中的cc、ja、os、sj是上面已经定义的变量,这样很方便进行一些大数据量处理里的循环操作。如图3(打开Excel及定义字典)所示。
如果没有定义如:cc、ja、os、sj这些变量时,在定义字典时直接使用会提示错误信息。定义好这个字典后,可以遍历整个表中的每一列数据,而每一列数据就是在字典中的键2、3、4、5。
下面经过程序的测试和优化,从一个个的列访问的循环,优化为定义一个函数,而通过字典的循环,进而访问到某个表中的每一列每一行的数据,这些数据取出来后,就可以进行任意的操作和使用了。
首先,先定义了一个自加的变量count,并赋值为1,定义这个变量是为了后面进行循环时,可以访问控制每一列的相应行的数据。这个变量可以传递到函数InGrades(col,strings)中的col中。定义的这个通用函数是InGrades(col,strings),这个函数实现的功能,就是现在通过Cell中的shet3.cell特性,调用row和column参数来访问每个单元格,以取出表‘Sheet3中的一个CELL的数据与‘Sheet1中列的数据进行比较,如果符合条件就填入到‘Sheet1中相应列的相应行的Cell。如下代码所示。
def InGrades(col, strings):
for rownum3 in range(2,shet3.max_row + 2): #调用
shet3.max_row特性来每一列的长度控制循环次数加2
shet3Name=shet3.cell(row=rownum3,column=1).value
#从Sheet3表中取一个名字
shet3val=shet3.cell(row=rownum3,column=col).value
#从Sheet3表中取第几列成绩
if shet3val != "/": #判断如果不为'/'进行操作
for rownum1 in range(2,shet1.max_row+2):
shet1Name=shet1.cell(row=rownum1,column=5)
.value #从Sheet1表中取一个名字
shet1val =shet1.cell(row=rownum1,column=4)
.value #从Sheet1表中取对应科目
if (shet1Name==shet3Name) and (shet1val==
strings): #二表中名字相同且对应科目
shet1.cell(row=rownum1,column=18).value=
shet3val #就把这个成绩填入
这个通用函数的定义,优化了程序代码的长度,也清晰地实现了所需要的功能。
以下通过函数的调用,来实现Excel中的每个表中的每个Cell数据的取出和更改。可通过一个循环来实现,这个循环的控制就是前面准备工作中所定义的字典。而在这个循环中,二个循环变量:key、value是不可或缺少的,否则不能正确的把值取出,以及不能正确的把值传递到函数中去的,这是要特别注意的。代码如下。
If __name__==‘__main__: #这段代码确保块中的语句
只有当程序自己运行时才被执行[4],而不是在程序导入另一个程序时才会执行。
for key,value in Dicttbk.items(): #从字典中取出键值和
对应键值的数据,一定要二个参数,
#如果只有一个value,取出value數值为原组数据(2:cc)
#不能使用到下面的函数调用参数中
count+=1 #从成绩中第二列开始,因为第一列为姓名
#print(count)这个可用来检测你的数据是不是有这么多
#time.sleep(2)延迟时间来检测你的结果,随时可按ctrl+c中
断,要先导入time库,#time模块提供存取与转换时间的函数[5],sleep()将目前进程置入睡眠状态,睡眠时间为秒。
InGrades(count,value)
至此,已把Excel中的数据取出,并进行了相应的操作,如果想对数据进行其他的操作,如删除、和其他CELL的数据进行比较等,都是可以的。
最后,要保存所做的更改,这是重要的一步,也是最简单的一步,只用一条命令:wb.save('new.xlsx') #另存为new.xlsx,This operation will overwrite existing files without warning[6]。
这个命令把更改后的数据保存为new.xlsx文件,保存到C盘根目录中,其结构还是和ww.xlsx原来一样,只是其中相应的数据已经得到更改,满足了相应需求。
4 结束语
本文分析了Python最新版对Excel中数据存取的功能编程及应用,对一些想利用Python来处理Excel数据的同行,会比较有用。文中的代码敲入到最新版Python3.10.0a2的IDLE环境中,保存为一个py文件,把需要处理的Excel文件以文中图2所示的格式保存,然后拷贝到C盘根目录,并改名为“ww.xlsx”文件 就可以运行这个程序,以自动化的方式来处理大型Excel数据,简化了人们大部分日常Excel数据处理的工作。但是在处理这些数据时,本文提到的一些需注意的方面也需重视,如文件的格式、版本的不同等。在处理自己的文件时,还需做好备份,以防止文件修改后,没有达到要求,而发生数据不可挽回。Python对Excel数据的操作,以及Python各种强大功能的应用,还有很多应用需要尝试和分析。本文浅析了Python对Excel中的数据的一些应用,未来需要不断的学习,不断的提升Python相关知识,以待更好地实现更多的功能应用。
参考文献(References):
[1] 樊潮.省计算机等级考试上报数据的自动生成系统实现[J].计算机时代,2012.7:37-39
[2] 官网首页[EB/OL].https://www.python.org/about/
[3] [美]AI Sweigart著,王海鹏译.Python编程快速上手---让繁琐工作自动化[M].人民邮电出版社,2016.
[4] [澳]阿米特·萨哈(Amit Saha)著,许杨毅,刘旭华 译.Python数学编程[M].人民邮电出版社,2020.
[5] 王英英著.Python3.8从入门到精通(视频教学版)[M].清华大学出版社,2020.
[6] Warning[EB/OL].https://openpyxl.readthedocs.io/en/stable/tutorial.html#data-storage