python3.10(python310怎么进入编程界面)
使用Python开发微软的Excel通常需要使用第三方库,如xlrd、xlwt、xlutils、xlwings、win32com、openpyxl、pandas等,各种第三方库都有自己独特的功能和缺陷,因此在采用这些第三方库之前需要慎重考虑。
如:xlrd只能读取在Excel文件中的数据;xlwt只能在Excel文件中写入数据;xlutils虽然可以读写Excel文件的数据,但是它依赖于xlrd和xlwt;xlwings可以从Excel中调用Python,也可在Python中调用Excel;win32com可以独立读写Excel文件的数据;openpyxl也可以独立读写Excel文件的数据;pandas能够读写在Excel文件中的数据,但是它需要xlrd/xlwt/openpyxl/xlsxwriter等库的配合。
下面介绍两个Python辅助Excel实例,分别是根据指定字符将一列拆分为多列,和根据不同字符将一列拆分为多列。
实例:根据指定字符将一列拆分为多列
01
实例功能
此案例主要通过在while循环中多次使用Python语言的字符串的partition方法,从而实现在工作表中将包含多个指定字符('-')的一列拆分为多列。当运行此案例的Python代码(A325.py文件)之后,将把“员工表.xlsx”文件的员工表的姓名列拆分为分公司列、部门列、组名列、姓名列,代码运行前后的效果分别如图1和图2所示。
展开全文
■ 图1
■ 图2
02
实现代码
import openpyxl
myBook=openpyxl.load_workbook( '员工表.xlsx',data_only= True)
mySheet=myBook.active
#按行获取员工表(mySheet)的单元格数据(myValues)
myValues= list(mySheet.values)
myNewBook=openpyxl.Workbook
myNewSheet=myNewBook.active
myNewSheet.title= '员工表'
myNewSheet.append([ '工号', '分公司', '部门', '组名',
'姓名', '最高学历', '专业', '出生年份'])
#从myValues的第2行开始逐行循环(到最后一行)
formyRow in myValues[ 1:]:
myList=[]
#拼接行(myRow)的第1列单元格的数据
myList+=[myRow[ 0]]
#获取行(myRow)的第2列单元格的数据(即将要拆分的字符串)
myStr=myRow[ 1]
#统计字符'-'的个数
myMax=myStr.count( '-')
myCount= 1
#有多少个指定字符('-')就循环多少次
whilemyCount<=myMax:
#根据指定字符('-')将字符串(myStr)拆分为三个成员
myParts= list(myStr.partition( '-'))
#在列表(myList)中添加第一个成员
myList+=[myParts[ 0]]
#将包含多个指定字符的第三个成员myParts[2]赋值给myStr,
#以进行下次循环(即再次拆分)
myStr=myParts[ 2]
#如果是最后一次循环
ifmyCount==myMax:
#则在列表(myList)中添加第三个成员myParts[2]
myList+=[myParts[ 2]]
#累计循环次数
myCount+= 1
#拼接行(myRow)的第3列及后面的所有单元格数据
myList+=myRow[ 2:]
myNewSheet.append(myList)
myNewBook.save( '结果表-员工表.xlsx')
03
代码说明
在上面这段代码中,while循环用于根据指定字符('-')使用partition方法拆分字符串,例如,字符串“北京分公司-投资部-2组-李松林”包含3个指定字符('-'),因此要循环3次,下面是每次的拆分结果:
此案例的源文件是MyCode\A325\A325.py。
扫码观看讲解视频
实例:根据不同字符将一列拆分为多列
01
实例功能
此案例主要通过使用Python语言的字符串的find方法,从而实现在工作表中根据指定的不同字符(如'年'、'月'、'日'等)将一列的数据(如'1989年2月18日')拆分到多(三)列中。当运行此案例的Python代码(A320.py文件)之后,将把“员工表.xlsx”文件的员工表的出生日期列拆分为出生年份列、出生月份列、出生日列,代码运行前后的效果分别如图3和图4所示。
■ 图3
■ 图4
02
实现代码
import openpyxl
myBook=openpyxl.load_workbook( '员工表.xlsx',data_only=True)
mySheet=myBook.active
#按行获取员工表(mySheet)的单元格数据(myValues)
myValues=list(mySheet.values)
myNewBook=openpyxl.Workbook
myNewSheet=myNewBook.active
myNewSheet.title= '员工表'
myNewSheet.append([ '工号', '部门', '姓名', '最高学历',
'专业', '出生年份', '出生月份', '出生日'])
#从myValues的第2行开始逐行循环(到最后一行)
formyRow inmyValues[ 1:]:
myList=[]
#拼接行(myRow)的第1列到第5列之间的单元格数据
myList+=myRow[ 0:5]
#获取行(myRow)的第6列(出生日期列)的单元格数据
myDate=myRow[ 5]
#查询字符'年'在出生日期字符串(如‘1989年2月18日’)的位置(索引)
myYearPos=myDate.find( '年')
#获取年份字符串(如‘1989年’)
myYear=myDate[ 0:myYearPos+1]
#查询字符'月'在出生日期字符串的位置(索引)
myMonthPos=myDate.find( '月')
#获取月份字符串(如‘2月’)
myMonth=myDate[myYearPos+ 1:myMonthPos+1]
#获取出生日字符串(如‘18日’)
myDay=myDate[myMonthPos+ 1:]
#在列表(myList)中添加年份、月份、出生日
myList+=[myYear,myMonth,myDay]
myNewSheet.append(myList)
myNewBook.save( '结果表-员工表.xlsx')
03
代码说明
在上面这段代码中,myYearPos=myDate.find('年')表示查找字符‘年’在字符串myDate (如'1989年2月18日')的索引位置。myYear=myDate[0:myYearPos+1]表示根据索引位置在字符串myDate中获取子字符串myYear,0表示子字符串的起始位置,myYearPos表示子字符串的结束位置,如'1989年'。
此案例的源文件是MyCode\A320\A320.py。
04
补充说明
阅读和使用本书案例要求读者具备一定的Python语言编程基础和操作Excel的基本常识,关于Python语法基础可以参考 Python 基础语法教程(https://www.runoob.com/python/python-basic-syntax.html)。
扫码观看讲解视频
05
源代码下载
关注微信公众号,后台回复关键词 “Python辅助ExcelV081” 即可获得完整源代码。
06
参考书籍
《Python辅助Word+Excel:让办公更高效》
作者:罗帅、罗斌
定价:99.8元
扫码优惠购书
347个典型办公场景
问题描述+解决方案+真实源码+效果截图
Python+Word+Excel实现办公自动化,
成倍提高办公效率
优化数据分析,让工作省点力!
告别重复劳动,蜕变职场精英!