最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動化實現(xiàn)批量打印Excel工作簿的完整指南

 更新時間:2026年07月10日 09:00:18   作者:楊利杰YJlio  
這篇教程教你用Python批量打印工作簿,告別低效重復勞動,學會xlwings調(diào)用PrintOut,輕松處理幾十個報表,還能指定工作表、設置打印份數(shù)和預覽模式,點擊立即掌握辦公自動化核心技巧,讓打印流程標準化、可復盤

1. 第4章 案例06:批量打印工作簿

前面幾節(jié)更多是在做“批量新建、批量打開、批量修改、批量保存”這些文件處理動作,而這一節(jié)開始進入更典型的辦公室場景:一個文件夾里有很多 Excel 工作簿,需要統(tǒng)一打印出來。

這類需求在實際辦公中很常見。比如月度報表要打印留檔,分部報表要統(tǒng)一提交,會議材料要提前裝訂,財務、行政、項目管理崗位都可能遇到類似場景。手工做法通常是:打開一個文件,按 Ctrl + P,選擇打印機,點擊打印,關閉文件,然后再打開下一個文件。

如果只有兩三個文件,手工打印沒問題;但如果是幾十個甚至上百個工作簿,繼續(xù)手動點擊就是低價值重復勞動。

這張圖展示的是本文的核心主題:通過 Python 調(diào)用 Excel 自動化能力,把多個工作簿批量發(fā)送到打印機。

從圖中可以看出,批量打印不是簡單地“讓打印機出紙”,而是把文件夾遍歷、工作簿打開、打印命令調(diào)用、資源釋放這幾步串成一個穩(wěn)定流程。這個案例的關鍵點在于 workbook.api.PrintOut(),它不是普通的 Excel 文件讀寫,而是通過 xlwings 的 .api 調(diào)用 Excel 底層對象模型能力。

簡單理解:xlwings 負責連接 Python 和 Excel,PrintOut 負責調(diào)用 Excel 自身的打印能力。這也是這一節(jié)和前面“讀寫單元格”類案例最大的區(qū)別。

2. 應用場景:哪些情況適合批量打印

批量打印腳本適合規(guī)則明確、文件數(shù)量較多、打印要求相對一致的場景。比如一個目錄下全是待打印報表,每個工作簿都已經(jīng)設置好頁面布局、打印區(qū)域、紙張方向和頁邊距,這種情況下用 Python 批量觸發(fā)打印,會比手工操作穩(wěn)定得多。

這張圖展示的是批量打印的典型應用場景,包括月度報表、分部匯總和會議資料。

從圖中可以看出,批量打印并不是一個“孤立技術(shù)點”,它對應的是非常現(xiàn)實的辦公流程。月度報表強調(diào)的是周期性,分部匯總強調(diào)的是多文件統(tǒng)一處理,會議資料強調(diào)的是集中輸出和裝訂。它們共同的特點是:文件多、規(guī)則固定、人工重復操作沒有技術(shù)含量。

推薦使用批量打印腳本的前提是:打印范圍已經(jīng)在 Excel 文件里設置清楚,文件命名和目錄結(jié)構(gòu)也比較穩(wěn)定。如果文件本身排版混亂、打印區(qū)域沒設好、工作表數(shù)量不一致,那么腳本只會把混亂放大。

我自己的判斷是:批量打印腳本不是第一步,而是最后一步。前面應該先完成文件整理、格式統(tǒng)一、打印區(qū)域設置和預覽檢查,然后再批量打印。否則腳本跑得越快,浪費紙張也越快。

3. 核心原理:xlwings 的 api 與 PrintOut

這個案例的核心代碼其實只有一句:

workbook.api.PrintOut()

但這句代碼背后的含義需要講清楚。workbook 是 xlwings 打開的工作簿對象,.api 是訪問 Excel 底層 COM 對象的接口,PrintOut() 是 Excel 對象模型里的打印方法。也就是說,Python 并不是自己實現(xiàn)打印,而是把打印動作交給 Excel 去執(zhí)行。

xlwings 常規(guī)對象適合做讀寫、打開、保存等高層操作;當需要調(diào)用 Excel VBA 對象模型能力時,就要通過 .api 進入底層接口。

這張圖展示的是批量打印工作簿的核心流程:遍歷文件夾、跳過臨時文件、打開工作簿、調(diào)用 PrintOut 打印、最后關閉并退出。

從圖中可以看出,批量打印不是直接對整個文件夾“按一下打印”,而是逐個文件處理。腳本每次只打開一個工作簿,發(fā)送打印命令,然后關閉當前工作簿,再繼續(xù)處理下一個文件。這樣做的好處是流程清晰、資源占用可控,也方便定位哪個文件打印失敗。

這里最容易忽略的是臨時文件過濾。Excel 打開工作簿時,經(jīng)常會生成以 ~$ 開頭的臨時文件。如果腳本不跳過這些文件,就可能出現(xiàn)打開失敗、權(quán)限異常、打印錯誤等問題。

4. 基礎代碼:批量打印文件夾下所有工作簿

下面這段代碼適合先理解基礎流程。你只需要修改 folder_path 為自己的 Excel 文件夾路徑即可。運行前建議先準備一個測試文件夾,里面只放 1 到 2 個測試工作簿。

import os
import xlwings as xw

folder_path = r"e:\file"

app = xw.App(visible=False, add_book=False)

try:
    for file_name in os.listdir(folder_path):

        # 跳過 Excel 臨時文件
        if file_name.startswith("~$"):
            continue

        # 只處理 Excel 工作簿
        if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
            continue

        full_path = os.path.join(folder_path, file_name)

        wb = app.books.open(full_path)

        # 調(diào)用 Excel 自身的打印能力
        wb.api.PrintOut()

        print(f"已發(fā)送打印任務:{file_name}")

        wb.close()

finally:
    app.quit()

這段代碼的執(zhí)行順序很明確:先啟動 Excel,再遍歷目標文件夾,然后篩選 Excel 文件,打開后調(diào)用 PrintOut(),最后關閉工作簿并退出 Excel。

注意:打印是真實動作,腳本運行后會直接向打印機發(fā)送任務。不要在正式目錄里第一次測試,更不要直接對幾十個文件運行。穩(wěn)妥做法是先用測試目錄驗證,再逐步擴大范圍。

推薦先把打印參數(shù)改成預覽模式,確認頁面、分頁、頁眉頁腳和打印區(qū)域無誤后,再改成正式打印。

wb.api.PrintOut(Preview=True)

如果預覽正常,再切換成正式打?。?/p>

wb.api.PrintOut()

5. PrintOut 常用參數(shù):不要只會默認打印

PrintOut() 可以不帶參數(shù)直接打印,也可以傳入一些常用參數(shù)。實際辦公中,最常用的是預覽、打印份數(shù)、指定頁碼范圍和指定打印機。

參數(shù)作用示例
From從第幾頁開始打印From=1
To打印到第幾頁To=2
Copies打印份數(shù)Copies=2
Preview是否先預覽Preview=True
ActivePrinter指定打印機ActivePrinter=“Microsoft Print to PDF”
Collate是否逐份打印Collate=True

最基礎的直接打印如下:

wb.api.PrintOut()

測試階段建議使用預覽:

wb.api.PrintOut(Preview=True)

如果要打印兩份,可以這樣寫:

wb.api.PrintOut(Copies=2)

如果只打印第一頁,可以這樣寫:

wb.api.PrintOut(From=1, To=1)

指定打印機時要特別小心。在 Excel 自動化里,打印機名稱不一定只看 Windows 設置里顯示的短名稱,有時需要匹配 Excel 當前識別到的完整打印機字符串。企業(yè)環(huán)境里如果存在共享打印機、漫游打印、Follow-Me Print 或打印服務器,打印機名稱不一致就可能導致打印失敗。

可以先輸出當前 Excel 識別到的默認打印機:

print(app.api.ActivePrinter)

確認名稱后,再考慮指定打印機:

wb.api.PrintOut(ActivePrinter=app.api.ActivePrinter)

我的建議是:除非明確知道打印機名稱,否則先使用默認打印機測試,不要一上來就硬指定打印機。

6. 進階場景:只批量打印指定工作表

有些工作簿里包含多張表,比如 明細、數(shù)據(jù)、匯總說明。實際打印時,可能只需要打印 匯總 這一張表。如果直接對整個工作簿調(diào)用 workbook.api.PrintOut(),就可能把不該打印的工作表也一起打出來。

這種情況下,正確思路不是打印整個工作簿,而是先定位目標工作表,再對工作表調(diào)用 PrintOut。

這張圖展示的是“指定工作表打印”的邏輯:多個工作簿中只定位并打印 匯總 工作表,不打印其他工作表。

從圖中可以看出,指定工作表打印比批量打印整個工作簿多了一個判斷動作:檢查當前工作簿里是否存在目標工作表。如果存在,就打印該工作表;如果不存在,就跳過并記錄提示。這一步很重要,否則腳本遇到缺少 匯總 表的文件就會直接報錯。

import os
import xlwings as xw

folder_path = r"e:\file"
target_sheet = "匯總"

app = xw.App(visible=False, add_book=False)

try:
    for file_name in os.listdir(folder_path):

        if file_name.startswith("~$"):
            continue

        if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
            continue

        full_path = os.path.join(folder_path, file_name)
        wb = app.books.open(full_path)

        sheet_names = [sheet.name for sheet in wb.sheets]

        if target_sheet not in sheet_names:
            print(f"跳過:{file_name},不存在工作表:{target_sheet}")
            wb.close()
            continue

        sheet = wb.sheets[target_sheet]

        # 只打印指定工作表
        sheet.api.PrintOut()

        print(f"已打?。簕file_name} -> {target_sheet}")

        wb.close()

finally:
    app.quit()

這段代碼比直接打印工作簿更適合真實辦公場景,因為它控制了打印范圍。尤其是報表類文件,很多時候明細數(shù)據(jù)不應該打印,真正需要輸出的只是匯總頁、封面頁或?qū)徟摗?/p>

不要默認認為整個工作簿都適合打印。自動化不是盲目執(zhí)行,而是要把業(yè)務規(guī)則寫進腳本里。

7. 打印前檢查:批量打印最怕“錯得很快”

批量打印和批量修改文件不一樣。批量修改出錯,還可以用備份恢復;批量打印出錯,可能已經(jīng)浪費了紙張、墨粉和時間,嚴重一點還可能把不該打印的內(nèi)容輸出到共享打印機上。

所以批量打印必須先做檢查,再正式運行。這里不要偷懶。自動化腳本越快,錯誤擴散也越快。

這張圖展示的是批量打印前最關鍵的檢查項:先用預覽測試、跳過臨時文件、檢查打印機名稱、確認打印區(qū)域。

從圖中可以看出,真正穩(wěn)定的批量打印流程,不是寫完 PrintOut() 就結(jié)束,而是要先預覽、再確認、最后批量打印。尤其在企業(yè)辦公環(huán)境里,打印機可能是共享設備,也可能帶權(quán)限控制,還可能存在離線、缺紙、卡紙、驅(qū)動彈窗等情況。

第一個檢查點是 先用預覽測試。建議先對一個文件使用 Preview=True,檢查頁眉頁腳、分頁、紙張方向和內(nèi)容完整性。

wb.api.PrintOut(Preview=True)

第二個檢查點是 跳過臨時文件。Excel 臨時文件通常以 ~$ 開頭,這類文件不能當作正常工作簿處理。

if file_name.startswith("~$"):
    continue

第三個檢查點是 檢查打印機名稱。尤其是使用共享打印機時,要確認默認打印機是否正確。否則腳本沒有報錯,但文件可能被發(fā)到了錯誤設備。

print(app.api.ActivePrinter)

第四個檢查點是 確認打印區(qū)域。Excel 的打印輸出會受到頁面布局、縮放比例、打印區(qū)域、紙張方向影響。腳本觸發(fā)打印,不代表它會自動幫你排版。

PrintOut 負責執(zhí)行打印動作,但打印效果取決于工作簿本身的頁面設置。這個邊界必須分清楚。

8. 更穩(wěn)的版本:加入日志與異常處理

如果只是學習,可以使用基礎版本;但如果真的要在辦公環(huán)境里使用,我建議至少加上日志和異常處理。原因很直接:一旦某個文件打印失敗,你需要知道是哪一個文件失敗,而不是只看到腳本中斷。

下面這版代碼會逐個處理文件,并且記錄成功和失敗情況。它不算復雜,但比裸跑 PrintOut() 更適合實際使用。

import os
import xlwings as xw

folder_path = r"e:\file"
log_path = os.path.join(folder_path, "print_log.txt")

app = xw.App(visible=False, add_book=False)

success_count = 0
fail_count = 0

try:
    with open(log_path, "w", encoding="utf-8") as log:

        for file_name in os.listdir(folder_path):

            if file_name.startswith("~$"):
                continue

            if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
                continue

            full_path = os.path.join(folder_path, file_name)
            wb = None

            try:
                wb = app.books.open(full_path)

                # 測試階段建議先使用 Preview=True
                wb.api.PrintOut()

                success_count += 1
                msg = f"成功發(fā)送打印任務:{file_name}"
                print(msg)
                log.write(msg + "\n")

            except Exception as e:
                fail_count += 1
                msg = f"打印失?。簕file_name},原因:{e}"
                print(msg)
                log.write(msg + "\n")

            finally:
                if wb is not None:
                    wb.close()

        summary = f"打印任務結(jié)束:成功 {success_count} 個,失敗 {fail_count} 個"
        print(summary)
        log.write(summary + "\n")

finally:
    app.quit()

這個版本的價值在于可復盤。腳本執(zhí)行完以后,不僅知道“跑完了”,還知道哪些文件成功、哪些文件失敗、失敗原因是什么。辦公自動化腳本如果不能復盤,出了問題就很難解釋。

不過要注意,日志只能記錄腳本層面的異常,不能完全證明打印機已經(jīng)成功出紙。比如打印任務已經(jīng)發(fā)送,但打印機缺紙、卡紙、脫機,這些屬于打印設備層面的問題,需要結(jié)合打印隊列和設備狀態(tài)確認。

9. 效果驗證:腳本跑完后應該看什么

批量打印完成后,不要只看 Python 控制臺輸出。至少要從三個層面驗證:腳本層、打印隊列層、紙質(zhì)輸出層。

腳本層面,查看控制臺或日志,確認處理了多少個文件,成功多少個,失敗多少個。這個結(jié)果能判斷腳本有沒有完整遍歷目標目錄。

打印隊列層面,檢查 Windows 打印隊列是否還有任務阻塞。如果隊列里有大量“正在打印”或“錯誤”狀態(tài),就說明問題不在代碼本身,而可能在打印機、驅(qū)動、網(wǎng)絡或權(quán)限。

紙質(zhì)輸出層面,抽查打印結(jié)果。重點看是否漏頁、是否分頁錯誤、是否縮放異常、是否打印了不該打印的工作表。

辦公自動化腳本的驗證標準不是“程序沒報錯”,而是“業(yè)務結(jié)果正確”。批量打印尤其如此,因為它涉及真實設備輸出,不能只停留在代碼層面。

我建議正式使用時采用這個順序:先選 1 個文件預覽,再選 2 到 3 個文件試打,最后再對完整目錄批量執(zhí)行。這樣雖然多一步,但風險低很多。

10. 總結(jié)提升:批量打印不是炫技,是流程標準化

這一節(jié)的核心不是記住 workbook.api.PrintOut() 這一句,而是理解批量打印背后的自動化流程。一個成熟的腳本,應該完成文件篩選、工作簿打開、打印動作、異常處理、資源釋放和結(jié)果記錄。

真正值得沉淀的不是某一段代碼,而是一套穩(wěn)定的辦公處理習慣。

第一,批量打印前要先確認文件范圍。不要把臨時文件、無關文件、測試文件混在同一個目錄里。

第二,正式打印前要先預覽。尤其是頁眉頁腳、分頁、縮放比例、紙張方向,這些問題腳本不會自動替你判斷。

第三,能打印指定工作表,就不要盲目打印整個工作簿。很多報表真正需要輸出的是 匯總、封面審批頁,而不是全部明細。

第四,腳本要及時關閉工作簿并退出 Excel。否則后臺 Excel 進程殘留,后續(xù)可能引發(fā)文件占用、保存失敗、打印異常。

批量打印最怕的不是慢,而是沒有確認就快速出錯。所以這類腳本一定要遵循“先預覽、再確認、后批量”的原則。

通過這一節(jié),我對 Excel 自動化又多了一層理解:Python 不只是用來處理數(shù)據(jù),也可以把 Excel 的界面操作、打印操作、辦公流程串起來。只要規(guī)則清楚,重復動作就應該盡量腳本化;但只要涉及真實輸出,就必須加上驗證和回退意識。

以上就是Python自動化實現(xiàn)批量打印Excel工作簿的完整指南的詳細內(nèi)容,更多關于Python打印Excel工作簿的資料請關注腳本之家其它相關文章!

相關文章

  • Python中max函數(shù)用法實例分析

    Python中max函數(shù)用法實例分析

    這篇文章主要介紹了Python中max函數(shù)用法,實例分析了Python中max函數(shù)的功能與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • python中f‘{}‘用法小結(jié)

    python中f‘{}‘用法小結(jié)

    這篇文章主要介紹了python中f‘{}‘用法,f’{}’用法等同于 format用法的簡單使用,更加方便,本文給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • python使用pandas讀寫excel文件的方法實例

    python使用pandas讀寫excel文件的方法實例

    pandas是一個十分強大的數(shù)據(jù)處理工具,最近需要處理數(shù)據(jù)并輸入到excel,簡單列舉它的用法,這篇文章主要給大家介紹了關于python使用pandas讀寫excel文件的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Python實現(xiàn)Windows環(huán)境下自動備份文件到遠程目錄

    Python實現(xiàn)Windows環(huán)境下自動備份文件到遠程目錄

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)Windows環(huán)境下自動備份文件到遠程目錄,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2026-02-02
  • 淺談keras中的后端backend及其相關函數(shù)(K.prod,K.cast)

    淺談keras中的后端backend及其相關函數(shù)(K.prod,K.cast)

    這篇文章主要介紹了淺談keras中的后端backend及其相關函數(shù)(K.prod,K.cast),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 詳解appium自動化測試工具(monitor、uiautomatorviewer)

    詳解appium自動化測試工具(monitor、uiautomatorviewer)

    這篇文章主要介紹了詳解appium自動化測試工具(monitor、uiautomatorviewer),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python繪制極坐標基向量詳解

    Python繪制極坐標基向量詳解

    這篇文章主要介紹了如何利用python繪制極坐標的基向量,文中的示例代碼講解詳細,具有一定的的參考價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-08-08
  • 利用python寫個下載teahour音頻的小腳本

    利用python寫個下載teahour音頻的小腳本

    這篇文章主要跟大家分享了一個利用python寫的下載teahour音頻的小腳本,文中給出了詳細的示例代碼供大家參考學習,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • python使用opencv resize圖像不進行插值的操作

    python使用opencv resize圖像不進行插值的操作

    這篇文章主要介紹了python使用opencv resize圖像不進行插值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Scrapy?之中間件(Middleware)的具體使用

    Scrapy?之中間件(Middleware)的具體使用

    本文主要介紹了Scrapy?之中間件(Middleware)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

罗城| 武山县| 本溪市| 新建县| 伊宁市| 金山区| 六盘水市| 罗田县| 三江| 商都县| 岳阳县| 武定县| 定州市| 奈曼旗| 乌什县| 新绛县| 长汀县| 沅江市| 铁力市| 崇明县| 宁河县| 和田市| 车致| 千阳县| 丰台区| 兴隆县| 平陆县| 卓尼县| 葫芦岛市| 金乡县| 文昌市| 万全县| 麻阳| 富源县| 太原市| 德江县| 文化| 炉霍县| 洛南县| 兴城市| 梁河县|