フォルダ内のExcelの非表示シートの有無、拡大率100%、カーソル位置A1をチェックするPowerShellサンプル

記事内に広告が含まれています。

以前、VBAで拡大率100%、カーソル位置A1を一括でチェックするPowerShellのScript(*.ps1)を書きました。

あくまでフォルダ内のExcelファイルを一通りチェックして問題のある部分をピックアップするだけです。

仕様

例えばフォルダの中に納品前のExcelファイルが沢山あって、1つずつ目で問題ないかチェックするのは大変だと思いませんか?

よく納品前のチェックリストに記載されていることとして下の3つが挙げられていると思います。

  • お客さんに見せてはいけない非表示シートが混じっていていませんか?※これは大変まずい
  • 全部のシートで拡大率は100%にしていますか?
  • カーソル位置がA1になっていますか?

これらを手作業で確認すると結構な工数がかかる作業になってしまいます。

今回上記の3点の確認をファイルを壊さずにスクリプト1本で確認してみます。

ソースコード

やることは大まかに以下のことです。

  1. 作業フォルダに移動する
  2. 作業フォルダ内にあるファイルごとにループする
    1. エクセルファイルを開く
      1. シートごとにループする
        • 各種チェックをする
          1. 非表示シートチェック
          2. 拡大率チェック
          3. カーソル位置チェック(A1)
    2. エクセルファイルを閉じる
$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.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。

コメント

タイトルとURLをコピーしました