【AIによる回答】
Windowsで本日取得したスクリーンショット(画像ファイル)を自動的にExcelの1つのシートに、古い順(撮影日時順)に縦に並べて貼り付けるには、PowerShellスクリプトを使用するのが最も効率的です。以下に、指定したフォルダ内の画像を読み込み、新しいExcelファイルへ貼り付けるスクリプトとその使い方を解説します。PowerShellによる自動貼り付けスクリプト以下のコードをメモ帳などに貼り付け、ファイル名をPasteImages.ps1として保存してください。powershell# --- 設定項目 --- # スクリーンショットが保存されているフォルダのパス $imageFolder = "C:\Users\YourUser\Pictures\Screenshots" # 貼り付け先のExcelファイル名(フルパス) $excelPath = "C:\Users\YourUser\Documents\SnapshotList.xlsx" # ---------------- # 1. 本日の日付の画像だけを古い順に取得 $today = Get-Date -Format "yyyyMMdd" $images = Get-ChildItem -Path $imageFolder -Filter "*.png" | Where-Object { $_.CreationTime.ToString("yyyyMMdd") -eq $today } | Sort-Object CreationTime if ($images.Count -eq 0) { Write-Host "本日のスクリーンショットは見つかりませんでした。" Exit } # 2. Excelの起動 $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $workbook = $excel.Workbooks.Add() $worksheet = $workbook.Sheets.Item(1) $worksheet.Name = "Snapshots_$today" # 3. 画像の貼り付け $currentRow = 1 foreach ($image in $images) { Write-Host "Processing: $($image.Name)" # 画像の挿入 $shape = $worksheet.Shapes.AddPicture($image.FullName, $true, $true, 10, ($currentRow * 100), -1, -1) # 画像サイズを調整(幅をセルに合わせる等) $shape.LockAspectRatio = $true $shape.Width = 400 # セルに画像情報を記入 $worksheet.Cells.Item($currentRow, 1).Value2 = $image.Name $worksheet.Cells.Item($currentRow + 1, 1).Value2 = $image.CreationTime # 次の画像の位置(行)をずらす $currentRow += 15 # 画像の高さに合わせて調整 } # 4. 保存とクローズ $workbook.SaveAs($excelPath) Write-Host "完了しました: $excelPath" # 必要に応じてコメントアウトを外す # $excel.Quit() # [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)コードは注意してご使用ください。スクリプトの使い方
- 設定変更: スクリプト内の
$imageFolderを実際の画像保存フォルダに、$excelPathを保存したいExcelのパスに変更します。- 実行:
PasteImages.ps1を右クリックし、「PowerShellで実行」を選択します。
- 注: 初回実行時はスクリプトの実行許可が必要な場合があります。
- 結果: Excelが立ち上がり、本日撮影された画像が上から順に貼り付けられます。 [1]
スクリプトのポイント
$_.CreationTime: ファイルの作成日時(撮影日時)を基準にしています。Sort-Object CreationTime: これにより、古い順に並べ替えられます。AddPicture: Excelの機能を使って画像をシートに挿入します。このスクリプトは、Windows環境で画面キャプチャを定期的にエクセルにまとめたい場合に非常に役立ちます。
このスクリプト実行時にExcelを日付名ファイルで新規で作成して、その中のシートにスナップショットを貼り付ける用に改修してください。
ご要望に合わせて、「実行時の日付(yyyyMMdd形式)」でExcelファイルを新規作成し、その中に画像を貼り付けて保存するようにスクリプトを改修しました。保存先はデスクトップに設定していますが、必要に応じて変更可能です。改修版PowerShellスクリプトpowershell# --- 設定項目 --- # 1. スクリーンショットが保存されているフォルダ $imageFolder = "$env:USERPROFILE\Pictures\Screenshots" # 2. 保存先のフォルダ(デスクトップに設定) $outputFolder = "$env:USERPROFILE\Desktop" # 3. 本日の日付を取得(ファイル名用) $dateStr = Get-Date -Format "yyyyMMdd" $excelPath = Join-Path $outputFolder "Snapshots_$($dateStr).xlsx" # ---------------- # 本日の画像を古い順(昇順)に取得 $images = Get-ChildItem -Path $imageFolder -Filter "*.png" | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date } | Sort-Object CreationTime if ($images.Count -eq 0) { Write-Host "本日のスクリーンショットは見つかりませんでした。" -ForegroundColor Yellow Exit } # Excelの起動と新規ブック作成 $excel = New-Object -ComObject Excel.Application $excel.Visible = $true # 動作確認のため可視化 $workbook = $excel.Workbooks.Add() $worksheet = $workbook.Sheets.Item(1) $worksheet.Name = "Captured_$dateStr" $currentTop = 10 # 貼り付け開始の高さ位置(ピクセル) foreach ($image in $images) { Write-Host "貼り付け中: $($image.Name)" # 画像を挿入 (引数: ファイル名, リンク保存, ブック保存, 左位置, 上位置, 幅, 高さ) # 幅と高さに -1 を指定すると元のサイズで挿入 $shape = $worksheet.Shapes.AddPicture($image.FullName, $false, $true, 10, $currentTop, -1, -1) # 画像のサイズ調整(例:幅を500ピクセルに固定し、アスペクト比を維持) $shape.LockAspectRatio = $true $shape.Width = 500 # 次の画像との間隔を空ける(画像の下端 + 20ピクセル) $currentTop += $shape.Height + 20 } # ファイルを新規保存(既に同名ファイルがある場合は上書き警告が出ます) try { $workbook.SaveAs($excelPath) Write-Host "`n成功: Excelファイルが作成されました。" -ForegroundColor Green Write-Host "保存先: $excelPath" } catch { Write-Host "`nエラー: 保存に失敗しました。同名のファイルが開かれていないか確認してください。" -ForegroundColor Red } # 終了処理(Excelを閉じたい場合は下の2行を有効にしてください) # $excel.Quit() # [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)コードは注意してご使用ください。変更のポイント
- 動的なファイル名:
$dateStr = Get-Date -Format "yyyyMMdd"を使い、実行するたびにSnapshots_20231027.xlsxのような名前で新規作成するようにしました。- デスクトップ保存:
$env:USERPROFILE\Desktopを使用し、ログインユーザーのデスクトップに自動保存されるようにしています。- 座標による貼り付け:
AddPictureメソッドで座標($currentTop)を指定して貼り付ける方式にしました。これにより、画像の高さが異なっても「重ならずに縦に並べる」ことが可能です。- 日付判定の厳密化:
CreationTime.Dateで比較することで、時刻に関わらず「今日」のファイルだけを正確に抽出します。実行方法
- 上記コードを
PasteTodaySnapshots.ps1として保存します。- 右クリックして 「PowerShell で実行」 を選択してください。
貼り付ける際の画像の横幅(現在は500px)や、保存先フォルダをさらに調整したい場合はお知らせください。
