Excel上のチェックボックスの状態を取得するPowerShellのサンプルコード(フォームコントロール)

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

Excel上のフォームコントロールのチェックボックスの状態を取得する、PowerShellのサンプルコードを紹介します。

操作対象Excelファイル

PowerShellから操作するチェックボックス入りのExcelファイルです。

Book1.xlsx

下記画像の1行目3列目のアイコンのチェックボックスを使用しています。

細かいことを書くとこんな状態ですがさらっと読めばよいです。

  • オブジェクト名「Check Box 1」~「Check Box 5」の、チェックボックスを5つ追加しています。
  • チェックボックスはグループ化されています。
  • チェックボックスはフォームコントロールです。※ActiveXコントロールではありません。

単一のチェックボックスの状態の取得

ソースコード

「りんご」のチェックボックスの状態を取得して、表示してみます。

「りんご」のオブジェクト名は「Check Box 1」なので、CheckBoxesに「Check Box 1」を指定します。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# チェックボックスの状態取得
write-host($sheet.CheckBoxes("Check Box 1").Value)

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

りんごのチェック状態が出力されました。

チェックオフなので、「-4146」が出力されます。

チェックオンだと、「1」が出力されます。

状態は以下の通りになります。

  • チェックオン:1
  • チェックオフ:-4146

ループしてチェックボックスを取得(foreach文)

ソースコード

foreach文を使用して、チェックが付いたチェックボックスのCaptionを取得します。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# グループ内のチェックボックスをまとめて取得する場合 foreach版
foreach($checkbox in $sheet.Shapes("Group1").GroupItems){
    
    if ($sheet.CheckBoxes($checkbox.Name).Value -eq 1){ # CHECK ON
        write-host($sheet.CheckBoxes($checkbox.Name).Caption)
    }
    
}

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

試しに、果物だけにチェックして取得しました。

実行前

実行後

ループしてチェックボックスを取得(for文)

ソースコード

for文を使用して、チェックが付いたチェックボックスのCaptionを取得します。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# グループ内のチェックボックスをまとめて取得する場合 for版
for($i=1; $i -le $sheet.Shapes("Group1").GroupItems.Count;$i++){

    $checkboxName = "Check Box " + $i
    if ($sheet.CheckBoxes($checkboxName).Value -eq 1){ # CHECK ON
        write-host($sheet.CheckBoxes($checkboxName).Caption)
    }
}

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

こちらも同様に、果物だけにチェックして取得しました。

実行前

実行後

同じ結果です。

参考情報

環境

下記の環境で作成・実行しております。

No.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。

コメント

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