python win32com批量導(dǎo)出.ppt/.pptx文件所有圖片

環(huán)境:py2.7
要求:

1、先pip安裝pywin32

pip install pywin32

2、這份代碼最好和你的PPT文件放在同一目錄下,且目錄不能有中文名。如果要放在別的地方看代碼注釋,效果圖如下,圖中文件夾是最后生成的,這里還沒弄完。此外PPT放在一個目錄下,和代碼同級:


效果圖

參考鏈接

  1. http://www.sohu.com/a/204817424_797291(代碼大體參照來源)
  2. https://www.2cto.com/kf/201206/137809.html(win32com的用法)
  3. https://my.oschina.net/zxcholmes/blog/484789(PpSaveAsFileType,指定存儲格式)

項目地址https://github.com/sujiujiu/ppt_to_jpg,里面包含一個實例,可直接下載運行


ppt_to_jpg()這個函數(shù)網(wǎng)上已經(jīng)有了,參考鏈接一,這里只是注釋和處理了下新存入目錄。批量導(dǎo)出PPT所有圖片,代碼如下:

# -*- coding: utf-8 -*-
import os
import win32com
import win32com.client

# 存儲PPT為JPG格式的類型,所對應(yīng)的數(shù)值
ppSaveAsJPG = 17

def ppt_to_jpg(ppt_file_name,output_dir_name):
    '''將PPT另存為JPG格式
    arguments:
        ppt_file_name: 要轉(zhuǎn)換的ppt文件的完整路徑文件名,eg:F:\\test\\ppt_name.ppt
        output_dir_name:轉(zhuǎn)換后的存放JPG文件的目錄,以PPT的名字新建的目錄,eg:F:\\test\\ppt_name
    '''
    # 啟動PPT
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    # 設(shè)置為0表示后臺運行,不顯示,1則顯示
    ppt_app.Visible = 1
    # 打開PPT文件
    ppt = ppt_app.Presentations.Open(ppt_file_name)
    # 另存為,第一個參數(shù)為報存圖片的目錄,第二個是報存的格式。
    ppt.SaveAs(output_dir_name, ppSaveAsJPG)
    # 退出PPT
    ppt_app.Quit()

if __name__ == '__main__':
    # 當(dāng)前文件所在目錄,eg: F:\\test,如果你要指定某個目錄,則手動指定current_dir 即可
    current_dir = os.sys.path[0]
    # 當(dāng)前目錄下所有文件,遍歷的結(jié)果是文件名。
    dir_list = os.listdir(current_dir)
    # 當(dāng)前目錄下所有的PPT文件,eg: ppt_name.ppt
    ppt_file_names = (fns for fns in dir_list if fns.endswith(('.ppt','.pptx')))
    # 當(dāng)前目錄下所有的PPT文件名,這兩者的區(qū)別在于有無后綴名,eg: ppt_name
    # splitext的作用是,'xx.jpg',會分成'xx'和'.jpg'
    ppt_names = (os.path.splitext(fns)[0] for fns in dir_list if fns.endswith(('.ppt','.pptx')))
    # 因為只需要文件名,這樣也行
    # ppt_names = (fns.split('.')[0] for fns in ppt_file_names)
    for ppt_file_name,ppt_name in zip(ppt_file_names,ppt_names):
        # 該PPT的完整路徑文件名,eg: F:\\test\\ppt_name.ppt
        ppt_file_name = os.path.join(current_dir,ppt_file_name)
        # 需要新建一個與PPT同名的文件,獲取完整路徑,eg:  F:\\test\\ppt_name
        ppt_dir_path = os.path.join(current_dir,ppt_name)
        # 創(chuàng)建新目錄
        os.mkdir(ppt_dir_path)
        # print ppt_file_name, ppt_dir_path
        ppt_to_jpg(ppt_file_name,ppt_dir_path)

以上代碼該注釋的都注釋了,這里有一個重點:ppSaveAsJPG 這個常量是什么?

  1. 最開始我看的鏈接一,該位置是個17,也只有數(shù)字,沒有解釋。我不太懂什么意思,我以為是數(shù)量,但是誰知道一個PPT里有多少圖片,不該是個常量啊。

  2. 然后搜SaveAs的參數(shù),又看到鏈接二

    SaveAs參數(shù)

    這段代碼的意思是,SaveAs的第一個參數(shù)指定文件名,第二個參數(shù)指定格式。但當(dāng)時我也沒仔細(xì)看參數(shù)名,而且后來也確實找不到里面具體有哪些參數(shù)。

  3. 然后翻到鏈接三,里面有一張圖:

    PpSaveAsFileType,文件存儲的格式對應(yīng)的數(shù)值

可以看到紅色方框里和第一條鏈接所看到的17一樣,就是存儲格式類型。

你可以在SaveAs的第二個參數(shù)直接填17,也可以給它指定為一個常量,比較明了,如ppSaveAsJPG = 17


未解決:
還有一種就是參考鏈接二:

在這之前,先講下導(dǎo)入的問題,一開始我是這么寫的:

import win32com
win32.client.constants

然后報錯:


這里寫圖片描述

甚至這也不行:


這里寫圖片描述

只導(dǎo)入win32com根本不能調(diào)用到client和constants,解決方法是,使用前先導(dǎo)入win32com.client,有兩種方法:

# 方法一:直接使用
from win32com.client import constants 
# 方法二:導(dǎo)入win32com.client
import win32com.client 
# win32com里的所有常量
wc = win32com.client.constants

但是我在ipython里打印不出來,只是返回一個:

<win32com.client.Constants instance at 0x00000000046E0148>

翻遍了代碼和win32com的源碼,除了前面那個從win下手的PpSaveAsFileType,目前還沒找到解決辦法在python下如何查看,先參考前面的圖片即可。如有大佬解決,煩請在評論留下解決方案,感激不盡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容