打印excel強制頁面縱向.exe是一款Python編寫將目標文件夾內(nèi)所有的ppt、excel、word快速生成PDF(縱向)小工具,很久之寫給公司文員使用的文檔批量生成PDF的Python小應用,我們可以橫向打印也可以豎向打印,一鍵搞定。
軟件說明
主要為快速的將文件夾內(nèi)的PPT、EXCEL、WORD生成對應的PDF。
PS:印象中如不能轉(zhuǎn)換好像需要安裝有office,成品是寫定了為縱向也可以改為橫向或者不設置。
excel怎么縱向打印
打開Excel,//點擊左上角的表格標志,點擊打印,然后選擇打印預覽,//在打印預覽里有個對頁面橫縱的設置,點擊橫向,//調(diào)整表格的大小,點擊縮放比例,縮放調(diào)整到大小合適的比例,//接下來選擇頁面設置,點擊頁邊距,居中方式點擊水平和垂直,設置完成后整個表格就能居中了,然后就可以直接打印了。
代碼說明
"""
【程序功能】:將【目標文件夾】內(nèi)所有的 ppt、excel、word 均生成一份對應的 PDF 文件
【作者】:qzw,提供內(nèi)部使用
【目標文件夾】:默認為此程序目前所在的文件夾;
若輸入路徑,則為該文件夾(只轉(zhuǎn)換該層,不轉(zhuǎn)換子文件夾下內(nèi)容)
【生成的pdf名稱】:原始名稱+.pdf
"""
import os, win32com.client, gc
# Word
def word2Pdf(filePath, words):
# 如果沒有文件則提示后直接退出
if(len(words)<1):
print ("\n【無 Word 文件】\n")
return
# 開始轉(zhuǎn)換
print ("\n【開始 Word -> PDF 轉(zhuǎn)換】")
try:
print ("打開 Word 進程...")
word = win32com.client.Dispatch("Word.Application")
word.Visible = 0
word.DisplayAlerts = False
doc = None
for i in range(len(words)):
print(i)
fileName = words[i] # 文件名稱
fromFile = os.path.join(filePath, fileName) # 文件地址
toFileName = changeSufix2Pdf(fileName) # 生成的文件名稱
toFile = toFileJoin(filePath,toFileName) # 生成的文件地址
print ("轉(zhuǎn)換:"+fileName+"文件中...")
# 某文件出錯不影響其他文件打印
try:
doc = word.Documents.Open(fromFile)
doc.SaveAs(toFile,17) # 生成的所有 PDF 都會在 PDF 文件夾中
print ("轉(zhuǎn)換到:"+toFileName+"完成")
except Exception as e:
print(e)
# 關閉 Word 進程
print ("所有 Word 文件已打印完畢")
print ("結(jié)束 Word 進程...\n")
doc.Close()
doc = None
word.Quit()
word = None
except Exception as e:
print(e)
finally:
gc.collect()
# Excel
def excel2Pdf(filePath, excels):
# 如果沒有文件則提示后直接退出
if(len(excels)<1):
print ("\n【無 Excel 文件】\n")
return
# 開始轉(zhuǎn)換
print ("\n【開始 Excel -> PDF 轉(zhuǎn)換】")
try:
print ("打開 Excel 進程中...")
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = 0
excel.DisplayAlerts = False
wb = None
ws = None
for i in range(len(excels)):
print(i)
fileName = excels[i] # 文件名稱
fromFile = os.path.join(filePath, fileName) # 文件地址
print ("轉(zhuǎn)換:"+fileName+"文件中...")
# 某文件出錯不影響其他文件打印
try:
wb = excel.Workbooks.Open(fromFile)
for j in range(wb.Worksheets.Count): # 工作表數(shù)量,一個工作簿可能有多張工作表
toFileName = addWorksheetsOrder(fileName, j+1) # 生成的文件名稱
toFile = toFileJoin(filePath,toFileName) # 生成的文件地址
ws = wb.Worksheets(j+1) # 若為[0]則打包后會提示越界
ws.PageSetup.Orientation=2 # 設置頁面方向,縱向=1,橫向=2
ws.ExportAsFixedFormat(0,toFile) # 每一張都需要打印
print ("轉(zhuǎn)換至:"+toFileName+"文件完成")
except Exception as e:
print(e)
# 關閉 Excel 進程
print ("所有 Excel 文件已打印完畢")
print ("結(jié)束 Excel 進程中...\n")
ws = None
wb.Close()
wb = None
excel.Quit()
excel = None
except Exception as e:
print(e)
finally:
gc.collect()
# PPT
def ppt2Pdf(filePath, ppts):
# 如果沒有文件則提示后直接退出
if(len(ppts)<1):
print ("\n【無 PPT 文件】\n")
return
# 開始轉(zhuǎn)換
print ("\n【開始 PPT -> PDF 轉(zhuǎn)換】")
try:
print ("打開 PowerPoint 進程中...")
powerpoint = win32com.client.Dispatch("PowerPoint.Application")
ppt = None
# 某文件出錯不影響其他文件打印
for i in range(len(ppts)):
print(i)
fileName = ppts[i] # 文件名稱
fromFile = os.path.join(filePath, fileName) # 文件地址
toFileName = changeSufix2Pdf(fileName) # 生成的文件名稱
toFile = toFileJoin(filePath,toFileName) # 生成的文件地址
print ("轉(zhuǎn)換:"+fileName+"文件中...")
try:
ppt = powerpoint.Presentations.Open(fromFile,WithWindow=False)
if ppt.Slides.Count>0:
ppt.SaveAs(toFile, 32) # 如果為空則會跳出提示框(暫時沒有找到消除辦法)
print ("轉(zhuǎn)換至:"+toFileName+"文件完成")
else:
print("(錯誤,發(fā)生意外:此文件為空,跳過此文件)")
except Exception as e:
print(e)
# 關閉 PPT 進程
print ("所有 PPT 文件已打印完畢")
print ("結(jié)束 PowerPoint 進程中...\n")
ppt.Close()
ppt = None
powerpoint.Quit()
powerpoint = None
except Exception as e:
print(e)
finally:
gc.collect()
# 修改后綴名
def changeSufix2Pdf(file):
return file[:file.rfind('.')]+".pdf"
# 添加工作簿序號
def addWorksheetsOrder(file, i):
return file[:file.rfind('.')]+"_工作表"+str(i)+".pdf"
# 轉(zhuǎn)換地址
def toFileJoin(filePath,file):
return os.path.join(filePath,'pdf',file[:file.rfind('.')]+".pdf")
# 開始程序
print ("====================程序開始====================")
print ("【程序功能】將目標路徑下內(nèi)所有的 ppt、excel、word 均生成一份對應的 PDF 文件,存在新生成的 pdf 文件夾中(需已經(jīng)安裝office,不包括子文件夾)")
print ("注意:若某 PPT 和 Excel 文件為空,則會出錯跳過此文件。若轉(zhuǎn)換 PPT 時間過長,請查看是否有報錯窗口等待確認,暫時無法徹底解決 PPT 的窗口問題。在關閉進程過程中,時間可能會較長,十秒左右,請耐心等待。")
filePath = input ("輸入目標路徑:(若為當前路徑:"+os.getcwd()+",請直接回車)\n")
# 目標路徑,若沒有輸入路徑則為當前路徑
if(filePath==""):
filePath = os.getcwd()
# 將目標文件夾所有文件歸類,轉(zhuǎn)換時只打開一個進程
words = []
ppts = []
excels = []
for fn in os.listdir(filePath):
if fn.endswith(('.doc', 'docx')):
words.append(fn)
if fn.endswith(('.ppt', 'pptx')):
ppts.append(fn)
if fn.endswith(('.xls', 'xlsx')):
excels.append(fn)
# 調(diào)用方法
print ("====================開始轉(zhuǎn)換====================")
# 新建 pdf 文件夾,所有生成的 PDF 文件都放在里面
folder = filePath + '\\pdf\\'
if not os.path.exists(folder):
os.makedirs(folder)
word2Pdf(filePath,words)
excel2Pdf(filePath,excels)
ppt2Pdf(filePath,ppts)
print ("====================轉(zhuǎn)換結(jié)束====================")
print ("\n====================程序結(jié)束====================")
os.system("pause")