Python Excel—使用Python批量处理工作簿和工作表

2021/5/1 14:55:16

本文主要是介绍Python Excel—使用Python批量处理工作簿和工作表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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行开始逐条打印记录。ExcelVBA打印工作表——PrintOut方法(转)

代码如下:

ExcelVBA打印工作表——PrintOut方法(转)

 

说明

  • 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

 



这篇关于Python Excel—使用Python批量处理工作簿和工作表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程