【Powershell】ドラッグ&ドロップの実装
.Net
comオブジェクト
excel
powershell
UI
STA
MTA
ドラッグ&ドロップ
.AllowDrop
System.Windows.Forms
アセンブリ
DialogResult
PowershellでUIを実装する
Poweshellには多彩なUIが実装されています。その中でもドラッグ&ドロップできるエリアを使用してみたいと思います。
下記サイトを参考にさせていただきました。と言ってもまるまるコピペです笑
letspowershell.blogspot.jp
Add-Type -AssemblyName System.Windows.Forms $form = New-Object System.Windows.Forms.Form #formのサイズ $form.Size = "500,300" $form.StartPosition = "CenterScreen" $form.Text = "タイトル" #リストボックスの生成 $Listbox = New-Object System.Windows.Forms.ListBox $Listbox.Location = "10,10" #リストボックスのサイズ $Listbox.Size = "470,200" #ドラッグ&ドロップを許可 $Listbox.AllowDrop = $True # ドラッグエンター イベント $Enter = { $_.Effect = "ALL" #write-host "このタイミングです!!" } #addしないとドラッグできない $Listbox.Add_DragEnter($Enter) #ドラッグドロップ イベント $Drop = { $Name = @($_.Data.GetData("FileDrop")) #1つずつ取得し、リストボックスに追加 For ( $i = 0 ; $i -lt $Name.Count ; $i++ ) { $Listbox.Items.Add($Name[$i]) } } #addしないとドロップできない $Listbox.Add_DragDrop($Drop) #開始ボタン $Button = New-Object System.Windows.Forms.Button $Button.Location = "200,220" $Button.size = "80,30" $Button.text = "開始" $Button.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.Controls.AddRange(@($Listbox,$Button)) $Form.Showdialog()
これで、ドラッグエリアが表示されるので、ドロップしたファイルのパスが表示されます。
この実装によりファイルパスの取得が楽になりました。
ドロップしたファイルパスは$Listboxに格納されていきます。
なのでこれを使用してファイルをオープンなど使用しています。
#ドロップしたExcelファイル1を開く $path = $Listbox.Items[0] $excelFile1 = $excel.Workbooks.Open($path) #ドロップしたExcelファイル2を開く $path2 = $Listbox.Items[1] $excelFile1= $excel.Workbooks.Open($path2)
UIを実装したときはPowershell ISEから実行してください。
powershellコンソールや右クリックの「powershellで実行」をするとエラーになります。
原因は実行時のSTAとMTAモードの違いなんですが、それはまた次回ということで~