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