Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Ask_AI】Windowsで本日取得したスナップショットをExcelのシートに縦に古い順から貼り付けていくスクリプト

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

【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)
コードは注意してご使用ください。
スクリプトの使い方
    1. 設定変更: スクリプト内の $imageFolder を実際の画像保存フォルダに、$excelPath を保存したいExcelのパスに変更します。
    2. 実行: PasteImages.ps1 を右クリックし、「PowerShellで実行」を選択します。
        • 注: 初回実行時はスクリプトの実行許可が必要な場合があります。
    3. 結果: 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)
コードは注意してご使用ください。

変更のポイント
  1. 動的なファイル名: $dateStr = Get-Date -Format "yyyyMMdd" を使い、実行するたびに Snapshots_20231027.xlsx のような名前で新規作成するようにしました。
  2. デスクトップ保存: $env:USERPROFILE\Desktop を使用し、ログインユーザーのデスクトップに自動保存されるようにしています。
  3. 座標による貼り付け: AddPicture メソッドで座標($currentTop)を指定して貼り付ける方式にしました。これにより、画像の高さが異なっても「重ならずに縦に並べる」ことが可能です。
  4. 日付判定の厳密化: CreationTime.Date で比較することで、時刻に関わらず「今日」のファイルだけを正確に抽出します。
実行方法
  1. 上記コードを PasteTodaySnapshots.ps1 として保存します。
  2. 右クリックして 「PowerShell で実行」 を選択してください。
貼り付ける際の画像の横幅(現在は500px)や、保存先フォルダをさらに調整したい場合はお知らせください。
タイトルとURLをコピーしました