import xlwings as xw import os os.mkdir('h:\\file') #在F盘下面创建名为‘file’的文件夹 app = xw.App(visible = True,add_book = False) #启动Exel程序,但是不新建工作簿 for i in range(6): #从0到5循环批量创建和保存工作簿 workbook = app.books.add() #新建工作博 workbook.save(f'h:\\file\\test{i}.xlsx') #将新建的多个工作簿保存到对应路径下 workbook.close() #关闭当前工作簿 app.quit() 退出Excel程序 file_path = 'h:\\file' #给出工作簿所在的文件夹路径 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': #判断文件夹下文件的扩展名是否为“。xlsx” app.books.open(file_path + '\\' + i) #打开文件夹下的工作簿
列出文件夹下所有文件和子文件夹的名称
import os file_path = 'h:\\file' file_list = os.listdir(file_path) for i in file_list: print(i)
批量重命名多个工作簿
前提条件,要重命名的工作簿名必须是有规律的,如表1,表2,表3;或者含有相同的关键字,比如都含有关键字‘销售表’
import os file_path = 'h:\\file\\' #给出待重命名工作簿所在文件夹的路径 file_list = os.listdir(file_path) #列出文件夹下所有文件和子文件夹的名称 old_book_name = 'test' #给出工作簿名称中需要替换的旧关键字 new_book_name = '产品销售表' #给出工作簿名中需要替换的新关键字 for i in file_list: if i.startswith('~$'): #判断是否有文件名以‘~$’开头的临时文件 continue #如果有,则跳过这种类型的文件 new_file = i.replace(old_book_name,new_book_name) #执行查找和替换,生成新的工作簿名 old_file_path = os.path.join(file_path, i) #构造需要重命名工作簿的完整路径 new_file_path = os.path.join(file_path, new_file) #构造重命名后工作簿的完整路径 os.rename(old_file_path, new_file_path) #执行重命名
批量重命名多个工作簿中的同名工作表
import os import xlwings as xw file_path = 'h:\\file\\' #给出待重命名工作簿所在文件夹的路径 file_list = os.listdir(file_path) #列出文件夹下所有文件和子文件夹的名称 old_sheet_name = 'Sheet1' #给出工作簿中需要修改的工作表名,注意大小写 new_sheet_name = '员工信息' #给出工作簿中修改后的工作表名 app = xw.App(visible = False, add_book = False) for i in file_list: if i.startswith('~$'): #判断是否有文件名以‘~$’开头的临时文件 continue #如果有,则跳过这种类型的文件 old_file_path = os.path.join(file_path, i) workbook = app.books.open(old_file_path) for j in workbook.sheets: if j.name == old_sheet_name: #判断工作表名是否为‘Sheet1’ j.name = new_sheet_name #如果是,则重命名工作表 workbook.save() app.quit()
在多个工作簿中批量新增工作表
import xlwings as xw import os file_path = 'f:\\file' file_list = os.listdir(file_path) sheet_name = '产品销售区域' app = xw.App(visible = True,add_book = False) #启动Exel程序,但是不新建工作簿 for i in file_list: if i.startswith('~$'): continue file_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()
在多个工作簿中批量删除工作表
import xlwings as xw import os file_path = 'f:\\file' file_list = os.listdir(file_path) sheet_name = '产品销售区域' app = xw.App(visible = True,add_book = False) #启动Exel程序,但是不新建工作簿 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: if j.name == sheet_name: #判断工作簿中是否有名为‘产品销售区域’的工作表 j.delete() #如果有,则删除该工作表 break workbook.save() app.quit()
在多个工作簿中批量删除工作表
import xlwings as xw import os file_path = 'G:\\KPI考核\\2021\\' file_list = os.listdir(file_path) app = xw.App(visible = True,add_book = False) #启动Exel程序,但是不新建工作簿 for i in file_list: if i.startswith('~$'): continue file_paths = os.path.join(file_path, i) #构造需要打印工作表的工作簿的文件路径 workbook = app.books.open(file_paths) #根据路径打开需要打印工作表的工作簿 workbook.api.PrintOut() #打印要打印的工作簿 app.quit()
因为xlwings模块中没有提供打印工作簿的函数,所以第11行代码利用工作簿对象的api属性调用VBA的函数PrintOut()函数来打印工作簿
PrintOut方法的语法如下:
工作表对象.PrintOut(From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName,IgnorePrintAreas)
说明:
所有参数均可选。使用适当的参数指定打印机、份数、逐份打印以及是否需要打印预览。使用参数PrintToFile和参数PrToFileName将工作表打印到文件。参数From和参数To用于指定打印的页码范围。
参数From指定开始打印的页码。如果忽略,则从头开始打印。
参数To指定最后打印的页码。如果忽略,则打印到最后一页。
参数Copies指定要打印的份数。如果忽略,则只打印1份。
参数Preview指定打印前是否要预览打印效果。设置为True则打印预览;设置为False(默认值)则直接打印。
参数ActivePrinter设置当前打印机的名称。
参数PrintToFile设置为True,将打印到文件。如果没有指定参数PrToFileName,将提示用户输入要输出的文件名。
参数Collate设置为True将逐份打印。
参数PrToFileName在参数PrintToFile设置为True时指定想要打印到文件的名称。
参数IgnorePrintAreas设置为True将忽略打印区域,打印整份文档。
示例1:实现逐行批量打印
如下图所示的工作表,除表头的第1行不变外,从第2行开始逐条打印记录。
代码如下:
说明:
PrintOut方法只打印工作表中的可见行。因此,将要打印的行逐条显示,同时隐藏不需要打印的行,从而实现逐条打印。
示例2:只打印奇数页
下面是一段简单的小程序,可以只打印奇数页。
Sub PrintOddPages()
Dim k As Integer
k = 1
Do While (k < 800)
ActiveSheet.PrintOut From:=k, to:=k
k = k + 2
Loop
End Sub