公司要做一個軟件,要將Word、Excel 轉化爲PDF文件 ,於是老闆看到有用PowerShell 腳本寫的excel轉化爲PDF 的代碼,於是就交給了我。
準備
- PowerShell 現在電腦都內嵌的有
- 電腦要安裝的有 Microsoft Office 或者有WPS,但是WPS要設置兼容
2.1 在WPS中找到設置。
2.2 .打開高級設置 。
2.3 。選擇兼容 選擇後要重啓電腦才能能生效。
開始上代碼。
EXCEL 轉化 PDF文件
#UPDATE DATA IN EXCEL FILES 更新Excel文件中的數據
#THEN CREATE PDF FILE Then 建立PDF文檔
[string]$path = "D:\powershell\excels\" #Path to Excel spreadsheets to save to PDF 保存到pdf的excel電子表格路徑
[string]$savepath = "D:\powershell\pdfs\"
[string]$dToday = Get-Date -Format "yyyyMMdd"
$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]
# Get-ChildItem 在一個或多個指定位置獲取項目和子項目
$excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx -recurse
# Create the Excel application object 創建Excel應用程序隊象
# New-Object 創建Microsoft .NET Framework或COM對象的實例
$objExcel =New-Object -ComObject excel.application
$objExcel.visible = $false #Do not open individual windows 不打開單個窗口
foreach($wb in $excelFiles)
{
# Path to new PDF with date 帶有日期的新的PDF的路徑
#Join-Path 將路徑和子路徑合併爲一條路徑。
$filepath = Join-Path -Path $savepath -ChildPath ($wb.BaseName + "_" + $dtoday + ".pdf")
# Open workbook - 3 refreshes links 打開工作簿 3秒刷新
$workbook = $objExcel.workbooks.open($wb.fullname, 3)
# 刷新指定工作簿中的所有外部數據範圍和數據透視表報表。
$workbook.RefreshAll()
# Give delay to save 延遲保存
Start-Sleep -s 5
# Save Workbook 保存工作簿
$workbook.Saved = $true
"saving $filepath"
#Export as PDF 導出爲PDF
$workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath)
$objExcel.Workbooks.close()
}
$objExcel.Quit()
Word 轉化 PDF
#UPDATE DATA IN EXCEL FILES 更新Word文件中的數據
#THEN CREATE PDF FILE Then 建立PDF文檔
[string]$path = "D:\powershell\words\" #Path to Excel spreadsheets to save to PDF 保存到pdf的excel電子表格路徑
[string]$savepath = "D:\powershell\pdfs\"
[string]$dToday = Get-Date -Format "yyyyMMdd"
# $wdExportFormat = "Microsoft.Office.Interop.Word.wdExportFormat" -as [type]
# Get-ChildItem 在一個或多個指定位置獲取項目和子項目
$wordFiles = Get-ChildItem -Path $path -include *.docx, *.doc -recurse
# Create the Word application object 創建Word應用程序隊象
# New-Object 創建Microsoft .NET Framework或COM對象的實例
$objWord = New-Object -ComObject word.application
$objWord.visible = $false #Do not open individual windows 不打開單個窗口
foreach($wb in $wordFiles)
{
# Path to new PDF with date 帶有日期的新的PDF的路徑
#Join-Path 將路徑和子路徑合併爲一條路徑。
[string]$filepath = Join-Path -Path $savepath -ChildPath ($wb.BaseName + "_" + $dtoday + ".pdf")
# Open workbook - 3 refreshes links 打開工作簿 3秒刷新
$workbook = $objWord.documents.open($wb.fullname)
# 刷新指定工作簿中的所有外部數據範圍和數據透視表報表。
# $workbook.RefreshAll() word 沒有這個方法
# Give delay to save 延遲保存
Start-Sleep -s 5
# Save Workbook 保存工作簿
$workbook.Saved = $true
"saving $filepath"
#Export as PDF 導出爲PDF
# $wdExportFormat::wdExportFormatPDF
# 這裏有坑 之前寫的 ($filepath,$wdExportFormat::wdExportFormatPDF) 但是會報 ‘值不在預期的範圍內’ 。
$workbook.ExportAsFixedFormat($filepath,17)
$objWord.Documents.close()
}
$objWord.Quit()
安裝WPS 的 不設置兼容會出現
檢索 COM 類工廠中 CLSID 爲 {} 的組件時失敗
因爲轉化是基於 Microsoft Office 的