2017年6月25日 星期日

[PowerShell] [Office] 自動執行應用程式之間的複製貼上

簡單的補充一篇早前返工時的嘗試,大概這個方法還可以用在其他平台/情況。

話說有個軟件的用家介面在顯示一些設定資料的版面上,沒有「匯出」功能,只讓人逐格地Copy & Paste。不想人手這麼耗時,就找方法來自動Copy&Paste抄寫到Excel中。

# 用家設定參數, 
# $count: 這裡預執行次數=行數-1;
# $winTitle01: Copy的應用程式標題; 
# $winTitle02: Paste的應用程式標題;
param(
$count = 36, 
$winTitle01 = "This Platform x.xx  [ USER - ENVIRONMENT ]",
$winTitle02 = "Book1 - Excel"
)

add-type -AssemblyName microsoft.VisualBasic  #載入VB的部件。
add-type -AssemblyName System.Windows.Forms  #載入System.Windows.Forms的部件。

start-sleep -Milliseconds 1000 #暫停1000微秒
#For-Loop 執行for ($i = 1; $i -lt $count; $i++) { 
    Start-Sleep -Seconds 1  #暫停1秒
  [Microsoft.VisualBasic.Interaction]::AppActivate($winTitle01)  #啟動已在執行中的應用程式。
  [System.Windows.Forms.SendKeys]::SendWait("{DOWN}^(c)")  #傳送指定的按鍵至使用中的應用程式,然後等待訊息的處理。
    Start-Sleep -Seconds 1
  [Microsoft.VisualBasic.Interaction]::AppActive($winTitle02)
  [System.Windows.Forms.SendKeys]::SendWait("{DOWN}^(v)")
}

Powershell - Add-Type
https://ss64.com/ps/add-type.html

MSDN - Interaction.AppActivate Method (String)
https://msdn.microsoft.com/en-us/library/x57y7863(v=vs.110).aspx

MSDN - SendKeys.SendWait Method (String)
https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait(v=vs.110).aspx

MSDN - SendKeys Class - KeyStoke的對應表
https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys(v=vs.110).aspx

沒有留言:

張貼留言