環(huán)境:py2.7
要求:
1、先pip安裝pywin32
pip install pywin32
2、這份代碼最好和你的PPT文件放在同一目錄下,且目錄不能有中文名。如果要放在別的地方看代碼注釋,效果圖如下,圖中文件夾是最后生成的,這里還沒弄完。此外PPT放在一個目錄下,和代碼同級:
參考鏈接:
- http://www.sohu.com/a/204817424_797291(代碼大體參照來源)
- https://www.2cto.com/kf/201206/137809.html(win32com的用法)
- 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 這個常量是什么?
最開始我看的鏈接一,該位置是個17,也只有數(shù)字,沒有解釋。我不太懂什么意思,我以為是數(shù)量,但是誰知道一個PPT里有多少圖片,不該是個常量啊。
-
然后搜SaveAs的參數(shù),又看到鏈接二:
SaveAs參數(shù)
這段代碼的意思是,SaveAs的第一個參數(shù)指定文件名,第二個參數(shù)指定格式。但當(dāng)時我也沒仔細(xì)看參數(shù)名,而且后來也確實找不到里面具體有哪些參數(shù)。 -
然后翻到鏈接三,里面有一張圖:
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下如何查看,先參考前面的圖片即可。如有大佬解決,煩請在評論留下解決方案,感激不盡。