目录
案例01 精确调整多个工作簿的行高和列宽
举一反三 精确调整一个工作簿中所有工作表的行高和列宽
案例02 批量更改多个工作簿的数据格式
举一反三 批量更改多个工作簿的外观格式
案例03 批量替换多个工作簿的行数据
举一反三 批量替换多个工作簿中的单元格数据
举一反三 批量修改多个工作簿中指定工作表的列数据
案例04 批量提取一个工作簿中所有工作表的特定数据
举一反三 批量提取一个工作簿中所有工作表的列数据
举一反三 在多个工作簿的指定工作表中批量追加行数据
案例05 对多个工作簿中指定工作表的数据进行分列
举一反三 批量合并多个工作簿中指定工作表的列数据
举一反三 将多个工作簿中指定工作表的列数据拆分为多行
案例06 批量提取一个工作簿中所有工作表的唯一 值
举一反三 批量提取一个工作簿中所有工作表的唯一值并汇总
调整为:
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('~$'):
continue
file_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()
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()
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('~$'):
continue
file_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()
代码解析
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('~$'):
continue
file_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()
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('~$'):
continue
file_paths=os.path.join(file_path,i)
workbook=app.books.open(file_paths)
for j in workbook.sheets:
value=j['A2'].expand('table').value
for 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()
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('~$'):
continue
file_paths=os.path.join(file_path,i)
workbook=app.books.open(file_paths)
for j in workbook.sheets:
value=j['A2'].expand('table').value
for index,val in enumerate(value): # 按行遍历工作表数据
if val[0]=='背包': # 判断行数据是否为“背包”
val[0]='双肩包' # 如果是,则将该行数据替换为新的数据
value[index]=val
j['A2'].expand('table').value=value # 将完成替换的数据写 入工作表
workbook.save()
workbook.close()
app.quit()
例如,要将销售价格都上调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('~$'):
continue
file_paths=os.path.join(file_path,i)
workbook=app.books.open(file_paths)
worksheet=workbook.sheets['产品分类表'] #指定要修改的工作表
value=worksheet['A2'].expand('table').value
for 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()
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()
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).value
filtered=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()
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()
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('~$'):
continue
file_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=values
worksheet.autofit()
workbook.save()
workbook.close()
app.quit()
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('~$'):
continue
file_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=values
worksheet.autofit()
workbook.save()
workbook.close()
app.quit()
变成下面的形式:
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('~$'):
continue
file_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.name
values.drop(values.iloc[0].index.name,inplace=True)
worksheet.clear()
worksheet['A1'].value=values
worksheet.autofit()
workbook.save()
workbook.close()
app.quit()
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()
知识延伸
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]=sale
else:
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