使用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等库的配合。
下面介绍的Excel实例采用openpyxl库实现了将一个Excel文件的工作簿内容根据规则拆分到多个Excel文件的工作簿中,此实例的编写环境为PyCharm 2019.3.5 x64和Python 3.8。
此实例主要通过使用Python语言的字典来实现根据特定的分类原则将一个工作簿(的工作表数据)拆分成多个工作簿(的工作表数据)。当运行此实例的Python代码(A309.py文件)之后,将根据录取院校把“录取表.xlsx”文件的录取表数据拆分到到各个录取院校工作簿(各个Excel文件)中,效果分别如图1和图2所示。
#导入openpyxl库
import
openpyxl
#读取“录取表.xlsx”文件
myBook=openpyxl.load_workbook(
'录取表.xlsx'
)
mySheet=myBook[
'录取表'
]
#按行获取录取表(mySheet)的单元格数据(myRange)
myRange=list(mySheet.values)
#创建空白字典(myDict)
myDict={}
#从录取表(myRange)的第4行开始循环(到最后一行)
for
myRow
in
myRange[
3
:]:
#如果在字典(myDict)中存在某录取院校(myRow[0]),
#则直接在某录取院校(myRow[0])中添加考生([myRow])
if
myRow[
0
]
in
myDict.keys:
myDict[myRow[
0
]]+=[myRow]
#否则创建新录取院校
else
:
myDict[myRow[
0
]]=[myRow]
#循环字典(myDict)的成员
for
myKey,myValue
in
myDict.items:
#创建新工作簿(myNewBook)
myNewBook=openpyxl.Workbook
myNewSheet=myNewBook.active
#在新工作表(myNewSheet)中添加表头(录取院校、专业、考生姓名、总分)
myNewSheet.append(myRange[
2
])
#在新工作表(myNewSheet)中添加键名(录取院校)下的多个键值(考生)
for
myRow
in
myValue:
myNewSheet.append(myRow)
myNewSheet.title=myKey+
'录取表'
#保存拆分之后(各个录取院校)的工作簿(myNewBook),或者说保存各个Excel文件
myPath=
'结果表-'
+myKey+
'录取表.xlsx'
myNewBook.save(myPath)
上面这段代码在A309\A309.py文件中。在这段代码中,字典(myDict)的作用就是以“录取院校”作为键名,在该键名下添加键值(即添加录取院校录取的多个考生),从而实现对所有考生进行归类。在此案例中,当字典(myDict)添加了考生以后,其保存的考生内容如下:
{'北京大学': [('北京大学','材料化学','李洪',738),('北京大学','材料化学','常金龙',718),('北京大学','材料化学','李科技',712), ('北京大学','金融学','段成全', 722)],'清华大学': [('清华大学','环境工程','易来江',727),('清华大学','车辆工程','张振中',740),('清华大学','车辆工程','田彬',732),('清华大学','软件工程','陈吉文',718)],'浙江大学': [('浙江大学','生物医学','刘康华',695),('浙江大学','机械工程','辛国明',699),('浙江大学','机械工程','李建平',696),('浙江大学','生物医学', '黄明会',703),('浙江大学','生物医学','张华康',692)],'武汉大学':[('武汉大学','口腔医学','杜建国',701),('武汉大学','口腔医学','何友大',692),('武汉大学','城乡规划学','万冬',701)]}
在创建多个工作簿时,则根据键名(录取院校)在每个工作簿的活动工作表中直接添加该键名(录取院校)的所有键值(即录取院校录取的多个考生),最后将每个工作簿保存为Excel文件。在此案例中,myDict[myRow[0]]=[myRow]也可以写成myDict.update({myRow[0]: [myRow]})。
此文档内容根据清华大学出版社出版的图书《Python辅助Word+Excel:让办公更高效》 的“003 使用字典拆分多个工作簿”改写,内容略有变动。
源代码下载
关注微信公众号,后台回复关键词
“openpyxl库”
即可获得完整源代码。
《Python辅助Word+Excel:让办公更高效》
作者:罗帅、罗斌
定价:99.8元
347个
典型办公场景
问题描述+解决方案+真实源码+效果截图
Python+Word+Excel实现办公自动化,
成倍提高办公效率
优化数据分析,让工作省点力!
告别重复劳动,蜕变职场精英!
本书以
“问题描述+解决方案”
的模式,通过300余个案例分别介绍使用Python代码批量处理Excel和Word的技术亮点。
全书内容分为两部分:
在第一部分的Python实战Excel案例中,主要介绍使用Python代码将多个工作表拼接成一个工作表;使用列表推导式累加多个工作表;使用对称差集方法筛选工作表;将一维工作表转换为二维工作表;使用插入行方法制作工资条;根据指定字符将单列拆分为多列;使用字典对工作表的数据分类求和;根据工作表的数据创建3D饼图、3D条形图、3D面积图、圆环图、柱形图、雷达图、气泡图、折线图、股票图等。
在第二部分的Python实战Word案例中,主要介绍使用Python代码自定义Word文件的段落、块、节、样式、表格、图像等。通过本书案例的学习,读者不仅可以体验Python语言的精妙之处,还能对采用Python代码批量处理Excel文件和Word文件产生全新的认知。
本书适合作为Python程序员、数据分析师、营销人员、管理人员、科研人员、教师、学生等各类人士进行数据分析和办公事务处理的案头参考书,无论是初学者还是专业人士,本书都极具参考和收藏价值。
向上滑动阅览
第1部分Python实战Excel案例
001批量创建空白的Excel文件
002批量创建非空白的Excel文件
003使用字典拆分多个工作簿
004使用嵌套字典拆分多个工作簿
005在工作簿中创建空白工作表
006根据指定位置创建空白工作表
007在工作簿中复制多个工作表
008在工作簿中根据表名删除工作表
009在工作簿中根据位置删除工作表
010自定义活动工作表的表名
011自定义所有工作表的表名
012自定义工作表的表名背景颜色
013设置修改工作表的保护密码
014在指定位置插入多个空白行
015在工作表的末尾添加新行
016在起始为空的工作表中添加数据
017在起始为空的工作表中计算数据
018在工作表中移动指定范围的数据
019将筛选结果添加到新建的工作表
020将汇总结果添加到新建的工作表
021将一个工作表拆分成多个工作表
022将多个工作表拼接成一个工作表
023使用列表操作符拼接两个工作表
024使用列表推导式累加多个工作表
025使用集合方法拼接两个工作表
026使用集合方法拼接多个工作表
027使用集合方法筛选两个工作表
028使用对称差集方法筛选工作表
029使用列表关键字筛选两个工作表
030使用filter函数转换二维工作表
031使用zip函数转换一维工作表
032使用map函数转换一维工作表
033使用rows属性获取工作表的所有行
034使用iter_rows方法指定数据范围
035使用起止行号获取指定范围的行
036根据行号获取该行的所有单元格
037根据起止行号隐藏指定范围的行
038自定义工作表指定行的高度
039使用交错颜色设置行的背景
040根据特定要求对每行数据求和
041使用列表推导式对多行数据求和
042使用插入行方法制作工资条
043在指定位置连续删除多行数据
044使用集合随机删除一行数据
045根据指定条件删除多行数据
046在工作表中删除所有重复的行
047使用行参数随机排列工作表
048倒序排列工作表的所有数据
049根据首列数据升序排列工作表
050根据指定列数据升序排列工作表
051根据指定列数据降序排列工作表
052根据字符串长度倒序排列工作表
053使用集合实现随机排列工作表
054根据间隔行数正序筛选所有行
055根据间隔行数倒序筛选所有行
056使用max函数筛选最大值所在的行
057使用关键字筛选符合条件的行
058使用列表设置条件对行进行筛选
059使用或运算组合条件对行进行筛选
060使用与运算组合条件对行进行筛选
061使用集合对行进行随机筛选
062使用交集方法筛选多个工作表的行
063使用集合推导式对行进行筛选
064使用集合在多行多列中筛选数据
065使用columns获取工作表的所有列
066使用iter_cols方法指定数据范围
067使用行列起止编号指定数据范围
068使用起止列号获取指定范围的列
069根据列号获取该列的所有单元格
070根据起止列号隐藏指定范围的列
071冻结指定单元格之前的行和列
072将数字列号转换为字母列号
073将字母列号转换为数字列号
074自定义工作表指定列的宽度
075根据字符串的最大长度设置列宽
076使用交错颜色设置列的背景
077在指定位置插入多个空白列
078在指定位置连续删除多列数据
079使用切片方法将一列拆分为两列
080根据指定字符将一列拆分为两列
081根据指定字符将一列拆分为多列
082根据不同字符将一列拆分为多列
083使用join方法将多列拼接为一列
084将指定列的数据插入其他列
085使用zip函数实现按列对数据求和
086使用列表推导式实现按列对数据求和
087使用列表推导式实现对多列数据求和
088使用列表推导式获取列的最大值
089根据单列数据计算其他列数据
090根据多列数据计算其他列数据
091使用字典推导式交换两列的数据
092使用shuffle方法随机排列多列数据
093使用values属性获取所有单元格数据
094使用value属性读写指定单元格数据
095使用cell方法在单元格中写入数据
096在每行的末尾单元格中写入数据
097在单元格中写入计算平均值公式
098在复制单元格时禁止复制公式
099在单元格中自定义货币格式
100在单元格中自定义日期格式
101在单元格中自定义时间格式
102在单元格的数据上添加删除线
103在单元格的数据上添加双下画线
104自定义在单元格中的文本颜色
105根据多个参数创建自定义字体
106在单元格中实现垂直居中内容
107在单元格中实现靠右对齐内容
108在单元格中根据角度旋转内容
109在单元格中自动换行超长内容
110使用指定颜色设置单元格的背景
111使用渐变色设置单元格的背景
112使用网格线设置单元格的背景
113使用细实线设置单元格的背景
114使用斜纹线设置单元格的背景
115使用粗实线设置单元格的边框
116使用预置表格样式设置单元格
117在单元格中将单行内容拆为多行
118根据指定的参数合并多个单元格
119将合并单元格拆分为多个单元格
120拆分工作表的所有合并单元格
121清除工作表的所有合并单元格
122在单元格中添加过滤器过滤数据
123在多个单元格中替换指定的内容
124在多个单元格中删除指定的内容
125统计相同内容在单元格中的次数
126统计部分内容在单元格中的次数
127根据次数重复单元格的部分内容
128解析在单元格中的身份证日期信息
129使用集合比较单元格的无序内容
130使用集合删除单元格的重复内容
131使用列表删除单元格的重复内容
132使用字典对单元格数据分类求和
133使用sum函数计算单元格的分类合计
134计算多个单元格的分类平均值
135在多个单元格中分类筛选最大值
136在多个单元格中分类筛选最小值
137使用map函数规范在单元格中的单词
138在包含空白的单元格中使用map函数
139在指定的单元格中添加批注
140在指定的单元格中添加图像
141将图像缩放之后添加到单元格
142将图像旋转之后添加到单元格
143将图像裁剪之后添加到单元格
144将图像拼接之后添加到单元格
145将图像水平镜像后添加到单元格
146将图像垂直镜像后添加到单元格
147将图像黑白转换后添加到单元格
148将图像模糊处理后添加到单元格
149调整图像对比度并添加到单元格
150调整图像亮度并添加到单元格
151调整图像色度并添加到单元格
152调整图像锐度并添加到单元格
153根据索引删除在单元格中的图像
154创建工作表及关联的饼图
155根据工作表数据创建饼图
156自定义饼图及图例的宽度
157自定义饼图及图例的样式
158自定义饼图的图例位置
159自定义饼图(本身)的大小
160自定义饼图(本身)的位置
161自定义饼图切片的填充颜色
162在饼图切片中不设置填充颜色
163使用网格填充饼图的指定切片
164在饼图的切片上显示百分比
165在饼图的切片上显示数值
166自定义饼图切片的文字大小
167在饼图中创建凸出显示的切片
168根据工作表的数据创建3D饼图
169使用独立饼图投影饼图小切片
170使用独立条形图投影饼图小切片
171使用未填充的切片创建扇形图
172根据工作表的数据创建圆环图
173在圆环图中自定义内孔的大小
174自定义圆环图首个切片的位置
175在圆环图中创建凸出显示的切片
176根据多列数据创建嵌套圆环图
177根据工作表的数据创建柱形图
178自定义柱形图各个柱子的样式
179在柱形图中创建点状样式的柱子
180在柱形图中创建水平条纹的柱子
181在柱形图中指定柱子的填充样式
182自定义柱形图柱子的填充颜色
183自定义柱形图柱子的边框颜色
184在柱形图的柱子顶端添加数值
185自定义柱形图柱子的字体大小
186根据工作表的行数据创建柱形图
187根据工作表多列数据创建柱形图
188根据工作表数据创建堆叠柱形图
189根据比例创建百分比堆叠柱形图
190根据工作表数据创建3D柱形图
191自定义3D柱形图的样式
192根据多列数据创建堆叠3D柱形图
193创建百分比风格的堆叠3D柱形图
194根据工作表的数据创建3D条形图
195根据多列数据创建堆叠3D条形图
196使用深度复制方法创建3D条形图
197根据工作表的数据创建折线图
198禁止在折线图中绘制默认的图例
199自定义折线图的折线及背景样式
200自定义折线图的折线颜色和宽度
201在折线图中使用虚线绘制折线
202在折线图的数据点上绘制图形符号
203在折线图中禁止绘制默认的折线
204自定义折线图数据点的图形符号
205在折线图的各个数据点上添加数值
206在折线图中禁止绘制y轴主刻度线
207在折线图的右端绘制y轴的刻度值
208在折线图的右端绘制y轴及刻度值
209自定义折线图的x轴和y轴标题
210自定义折线图x轴的日期格式
211自定义折线图x轴的时间格式
212在折线图的顶部绘制x轴及标签
213自定义折线图x轴的标签字体
214降序绘制折线图x轴的标签刻度
215自定义折线图坐标轴的最大值
216根据工作表数据创建多条折线图
217根据工作表数据创建堆叠折线图
218根据比例创建百分比堆叠折线图
219根据工作表的数据创建3D折线图
220根据工作表的数据创建面积图
221根据工作表的数据创建3D面积图
222根据随机数创建工作表及散点图
223根据工作表的数据创建雷达图
224根据工作表的多列数据创建雷达图
225根据最高价和最低价创建股票图
226根据开盘价和收盘价创建股票图
227自定义参数改变股票图线框宽度
228根据交易价和成交量创建股票图
229根据工作表的多列数据创建气泡图
第2部分Python实战Word案例
230在Word文件的末尾追加段落
231在Word文件的段前插入段落
232在Word文件中删除指定段落
233在Word文件中调整段落位置
234在段落的段前和段后设置间距
235在段落中使用英寸设置行间距
236在段落中使用磅数设置行间距
237禁止指定段落分散在两个页面
238强制两个段落在同一页面中
239在指定段落之前强制执行分页
240自定义指定段落的对齐样式
241自定义指定段落的缩进尺寸
242自定义段落首行的缩进尺寸
243在指定段落中实现悬挂缩进
244在添加段落时设置段落样式
245在Word文件中删除指定样式
246在段落的样式属性中设置字体
247在段落的样式属性中设置颜色
248使用样式改变多个段落的字体
249使用样式改变多个段落的高亮颜色
250使用样式改变多个段落的首行缩进
251使用正则表达式查找样式名称
252在指定段落中实现替换文本
253在所有段落中实现替换文本
254在指定段落末尾添加新块
255在块与块之间添加行中断
256在块与块之间添加页中断
257根据文本内容隐藏指定块
258自定义指定块的高亮颜色
259自定义指定块的文本颜色
260使用主题颜色设置块的文本
261使用已有样式设置块的样式
262使用中文字体设置块的字体
263在块中实现镂空效果的文本
264在块中实现雕刻效果的文本
265在块中设置粗斜体样式的文本
266在块中设置扁平样式的文本
267在块的文本底部添加波浪线
268在块的文本底部添加点线
269在块的文本底部添加虚线
270在块的文本底部添加点画线
271在块的文本底部添加下画线
272自定义块的文本下画线颜色
273在块中逐字添加独立下画线
274在块的文本中部添加删除线
275在块的文本四周添加线框
276在块的文本底部添加着重号
277在块中创建上标样式的文本
278在块中自定义字符之间的间距
279在段落中大写每个单词首字母
280在块中强制大写每个英文字母
281以小号字体大写块的英文字母
282在段落末尾的块中创建超链接
283在超链接文本的底部添加点线
284设置超链接文本和下画线的颜色
285将Word文件的图像保存为文件
286在Word文件的末尾添加图像
287自定义Word文件的图像尺寸
288在Word文件的块中添加图像
289在Word文件的段前插入图像
290居中对齐Word文件的单个图像
291分散对齐Word文件的多个图像
292在Word文件中创建折叠标题
293在Word文件中创建多级标题
294设置标题在水平方向的对齐样式
295在Word文件中创建无序列表
296在无序列表左端设置缩进距离
297在Word文件中创建有序列表
298在Word文件中添加标题样式
299在Word文件中添加副标题样式
300在Word文件中添加引用样式
301在Word文件中添加明显引用样式
302在Word文件的末尾添加表格
303在Word文件中删除指定表格
304在Word文件的表格中添加新行
305在Word文件的表格中添加新列
306在Word文件的表格中添加图像
307自定义Word文件的表格行高
308自定义Word文件的表格列宽
309自定义Word文件的表格边框
310自定义Word文件的表格字体
311自定义Word文件的表格样式
312自定义Word文件的表格对齐方式
313自定义表格的单元格边框颜色
314自定义表格的单元格边框粗细
315自定义表格的单元格背景颜色
316自定义表格的单元格文本颜色
317设置单元格文本的水平对齐方式
318设置单元格图像的垂直对齐方式
319设置图像与单元格的右上角对齐
320设置单元格的多个图像分散对齐
321在表格中合并多个连续的单元格
322根据行号删除在表格中的行
323根据列号删除在表格中的列
324根据条件删除在表格中的行
325根据条件删除在表格中的列
326根据条件筛选在表格中的行
327按行对多个单元格的数据求和
328按列对多个单元格的数据求和
329在Word文件中创建多个节
330强制从偶数页开始创建每个节
331在Word文件的节中添加页眉
332在Word文件的节中添加分区页眉
333在指定节中自定义偶数页的页眉
334在指定节中自定义首页的页眉
335自定义指定节的页眉与边缘的距离
336在Word文件的节中添加页脚
337在Word文件的节中添加分区页脚
338在指定节中自定义偶数页的页脚
339在指定节中自定义首页的页脚
340自定义指定节的页脚与边缘的距离
341自定义指定节页面的左右边距
342自定义指定节页面的纸张大小
343强制两节的内容出现在同一页面中
344强制指定的节从奇数页开始
345在Word文件的页面上添加线框
346设置Word文件的页面背景颜色
347自定义Word文件的作者等信息
微信小程序游戏开发│猜数字小游戏(附源码+视频)
Flink编程基础│Scala编程初级实践
Flink编程基础│FlinkCEP编程实践
Flink编程基础│DataStream API编程实践
Flink编程基础│DataSet API编程实践
数 据分析实战│客户价值分析
数据分析实战│价格预测挑战
数据分析实战│时间序列预测
数据分析实战│KaggleTitanic生存预测
返回搜狐,查看更多
责任编辑: