Python让Excel飞起来—批量处理行、列和单元格
目录
案例01 精确调整多个工作簿的行高和列宽
举一反三 精确调整一个工作簿中所有工作表的行高和列宽
案例02 批量更改多个工作簿的数据格式
举一反三 批量更改多个工作簿的外观格式
案例03 批量替换多个工作簿的行数据
举一反三 批量替换多个工作簿中的单元格数据
举一反三 批量修改多个工作簿中指定工作表的列数据
案例04 批量提取一个工作簿中所有工作表的特定数据
举一反三 批量提取一个工作簿中所有工作表的列数据
举一反三 在多个工作簿的指定工作表中批量追加行数据
案例05 对多个工作簿中指定工作表的数据进行分列
举一反三 批量合并多个工作簿中指定工作表的列数据
举一反三 将多个工作簿中指定工作表的列数据拆分为多行
案例06 批量提取一个工作簿中所有工作表的唯一 值
举一反三 批量提取一个工作簿中所有工作表的唯一值并汇总
案例01 精确调整多个工作簿的行高和列宽
- 代码文件:精确调整多个工作簿的行高和列宽.py
- 数据文件:销售表(文件夹)
调整为:
代码如下:
import os
import xlwings as xw
file_path=r'C:\Users\Administrator\Desktop\22\销售表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)for j in workbook.sheets:value=j.range('A1').expand() #在工作表中选定要调整行高列宽的区域value.column_width=12 #将列宽调整为可容纳12个字符的宽度value.row_height=20 #将行高调整为20磅workbook.save()workbook.close()
app.quit()
举一反三 精确调整一个工作簿中所有工作表的行高和列宽
- 代码文件:精确调整一个工作簿中所有工作表的行高和列宽.py
- 数据文件:采购表.xlsx
import xlwings as xw
app=xw.App(visible=False)
workbook=app.books.open(r'C:\Users\Administrator\Desktop\22\采购表.xlsx')
for i in workbook.sheets:value=i.range('A1').expand()value.column_width=12 #将列宽调整为可容纳12个字符的宽度value.row_height=20 #将行高调整为20磅
workbook.save()
workbook.close()
app.quit()
案例02 批量更改多个工作簿的数据格式
- 代码文件:批量更改多个工作簿的数据格式.py
- 数据文件:采购表(文件夹)
import os
import xlwings as xw
file_path=r'C:\Users\Administrator\Desktop\22\采购表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)for j in workbook.sheets:row_num=j['A1'].current_region.last_cell.row # 获取工作表中数据区域最后一行j['A2:A{}'.format(row_num)].number_format='m/d' # 将A列的“采购日期”数据全部更改为“月/日j['D2:D{}'.format(row_num)].number_format='¥#,##0.00' # 将D列的“采购金额”数据全部更改为带货币符号并保留2位小数workbook.save()workbook.close()
app.quit()
代码解析
- 第13行和第14行代码使用了第4章案例08中介绍的format()函数来拼接代表单元格区域的字符串。以'A2:A{}'.format(row_num)为例,假设当前工作表中数据区域最后一行的行号row_num为16,则'A2:A{}'.format(row_num)就相当于'A2:A16',代表单元格区域A2:A16。
- 拼接出单元格区域后,就可以使用xlwings模块中的number_format属性来设置单元格区域中数据的格式。该属性的取值为一个代表特定格式的字符串,与Excel的“设置单元格格式”对话框中“数字”选项卡下设置的格式对应。
举一反三 批量更改多个工作簿的外观格式
- 代码文件:批量更改多个工作簿的外观格式.py
- 数据文件:销售表(文件夹)
变成如下含格式的表:
import os
import xlwings as xw
file_path=r'C:\Users\MLoong\Desktop\22\销售表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)for j in workbook.sheets:#设置标题的格式j['A1:H1'].api.Font.Name='微软雅黑' #设置工作表标题行的字体为宋体j['A1:H1'].api.Font.Size=10 #设置工作表标题行的字号为10磅j['A1:H1'].api.Font.Bold=True #加粗j['A1:H1'].api.Font.Color=xw.utils.rgb_to_int((255,255,255)) #字体颜色白色j['A1:H1'].color=xw.utils.rgb_to_int((0,0,0)) #单元格背景色‘黑色’j['A1:H1'].api.HorizontalAlignment=xw.constants.HAlign.xlHAlignCenter #水平居中j['A1:H1'].api.VerticalAlignment=xw.constants.VAlign.xlVAlignCenter #垂直居中#设置主体内容的格式j['A2'].expand().api.Font.Name='微软雅黑' #设置工作表标题行的字体为宋体j['A2'].expand().api.Font.Size=10 #设置工作表标题行的字号为10磅j['A2'].expand().api.HorizontalAlignment=xw.constants.HAlign.xlHAlignLeft #水平靠左j['A2'].expand().api.VerticalAlignment=xw.constants.VAlign.xlVAlignCenter #垂直居中for cell in j['A1'].expand():for b in range(7,12):cell.api.Borders(b).LineStyle=1 #设置单元格边框的线条cell.api.Borders(b).Weight=2 #设置单元格边框线条的粗细workbook.save()workbook.close()
app.quit()
- Borders() 里的参数如下:
- LineStyle = 1,这里的 1 指的是边框为实线。
案例03 批量替换多个工作簿的行数据
- 代码文件:批量替换多个工作簿的行数据.py
- 数据文件:分部信息(文件夹)
import os
import xlwings as xw
file_path=r'C:\Users\Administrator\Desktop\22\分部信息'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)for j in workbook.sheets:value=j['A2'].expand('table').valuefor index,val in enumerate(value): # 按行遍历工作表数据if val==['背包',16,65]: # 判断行数据是否为“背包”value[index]=['双肩包',36,79] # 如果是,则将该行数据替换为新的数据j['A2'].expand('table').value=value # 将完成替换的数据写 入工作表workbook.save()workbook.close()
app.quit()
举一反三 批量替换多个工作簿中的单元格数据
- 代码文件:批量替换多个工作簿中的单元格数据.py
- 数据文件:分部信息(文件夹)
import os
import xlwings as xw
file_path=r'C:\Users\Administrator\Desktop\22\分部信息'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)for j in workbook.sheets:value=j['A2'].expand('table').valuefor index,val in enumerate(value): # 按行遍历工作表数据if val[0]=='背包': # 判断行数据是否为“背包”val[0]='双肩包' # 如果是,则将该行数据替换为新的数据value[index]=valj['A2'].expand('table').value=value # 将完成替换的数据写 入工作表workbook.save()workbook.close()
app.quit()
举一反三 批量修改多个工作簿中指定工作表的列数据
- 代码文件:批量修改多个工作簿中指定工作表的列数据.py
- 数据文件:分部信息(文件夹)
例如,要将销售价格都上调5%,代码如下:
import os
import xlwings as xw
file_path=r'C:\Users\Administrator\Desktop\22\分部信息'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)worksheet=workbook.sheets['产品分类表'] #指定要修改的工作表value=worksheet['A2'].expand('table').valuefor index,val in enumerate(value):val[2]=val[2]*(1+0.05)value[index]=val #替换整行的数据worksheet['A2'].expand('table').value=value #将完成替换的数据写入工作表workbook.save()workbook.close()
app.quit()
案例04 批量提取一个工作簿中所有工作表的特定数据
- 代码文件:批量提取一个工作簿中所有工作表的特定数据.py
- 数据文件:采购表.xlsx
import xlwings as xw
import pandas as pd
app=xw.App(visible=False)
workbook=app.books.open(r'C:\Users\Administrator\Desktop\22\采购表.xlsx')
data=[] #用于存放数据
for i in workbook.sheets:values=i.range('A1').expand().options(pd.DataFrame).value #读取sheet的数据,并DataFrame二维表格的形式展示filtered=values[values['采购物品']=='复印纸'] #提取采购物品为复印纸的行数据if not filtered.empty: #判断提取的行是否为空data.append(filtered) #将提取的行数据追加到列表中
new_workbook=app.books.add()
new_worksheet=new_workbook.sheets.add('复印纸')
new_worksheet.range('A1').expand().value=pd.concat(data,ignore_index=False) #将提取的数字写入工作表中
new_workbook.save(r'C:\Users\Administrator\Desktop\22\复印纸.xlsx')
workbook.close()
app.quit()
- 第8行代码中的DataFrame是pandas模块的一种数据结构,它类似Excel中的二维表格。3.5节已经详细介绍过DataFrame数据结构,这里不再赘述。
- 第14行代码中的concat()是pandas模块中的函数,可将数据根据不同的轴进行简单的拼接。在3.5.4节曾简单介绍过concat()函数的用法,这里再详细介绍一下该函数的语法格式和常用参数含义。
举一反三 批量提取一个工作簿中所有工作表的列数据
- 代码文件:批量提取一个工作簿中所有工作表的列数据.py
- 数据文件:采购表.xlsx
import xlwings as xw
import pandas as pd
app=xw.App(visible=False)
workbook=app.books.open(r'C:\Users\Administrator\Desktop\22\采购表.xlsx')
column=['采购日期','采购金额']
data=[]
for i in workbook.sheets:values=i.range('A1').expand().options(pd.DataFrame,index=False).valuefiltered=values[column] #根据前面指定的列标题提取数据data.append(filtered)
new_workbook=xw.books.add()
new_worksheet=new_workbook.sheets.add('提取数据')
new_worksheet.range('A1').value=pd.concat(data,ignore_index=False).set_index(column[0])
new_worksheet.autofit()
new_workbook.save(r'C:\Users\Administrator\Desktop\22\提取表.xlsx')
workbook.close()
app.quit()
举一反三 在多个工作簿的指定工作表中批量追加行数据
- 代码文件:在多个工作簿的指定工作表中批量追加行数据.py
- 数据文件:分部信息(文件夹)
import os
import xlwings as xw
newContent=[['双肩包','64','110'],['腰包','23','58']] #给出要追加的行数据
app=xw.App(visible=False)
file_path=r'C:\Users\Administrator\Desktop\22\分部信息'
file_list=os.listdir(file_path)
for i in file_list:if os.path.splitext(i)[1]=='.xlsx':file_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)worksheet=workbook.sheets['产品分类表'] #指定要追加行数的工作表values=worksheet.range('A1').expand()number=values.shape[0]worksheet.range(number+1,1).value=newContent #件前面指定的行数据追加到原有数据的下方workbook.save()workbook.close()
app.quit()
案例05 对多个工作簿中指定工作表的数据进行分列
- 代码文件:对多个工作簿中指定工作表的数据进行分列.py
- 数据文件:产品记录表(文件夹)
import os
import xlwings as xw
import pandas as pd
file_path=r'C:\Users\Administrator\Desktop\22\产品记录表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)worksheet=workbook.sheets['规格表']values=worksheet.range('A1').options(pd.DataFrame,header=1,index=False,expand='table').value #读取工作表中数据new_values=values['规格'].str.split('*',expand=True)values['长(mm)']=new_values[0]values['宽(mm)']=new_values[1]values['高(mm)']=new_values[2]values.drop(columns=['规格'],inplace=True)worksheet['A1'].options(index=False).value=valuesworksheet.autofit()workbook.save()workbook.close()
app.quit()
举一反三 批量合并多个工作簿中指定工作表的列数据
- 代码文件:批量合并多个工作簿中指定工作表的列数据.py
- 数据文件:产品记录表(文件夹)
import os
import xlwings as xw
import pandas as pd
file_path=r'C:\Users\Administrator\Desktop\22\产品记录表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)worksheet=workbook.sheets['规格表']values=worksheet.range('A1').options(pd.DataFrame,header=1,index=False,expand='table').value #读取工作表中数据#构造新列values['规格']=values['长(mm)'].astype('str')+'*'+values['宽(mm)'].astype('str')+'*'+values['高(mm)'].astype('str')#删除原来的列values.drop(columns=['长(mm)'],inplace=True)values.drop(columns=['宽(mm)'],inplace=True)values.drop(columns=['高(mm)'],inplace=True)worksheet.clear() #清除工作表中原有的数据worksheet['A1'].options(index=False).value=valuesworksheet.autofit()workbook.save()workbook.close()
app.quit()
举一反三 将多个工作簿中指定工作表的列数据拆分为多行
- 代码文件:将多个工作簿中指定工作表的列数据拆分为多行.py
- 数据文件:产品记录表(文件夹)
变成下面的形式:
import os
import xlwings as xw
import pandas as pd
file_path=r'C:\Users\Administrator\Desktop\22\产品记录表'
file_list=os.listdir(file_path)
app=xw.App(visible=False)
for i in file_list:if i.startswith('~$'):continuefile_paths=os.path.join(file_path,i)workbook=app.books.open(file_paths)worksheet=workbook.sheets['规格表']values=worksheet.range('A1').options(pd.DataFrame,header=1,index=False,expand='table').value #读取工作表中数据new_values=values['规格'].str.split('*',expand=True)values['长(mm)']=new_values[0]values['宽(mm)']=new_values[1]values['高(mm)']=new_values[2]values.drop(columns=['规格'],inplace=True)values=values.T #转置数据values.columns=values.iloc[0]values.index.name=values.iloc[0].index.namevalues.drop(values.iloc[0].index.name,inplace=True)worksheet.clear()worksheet['A1'].value=valuesworksheet.autofit()workbook.save()workbook.close()
app.quit()
案例06 批量提取一个工作簿中所有工作表的唯一 值
- 代码文件:批量提取一个工作簿中所有工作表的唯一值.py
- 数据文件:上半年销售统计表.xlsx
import xlwings as xw
app=xw.App(visible=True)
workbook=app.books.open(r'C:\Users\MLoong\Desktop\22\上半年销售统计表.xlsx')
data=[]
for i,worksheet in enumerate(workbook.sheets): #遍历工作簿中的工作表values=worksheet['A2'].expand('down').value #提取工作表中书名数据data=data+values
data=list(set(data)) #对列表中的书名数据进行去重操作
data.insert(0,'书名') #在去重后的书名数据前添加列标题,书名
new_workbook=app.books.add() #新建工作表
new_worksheet=new_workbook.sheets.add('书名')
new_worksheet['A1'].options(transpose=True).value=data #将处理好的书名数据写入新歌工作表中
new_worksheet.autofit()
new_workbook.save(r'C:\Users\MLoong\Desktop\22\书名.xlsx')
workbook.close()
app.quit()
知识延伸
- 第8行代码中的set()函数在2.3.3节中曾介绍过,它原本的功能是将其他类型的序列对象(如列表)转换为集合,因为集合中不允许出现重复元素,转换过程中重复元素便会被自动去除,所以该函数也常用于数据的去重。第8行代码先用set()函数对数据进行去重,再用list()函数将去重操作获得的集合转换为列表,以便在第9行代码中使用列表的insert()函数添加元素。
- 第9行代码中的insert()是Python中列表对象的函数,用于在列表的指定位置插入元素。该函数的语法格式和常用参数含义如下。
举一反三 批量提取一个工作簿中所有工作表的唯一值并汇总
- 代码文件:批量提取一个工作簿中所有工作表的唯一值并汇总.py
- 数据文件:上半年销售统计表.xlsx
import os
import xlwings as xw
app=xw.App(visible=True)
workbook=app.books.open(r'C:\Users\MLoong\Desktop\22\上半年销售统计表.xlsx')
data=list() #创建一个空列表用于存放书名和销量的明细数据
for i,worksheet in enumerate(workbook.sheets): #遍历工作簿中的工作表values=worksheet['A2'].expand('table').value #提取工作表中书名数据data=data+values
sales=dict()
for i in range(len(data)):name=data[i][0]sale=data[i][1]if name not in sales:sales[name]=saleelse:sales[name]+=sale
dictlist=list()
for key,value in sales.items():temp=[key,value]dictlist.append(temp)
dictlist.insert(0,['书名','销量'])new_workbook=app.books.add() #新建工作表
new_worksheet=new_workbook.sheets.add('销售统计')
new_worksheet['A1'].value=dictlist #将处理好的书名数据写入新歌工作表中
new_worksheet.autofit()
new_workbook.save(r'C:\Users\MLoong\Desktop\22\销售统计.xlsx')
workbook.close()
app.quit()
参考文献 《超简单:用Python让Excel飞起来》
数据下载:
链接:https://pan.baidu.com/s/1KdI7u72sZIcG_C5Y9AtCJw
提取码:8888
Python让Excel飞起来—批量处理行、列和单元格相关推荐
- Python让Excel飞起来—批量进行数据分析
目录 案例01 批量升序排序一个工作簿中的所有工作表 举一反三 批量排序多个工作簿中的数据 案例02 筛选一个工作簿中的所有工作表数据 举一反三 在一个工作簿中筛选单一类别数据 案例03 对多个工作簿 ...
- Python让Excel飞起来—批量处理工作薄和工作表
目录 案例01 批量新建并保存工作薄 举一反三 批量新建并关闭工作薄 案例02 批量打开一个文件夹下的所有工作薄 举一反三 列出文件夹下所有文件和子文件夹的名称 案例03 批量重命名一个工作薄中的所有 ...
- Excel之VBA实现一键批量合并某列相同单元格
Sub 批量合并居中相同单元格() Dim l%, i% Application.DisplayAlerts = False k% = InputBox("请输入合并单元格所在列" ...
- python查找excel中内容_Python 根据关键字查找xls单元格内容
必要的第三方库:xlrd 功能:根据传入的关键字来检索xls,读取关键字所在的单元格相邻单元格的内容.仅能处理xls. 用法:excel_read(需要查找单元格内容的xls文件路径,检索关键字(只接 ...
- 用python让excel飞起来(行/列操作)
本文内容来源于<超简单:用Python让Excel飞起来实战150例> Excel的工作表是由行和列组成的,因此,学习完工作表的操作,就需要接着学习行和列的操作.本章将详细介绍如何使用Py ...
- 用python让excel 飞起来(数据处理与分析操作)
本文来自<超简单:用Python让Excel飞起来> Excel能完成一般办公中绝大多数的数据分析工作,但是当数据量大.数据表格多时,可借助Python中功能丰富而强大的第三方模块来提高工 ...
- 使用Python批量处理行、列和单元格
使用Python批量处理行.列和单元格 精确调整工作表的行高和列宽 批量更改多个工作簿的数据格式 批量更改工作簿的外观格式 设置字体格式 修改字体为宋体 修改字号 字体加粗 字体颜色 单元格填充颜色 ...
- python怎么编写在线excel_超简单:用Python让Excel飞起来(零基础学python,用python实现办公自动化)...
王秀文,有超过6年的后端开发.运维开发经验,擅长Python.Node.js.Java.Go等主流编程语言.曾参与翻译Elasticsearch官方技术文档.有IoT系统开发经验和CRM系统设计开发经 ...
- excel调用python编程-超简单:用Python让Excel飞起
本书对于编程知识零基础的办公人士特别友好,其摒弃了晦涩的理论讲解,引入了实用的办公场景,为办公人士开辟了一条学习办公自动化的新路.本书精选典型办公案例以及通俗易懂的讲解,有助于办公人士掌握Python ...
最新文章
- vuex刷新页面数据丢失怎么解决_vuex状态机浅谈
- 模板类的析构函数如何写_顶尖文案如何写?这6大模板、29个方法,奥美大咖都在用!|优惠最后1天...
- LiveBos---按钮成下拉
- 【剑指offer】_15数组中重复的数字
- 关于Python局部变量和全局变量必须知道的几句话
- python命名空间(五分钟读懂)
- php rsa加密乱码_PHP RSA密文过长加密解密 越过1024的解决代码
- SQL Server Join方式
- mysql 创建xml字段_使用PHP DOM从MySQL数据创建XML文件
- 【资料分享】干货解读人工智能新时代
- 喷漆房出现故障应该如何处理
- 软路由虚拟服务器,VMware虚拟机安装软路由(OpenWrt)详细教程
- win11更新后任务栏空白怎么办? win11更新后任务栏空白卡死的解决方法
- 前端高效开发必备——常用js框架和第三方插件
- Python Ews exchange发送邮件demo
- Java内存区域与Java内存模型
- Android平板电脑通过WIFI传送文件,无需数据线,无需ROOT权限
- linux备份磁盘数据,linux下vmstat输出数据分析-linux下dd命令备份磁盘的节点(...-linux watch命令用法简介(图文)_169IT.COM...
- 51单片机的c语言外部扩展,教你给51单片机扩展片外RAM
- Scrapy 源码分析之 RetryMiddleware 模块