Q&A

回答の並べ替え:
投稿新規に質問を投稿する

ネットワークドライブへのPDFファイル連続保存について

aaaaaa aaaaaa

2026-08-21 13:29

「シートを以下にPDFファイルとして保存する」アクションで「指定パスを使用する」を選択し、ファイル名を変更しながら繰り返し保存したところ、まれに保存処理が失敗し、PDFファイルが作成されずアクションが中断されることがあります。

エラーログ
・「PermissionDeniedFileException:指定したファイルのアクセスが拒否されました。」の表示後アクションが中断。
・「出力ファイルのチェックで予期せぬエラーが発生しました: error-code = 0x00000002」の表示後アクションが中断。
また、エラーが表示されずにアクションが最後まで終了して、保存先ファイルを確認するとPDFファイルが出力予定数より少ない状態で処理が終了する場合もありました。

PDFの保存先にはネットワークドライブを指定しています。
以下の条件を検証しました。

・保存先をローカルディスクへ変更
 →正常に連続保存されました。
・同じ繰り返し処理で、PDF保存アクションを「シートを以下にExcelファイルとして保存する」アクションへ変更し、ネットワークドライブへ保存
 →正常に連続保存されました。
・保存先をドライブレターではなくUNCパスへ変更
 → 改善しませんでした。

また、ネットワークドライブへのPDF保存中にエクスプローラーで保存先を確認したところ、作成されたPDFファイルが一瞬消えた後、同じファイルが再度表示される不安定な挙動が確認できました。
この挙動は、ローカルディスクへのPDF保存、およびネットワークドライブへのExcelファイル保存では確認されませんでした。

似たような現象が発生した方はいらっしゃいますか?解決策を知りたいです。
よろしくお願いいたします。

snowfox snowfox
そのような状況でしたら、ローカルに保存するまでの処理をCELFで実装し、ローカルに保存したフォルダを別の監視ツール(CELFと関係ないツールになりますが)を利用して、ファイルの追加を検知されるたびに、本来保存したい場所に移動(またはコピー)するような対応方法があります。 CELF以外の対策になってしまいますが、ご検討できれば幸いです。

以下の例は、Powershellスクリプトになりますが、 このスクリプトを実行すれば、
(実行中には)C:\WORK フォルダ内に、ファイルが保存された場合、 S:\OtherWork フォルダに移動するようなサンプルコードになります。
※ 以下コンテンツは ファイル(ファイル名は任意ですが、拡張子は .ps1 )に保存してから実行してください。


$watchFolder = "C:\WORK"
$destinationFolder = "S:\OtherWork"

# --- フォルダの存在チェック ---
$missingFolders = @()
if (-not (Test-Path $watchFolder)) { $missingFolders += "・監視元フォルダ ($watchFolder)" }
if (-not (Test-Path $destinationFolder)) { $missingFolders += "・移動先フォルダ ($destinationFolder)" }

# 【フォルダがない場合】警告を出して終了
if ($missingFolders.Count -gt 0) {
Write-Host "==========================================" -ForegroundColor Yellow
Write-Host "【警告】必要なフォルダが見つかりません!" -ForegroundColor Yellow
Write-Host "==========================================" -ForegroundColor Yellow
foreach ($folder in $missingFolders) {
Write-Host $folder -ForegroundColor White
}
Write-Host ""
Write-Host "フォルダを作成してから、再度実行してください。" -ForegroundColor Gray
Write-Host "何かキーを押すと画面を閉じます..." -ForegroundColor Gray
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exit
}

# 【フォルダを発見した場合】フォルダ名を表示
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host "【確認】対象フォルダを発見しました。" -ForegroundColor Cyan
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host "・コピー元フォルダ : $watchFolder" -ForegroundColor White
Write-Host "・コピー先フォルダ : $destinationFolder" -ForegroundColor White
Write-Host ""
Start-Sleep -Seconds 2 # 確認用に2秒間表示
# ------------------------------

$filter = "*.*"
$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = $watchFolder
$fsw.Filter = $filter
$fsw.IncludeSubdirectories = $false
$fsw.EnableRaisingEvents = $true

$action = {
$path = $Event.SourceEventArgs.FullPath

# ファイルが完全に書き込まれるまでわずかに待機
Start-Sleep -Milliseconds 500

if (Test-Path $path) {
try {
Move-Item -Path $path -Destination $destinationFolder -Force -ErrorAction Stop
Write-Host "Moved: $path to $destinationFolder"
} catch {
# ファイルがロックされている場合はスキップ
}
}
}

# 追加(Created)と更新(Changed)を監視
Register-ObjectEvent $fsw Created -Action $action | Out-Null
Register-ObjectEvent $fsw Changed -Action $action | Out-Null

Write-Host "==========================================" -ForegroundColor Green
Write-Host " フォルダの監視を開始しました(正常動作中)" -ForegroundColor Green
Write-Host "==========================================" -ForegroundColor Green
Write-Host "※この画面を閉じると監視を終了します..." -ForegroundColor Gray

while ($true) { Start-Sleep -Seconds 1 }
aaaaaa aaaaaa
ご回答いただきありがとうございます。
ローカル経由での保存、大変参考になりました。
ただ、今回の対応では、可能であればRPA拡張オプションを利用せずに実現したいと考えております。
お手数をおかけしますが、よろしくお願いいたします。
snowfox snowfox
RPA処理例
なぜこの現象が起きるか分かりませんが、ネットワークドライブへのアクセスが不安定な場合、 保存処理の保存先をローカルに変更し、保存完了後に、別のファイルコピーかファイル移動処理を利用して、保存したい場所に格納するように、実装を変える方法で対応するのが現実的かもしれません。

上記処理の後半のファイル移動(またはコピー)処理の実現は、CELFのRPA拡張オプションをご契約する必要があります。