Forum Discussion
Jianzhong_Hill
May 08, 2023Copper Contributor
Sorry, we couldn't find your file. Was it moved, renamed, or deleted?
I want to write a script using powershell which can convert all word files in one folder into PDF format, But it always went error like blow Sorry, we couldn't find your file. Was it moved, ren...
gongyan
May 17, 2023Copper Contributor
看你的昵称,你好像是中国人?如果是的话,我也是。
你的问题在于这一行代码:
$document = $wordObject.Documents.Open($wordPath)
$wordPath变量是不能被open函数识别的,你应该这样写:
$document = $wordObject.Documents.Open($wordPath.fullname)
我在我自己的电脑上解决了你说的文件不存在的报错,但是随之而来的是新的错误:
Exception Caught: System.Runtime.InteropServices.COMException (0x80010001): 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))
在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
在 System.Management.Automation.ComInterop.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, ComMethodDesc method, Object[] args, UInt32 argErr)
在 CallSite.Target(Closure , CallSite , ComObject , Object , Int32 )
在 System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
在 System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
在 System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
在 System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
今天的时间不够了,明天我在尝试解决这个问题。
今天终于解决了这个问题,途中我被我自己的一个误操作困扰了很久,但是最终解决掉了,值得吐槽的是,com真难用,明明是参数1的错误,非要说第二个参数错了。
我的代码:
$folderPath = "D:\工作\temp\2023年4月19日"
$folderPathOut = "D:\工作\temp\2023年4月19日"
$wordFiles = Get-ChildItem -Path $folderPath -Filter "*.docx"
try{
Get-Process -Name "*word*" |Stop-Process #避免之前运行失败的word程序影响
$wordObject = new-object -ComObject "Word.Application"
}
catch {
Write-Host "Exception Caught: " $_.Exception -ForegroundColor Red
exit
}
foreach ($file in $wordFiles){
$pdfPath = Join-Path -Path $folderPathOut -ChildPath ($file.BaseName + ".pdf")
try{
$document = $wordObject.Documents.Open($file.FullName)
}
catch {
Write-Host "打开word文件: " $_.Exception -ForegroundColor Red
continue
}
try{
$document.SaveAs($pdfPath, 17)
}
catch {
Write-Host "另存为: " $_.Exception -ForegroundColor Red
}
finally{
$document.Close()
}
}
$wordObject.Quit()
Remove-Variable wordObject我在我的电脑上测试通过:Windows 10 企业版,word 2019