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行開始逐條打印記錄。

代碼如下:



 

說明

  • 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

批量打印多個工作簿中指定的工作表

import os
import xlwings as xw
file_path = 'h:\\file\\' #給出待重命名工作簿所在文件夾的路徑
file_list = os.listdir(file_path) #列出文件夾下所有文件和子文件夾的名稱
sheet_name = '員工信息'
app = xw.App(visible = False, add_book = 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:
        if j.name == sheet_name: #判斷工作簿中是否存在名為‘員工信息’的工作表
            j.api.Printout() #如果存在,則打印該工作表
            break
app.quit()

將一個工作簿的所有工作表批量復制到其他工作簿

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM