本文代码及数据集来自《超简单:用Python让Excel飞起来(实战150例)》

# 移动并重命名工作簿
from pathlib import Path
old_file_path = Path('F:\\python\\第2章\\员工档案.xlsx')
new_file_path = Path('F:\\table\\员工信息表.xlsx')
old_file_path.rename(new_file_path)

# 解析工作簿的路径信息
from pathlib import Path
file_path = Path('F:\\python\\第2章\\出库表.xlsx')
path = file_path.parent # 提取路径
file_name = file_path.name # 提取文件名
stem_name = file_path.stem # 提取文件主名
suf_name = file_path.suffix # 提取扩展名
print(path)
print(file_name)
print(stem_name)
print(suf_name)

# 提取文件夹内所有工作簿的文件名
from pathlib import Path
folder_path = Path('F:\\python\\第2章\\工作信息表\\')
file_list = folder_path.glob('*.xls*') # 获取文件夹下所有工作簿的路径
lists = []
for i in file_list:
    file_name = i.name
    lists.append(file_name)
print(lists)

# 新建并保存一个工作簿
import xlwings as xw
app = xw.App(visible=False, add_book=False) # 启动excel
workbook = app.books.add() # 新建工作簿
workbook.save('F:\\test\\1月销售表.xlsx')
workbook.close()
app.quit()

# 批量新建并保存多个工作簿
import xlwings as xw
app = xw.App(visible=False, add_book=False)
for i in range(1, 6):
    workbook = app.books.add()
    workbook.save(f'F:\\test\\销售表{i}.xlsx')
    workbook.close()
app.quit()

# 打开一个已有的工作簿
import xlwings as xw
app = xw.App(visible=True, add_book=False)
file_path = 'F:\\python\\第2章\\出库表.xlsx'
app.books.open(file_path) # 工作簿必须真实存在,并且不能处于已打开的状态

# 打开文件夹下的所有工作簿
from pathlib import Path
import xlwings as xw
app = xw.App(visible=True, add_book=False)
folder_path = Path('F:\\python\\第2章\\工作信息表\\')
file_list = folder_path.glob('*.xls*')
for i in file_list:
    app.books.open(i)
    
# 批量重命名多个工作簿
from pathlib import Path
folder_path = Path('F:\\python\\第2章\\table\\')
file_list = folder_path.glob('*月.xlsx')
for i in file_list:
    old_file_name = i.name
    new_file_name = old_file_name.replace('月', '月销售表') # 在提取的文件名中查找关键词“月”并替换为关键词“月销售表”
    new_file_path = i.with_name(new_file_name) # 将文件路径中的文件名替换为新文件名,构造出新的文件路径
    i.rename(new_file_path)

# 批量转换工作簿的文件格式
from pathlib import Path
import xlwings as xw
app = xw.App(visible=False, add_book=False)
folder_path = Path('F:\\python\\第2章\\工作信息表\\')
file_list = folder_path.glob('*.xlsx')
for i in file_list:
    new_file_path = str(i.with_suffix('.xls')) # 将文件路径中的扩展名替换为“.xls”
    # SaveAs()函数不能识别pathlib模块创建的路径对象,所以用str()函数将路径对象转换成字符串
    workbook = app.books.open(i)
    workbook.api.SaveAs(new_file_path, FileFormat=56) # 将打开的工作簿另存为“.xls”格式
    # 如果想要将工作簿由“.xls”格式转换为“.xlsx”格式,则将参数FileFormat设置为51
    workbook.close()
app.quit()

# 将一个工作簿的多个工作表拆分为多个工作簿
import xlwings as xw
app = xw.App(visible=False, add_book=False)
file_path = 'F:\\python\\第2章\\新能源汽车备案信息.xlsx'
workbook = app.books.open(file_path)
worksheet = workbook.sheets # 获取工作簿中的所有工作表
for i in worksheet:
    new_workbook = app.books.add() # 新建工作簿
    new_worksheet = new_workbook.sheets[0] # 选中新建工作簿中的第1个工作表
    i.copy(before=new_worksheet) # 将当前工作表复制到新建工作簿的第1个工作表之前
    new_workbook.save('F:\\python\\第2章\\汽车备案信息\\{}.xlsx'.format(i.name))
    new_workbook.close()
app.quit()

# 将多个工作簿合并为一个工作簿
from pathlib import Path
import pandas as pd
folder_path = Path('F:\\python\\第2章\\上半年销售统计\\')
file_list = folder_path.glob('*.xls*')
with pd.ExcelWriter('F:\\python\\第2章\\总表.xlsx') as workbook:
    for i in file_list:
        stem_name = i.stem
        data = pd.read_excel(i, sheet_name=0) # 读取工作簿的第1个工作表中的数据
        data.to_excel(workbook, sheet_name=stem_name, index=False)
workbook.save()

# 创建以扩展名命名的文件夹,然后按扩展名将文件移动到对应的文件夹下
from pathlib import Path
folder_path = Path('F:\\python\\第2章\\工作文件\\')
file_list = folder_path.glob('*.xls*')
for i in file_list:
    suf_name = i.suffix # 提取文件夹中工作簿的扩展名
    new_folder_path = folder_path / suf_name # 根据要分类的工作簿所在的文件夹路径和提取的扩展名构造一个新的文件夹路径
    # “/”是pathlib模块中用于拼接路径的运算符
    if not new_folder_path.exists(): # 判断新路径指向的文件夹是否不存在
        new_folder_path.mkdir() # 如果不存在,新建对应的文件夹
    i.replace(new_folder_path / i.name) # 将工作簿移动到与其扩展名对应的文件夹下
    
# 按照日期分类工作簿
from time import localtime
from pathlib import Path
folder_path = Path('F:\\python\\第2章\\工作文件\\')
file_list = folder_path.glob('*.xls*')
for i in file_list:
    lm_time = i.stat().st_mtime # 获取工作簿的最后修改时间
    year = localtime(lm_time).tm_year
    month = localtime(lm_time).tm_mon
    new_folder_path = folder_path / str(year) / str(month) # 构造以年份和月份命名的文件夹的路径
    if not new_folder_path.exists():
        new_folder_path.mkdir(parents=True)
    i.replace(new_folder_path / i.name)
    
# 精确查找工作簿
from pathlib import Path
folder_path = input('请输入查找路径(如C:\\):')
file_name = input('请输入要查找的工作簿名称:') # 如:出库表.xlsx
folder_path = Path(folder_path)
file_list = folder_path.rglob(file_name)
for i in file_list:
    print(i)
    
# 按关键词查找工作簿
from pathlib import Path
folder_path = input('请输入查找路径(如C:\\):')
keyword = input('请输入关键词:')
folder_path = Path(folder_path)
file_list = folder_path.rglob(f'*{keyword}*.xls*')
for i in file_list:
    print(i)
    
# 保护一个工作簿的结构(禁用操作)
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('F:\\python\\第2章\\办公用品采购表.xlsx')
workbook.api.Protect(Password='123', Structure=True, Windows=True) # 如果要取消保护,可使用Unprotect()函数
workbook.save()
workbook.close()
app.quit()

# 加密保护一个工作簿
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('F:\\python\\第2章\\办公用品采购表.xlsx') # 如果有密码,加入password属性
workbook.api.Password = '123' # 如果想取消密码,workbook.api.Password = ''
workbook.save()
workbook.close()
app.quit()

# 加密保护多个工作簿
from pathlib import Path
import xlwings as xw
app = xw.App(visible=False, add_book=False)
folder_path = Path('F:\\python\\第2章\\工作信息表\\')
file_list = folder_path.glob('*.xls*')
for i in file_list:
    workbook = app.books.open(i)
    workbook.api.Password = '123'
    workbook.save()
    workbook.close()
app.quit()