本文基于Python 的os和xlwingsm模块实现Excel的各种工作表和工作簿操作实例。
目录
模块os介绍:
xlwings模块简介:
案例实现过程:
1、批量新建并保存工作簿:
2、批量打开一个文件夹下的所有工作簿
3、批量重命名一个工作簿中的所有工作表
4、 在多个工作簿中批量新增工作表
5、 批量打印工作簿
模块os介绍:
os模块是Python和操作系统进行交互的一个接口,它提供了许多操作文件及文件夹的函数。
比如:
- 要获取当前运行的Python代码文件的路径(即该文件的保存位置),可以用os模块中的getcwd()函数来实现。
import os
path = os.getcwd()
print(path)
- 如果要查看某个文件夹包含的所有文件和子文件夹的名称,可以使用os模块中的listdir()函数。
import os
path = 'e:\\python'
file_list = os.listdir(path)
print(file_list)
- 如果要分离一个文件的文件主名和扩展名,可以使用splitext()函数。
import os
path = 'example.xlsx'
separate = os.path.splitext(path)
print(separate)
- os模块中的rename()函数可以重命名文件和文件夹,该函数的语法格式如下:rename(src, dst) 以下代码将D盘的“list”文件夹重命名为“newlist”。
import os
oldname = 'd:\\list'
newname = 'd:\\newlist'
os.rename(oldname, newname)
xlwings模块简介:
可以处理Excel文件的Python模块有很多,如XlsxWriter、xlrd、xlwt、xlutils、openpyxl和xlwings等。
下表对各个模块的功能进行了简单对比。
通过上表的对比可以发现,xlwings模块的功能是最齐全的。它不仅能读、写和修改两种格式的Excel文件(xls和xlsx),而且能批量处理多个Excel文件。
此外,xlwings模块还能与Excel VBA结合使用,实现更加强大的数据输入和分析功能。
案例实现过程:
1、批量新建并保存工作簿:
import xlwings as xw
app = xw.App(visible = True, add_book = False)
for i in range(6):workbook = app.books.add()workbook.save(f'e:\\PythonOffice\\test_table\\test{i}.xlsx')workbook.close()
app.quit()
实现结果如下:
2、批量打开一个文件夹下的所有工作簿
实现思路:
- 文件夹内列出所有的文件名,并存入数组。
- 打开Excel工作簿
- 循环判断文件是否为Excel,如果是则打开文件。
实现代码:
import os
import xlwings as xw
file_path = 'e:\\PythonOffice\\test_table'
file_list = os.listdir(file_path)
app = xw.App(visible = True, add_book = False)
for i in file_list:if os.path.splitext(i)[1] == '.xlsx': app.books.open(file_path + '\\' + i)
3、批量重命名一个工作簿中的所有工作表
以下代码将工作表名中的销售替换为空白:
import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('e:\\table\\统计表.xlsx')
worksheets = workbook.sheets
for i in range(len(worksheets)):worksheets[i].name = worksheets[i].name.replace('销售', '')
workbook.save('e:\\table\\统计表1.xlsx')
app.quit()
4、 在多个工作簿中批量新增工作表
文件夹中有5个工作簿,我们需要在每个工作簿中插入一个名为'产品销售区域'的工作表
实现思路:
- 获取文件夹内所有工作簿文件名并存入数组
- 定义好新工作表名称
- 在循环中插入工作表
实现代码:
import os
import xlwings as xw
file_path = 'e:\\table\\销售表'
file_list = os.listdir(file_path)
sheet_name = '产品销售区域'
app = xw.App(visible = False, add_book = False)
for i in file_list:if i.startswith('~$'):continuefile_paths = os.path.join(file_path, i)workbook = app.books.open(file_paths)sheet_names = [j.name for j in workbook.sheets]if sheet_name not in sheet_names:workbook.sheets.add(sheet_name)workbook.save()
app.quit()
5、 批量打印工作簿
现在我们文件夹内有6个工作簿,我们需要将每个工作簿中名为产品分类表的数据全部打印出来。
实现思路:
- 获取文件夹内所有工作簿文件名并存入数组
- 在循环中依次打开对应工作簿
- 在打开的工作簿中循环判断工作表名
- 如果表名为“产品分类表”则通过工作簿的api 属性直接调用VBA的PrintOut()函数来打印工作簿,该函数的语法格式和常用参数含义如下。
PrintOut(From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName)
实现代码:
import os
import xlwings as xw
file_path = 'e:\\table\\公司1'
file_list = os.listdir(file_path)
sheet_name = '产品分类表'
app = xw.App(visible = False, add_book = 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:if j.name == sheet_name:j.api.PrintOut()break
app.quit()