以前、VBAで拡大率100%、カーソル位置A1を一括でチェックするPowerShellのScript(*.ps1)を書きました。
あくまでフォルダ内のExcelファイルを一通りチェックして問題のある部分をピックアップするだけです。
仕様
例えばフォルダの中に納品前のExcelファイルが沢山あって、1つずつ目で問題ないかチェックするのは大変だと思いませんか?
よく納品前のチェックリストに記載されていることとして下の3つが挙げられていると思います。
これらを手作業で確認すると結構な工数がかかる作業になってしまいます。
今回上記の3点の確認をファイルを壊さずにスクリプト1本で確認してみます。
ソースコード
やることは大まかに以下のことです。
- 作業フォルダに移動する
- 作業フォルダ内にあるファイルごとにループする
- エクセルファイルを開く
- シートごとにループする
- 各種チェックをする
- 非表示シートチェック
- 拡大率チェック
- カーソル位置チェック(A1)
- 各種チェックをする
- シートごとにループする
- エクセルファイルを閉じる
- エクセルファイルを開く
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $true
$excel.DisplayAlerts = $false
$currentPath = "C:\temp\powershell\file3\"
# 作業フォルダ移動
Set-Location -Path $currentPath
# フォルダのファイル一覧取得
$items = Get-ChildItem * -File -include *.xlsx
# ファイルごとにループ
foreach ( $item in $items ) {
# Excelオープン
$book = $excel.Workbooks.Open($item.FullName)
# ファイル名出力
Write-Host ("確認ファイル -> " + $item.FullName)
# シートごとにループ
foreach ( $sheet in $excel.Worksheets ) {
$error = $false
$log = " NG:" + $sheet.Name
# 処理対象の選択
$sheet.Activate()
# 非表示シートがあるか
$visible = $sheet.Visible
if (-not $sheet.Visible) {
$log = $log + "`r`n 非表示シート "
$error = $true
}
# 拡大率チェック
$zoom = $excel.ActiveWindow.Zoom
if ( $zoom -ne 100 ) {
$log = $log + "`r`n 拡大率 : " + $zoom
$error = $true
}
# カーソル位置チェック(A1の位置か)
$address = $excel.ActiveCell.Address($False, $False) # RowAbsolute,ColumnAbsolute
if ($address -ne "A1") {
$log = $log + "`r`n カーソル位置A1以外 : " + $address
$error = $true
}
# ログ出力
if( $error ){
Write-Host($log)
}
}
# 保存、クローズ
[void]$book.Save()
[void]$book.Close($false)
}
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Read-Host
テスト実行
テストファイル
テストファイルは下記のように設計書1.xlsx~設計書3まで用意しておきます。
テスト実行でNGとして検出させるため、それぞれのファイルで非表示シート、拡大率≠100%、カーソル位置≠A1にしておきます。
スクリプト実行
ではテスト実行してみましょう。
ソースコードをテキストエディタで入力したら、拡張子*.ps1として保存し実行します。
実行は右クリックメニュー「PowerShellで実行」で実行します。
実行結果
各ファイルの各シートのNG個所が出力されました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント