おはようございます。すぎやまです。
この記事では、ps1ファイルを使用してExcelを編集する方法を紹介します。
まず、結論を記載します。
ps1ファイルでExcel編集
- Excel編集は「New-Object -ComObject Excel.Application」コマンドを使用してから実施
- Excelで実行できる作業は実行可能
下記、詳細を説明します。
使用するコマンド
前述の通り、まずは「New-Object -ComObject Excel.Application」コマンドを使用します。
しかしこれはエクセルを起動するコマンドですので、最初におまじないのように記載します。
実際にExcelの編集を行う場合、行いたい作業に合わせてコマンドを記載することになります。
Excelで行える作業は大体行えるため、すべてのコードを記載は出来ません。
下記、いくつか使いやすい例を記載します
文法 | 機能 |
= $excel.Workbooks.Open($[パス]) | [パス]で指定したExcelを開く |
= $[Excelファイル].Sheets([シート番号]) | [Excelファイル]の[シート番号]番目のシートを開く |
= $[シート].Range(“[セル]”) | [シート]の[セル]で指定した位置のセルを指定する |
Write-Host $[セル].Value() | [セル]の情報を取得する |
Excelの一括pdf化
# Excelアプリケーションを開始
$excel = New-Object -ComObject Excel.Application
# Excelウィンドウを表示しないようにする
$excel.Visible = $false
#警告・メッセージを表示しない
$excel.DisplayAlerts = $False
# 現在のフォルダを指定
$path = get-location
$ext = ".pdf"
# 出力先のフォルダを指定
$outputFolder = ".\pdf化"
# フォルダが存在しない場合は作成
if (-not (Test-Path $outputFolder)) {
New-Item -ItemType Directory -Force -Path $outputFolder
}
# フォルダ内のExcelファイルを取得
$Files = Get-ChildItem -Path $path -Filter *.xlsx
$excelFiles = $Files.FullName
foreach ($excelFile in $excelFiles){
# Excelファイルを開く
$book = $excel.Workbooks.Open($excelFile)
#変換対象ファイルをpdfとしてエクスポート
$book.ExportAsFixedFormat(0, $excelFile)
#ファイル名に".xlsx"が残ってしまうのでリネーム
$pdffile = $excelFile + $ext
Get-ChildItem $pdffile | Foreach-Object {$newname = $_.Name -Replace ".xlsx",""}
#Move-Itemで移動
Move-Item $pdffile -Destination "$path\pdf化\$($newname)" -Force
}
# Excelアプリケーションを終了
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[GC]::Collect()
Write-Host "PDF変換が完了しました。"
こちらのコードでは、
Excelを起動→pdfの保存先ファイルを作成→Excelファイルをpdfで保存→リネーム
という処理をしています。
使用方法はこちらの記事をご覧ください。
Excelファイルの一括検索
# COMオブジェクトを作成してExcelを起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false # Excelウィンドウを非表示にする
# スクリプトファイルのディレクトリをカレントディレクトリに設定する
Set-Location -Path $PSScriptRoot
# 検索する単語の入力
$keyword = Read-Host "検索する単語を入力してください"
# 現在のディレクトリ内のExcelファイルを検索する
$files = Get-ChildItem -Path $PSScriptRoot -Filter *.xlsx
foreach ($file in $files) {
$workbook = $excel.Workbooks.Open($file.FullName)
foreach ($worksheet in $workbook.Worksheets) {
$rows = $worksheet.UsedRange.Rows.Count
$cols = $worksheet.UsedRange.Columns.Count
for ($i = 1; $i -le $rows; $i++) {
for ($j = 1; $j -le $cols; $j++) {
$cell = $worksheet.Cells.Item($i, $j)
$cellText = $cell.Text
if ($cellText -match $keyword) {
Write-Host "File: $($file.FullName)"
Write-Host "Cell: $cellText"
Write-Host "--------------------------"
}
}
}
}
$workbook.Close()
}
# Excelアプリケーションを終了
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
Write-Host "検索が完了しました。"
こちらのコードでは、
Excelを起動→検索ワードを受け付け→Excelファイルの各セルを検索→該当するファイル名を表示
という処理をしています。
使用方法はこちらの記事をご覧ください。
その他のps1ファイル
今回はExcelファイルの編集に焦点を当てましたが、
ps1ファイルを使用するとその他にも様々な処理も行うことができます。
ps1ファイルに可能なことを大まかに知りたい方はこちらの記事を、
実際に使用できるコードを知りたい方はこちらの記事を参照ください。
以上、最後まで読んでくださりありがとうございました。
メーカー勤務のサラリーマン
日々の業務を効率的に進めるため、
慣れない々プログラミングを勉強中。
AIを活用した日々の作業削減を目論みブログを開設。