2017-11-13 24 views
1

次のコードがありますが、出力ファイルを「別名で保存」するためのダイナミックダイアログボックスをユーザーに表示させようとしています。既存のスクリプトのようにファイルを保存するダイアログボックス

$pathtsv = "c:\test.txt" 
$pathxlsx = "c:\NBP ESP-152 REV F TEMPLATE.xlsx" 

$Excel = New-Object -ComObject "Excel.Application" 
$Excel.Visible=$true 

$Workbook = $Excel.Workbooks.Open($pathxlsx) # Open Template 
$TempWorkbook = $Excel.Workbooks.Opentext($pathtsv) # Open text file in excel 

$temp = $excel.Workbooks.Item(2) #select workbook with text 
$temp = $temp.Worksheets.Item(1) #select text worksheet 
$CopyRange = $temp.Range("A1:G8") #set range 
$CopyRange.Copy() #copy data 

$workbooksheet = $Workbook.Worksheets.Item(1)#sets doc to copy to 
$Workbooksheet.activate() 
$PasteRange = $workbooksheet.Range("A3:J10") #sets range 
$workbooksheet.Paste($PasteRange)#paste data 

#save and close the workbook 
$Workbook.Close($true) 
$Excel.Quit() 
while([System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)){} 
[gc]::collect() 
[gc]::WaitForPendingFinalizers() 

だから私はに追加しようとした:

$SaveFileDialog = New-Object windows.forms.savefiledialog 
    $SaveFileDialog.initialDirectory = [System.IO.Directory]::GetCurrentDirectory() 

それが動作していないようです。理由はわかりません。私はまだPowerShellスクリプティングの初心者です。私はちょうどそれがダイアログボックスとして名前を付けて保存に終わるようにしたい、うまくいくだろう。オリジナルの終わりを切らなければならないのですか?

+0

"これらの行はどこに追加しましたか?"あなたは 'SaveFileDialog.CreatePrompt = True'と' SaveFileDialog.OverwritePrompt = True'を調査しましたか? – lit

+0

申し訳ありませんが、[閉じる]ダイアログの直前に追加しました。 –

+1

winformsアセンブリを追加しましたか?例えば'Add-Type -AssemblyName System.Windows.Forms'また、$ SaveFileDialog.ShowDialog()を呼び出してウィンドウを表示しましたか? – BenH

答えて

1

(IE。これは?

$Workbook.Close($true) 
$Excel.Quit() 
while([System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)){} 
[gc]::collect() 
[gc]::WaitForPendingFinalizers() 

を切り出す取得ん)あなたはこの仕事をするためにいくつかのことを行う必要があります。まず、コピー/ペースト操作がダイアログを作成し、あなたの後のSystem.Windows.Forms

Add-Type -AssemblyName System.Windows.Forms 

への参照を追加して、カップルのプロパティ

$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog 
$SaveFileDialog.initialDirectory = [System.IO.Directory]::GetCurrentDirectory() 
$SaveFileDialog.Filter = 'All files (*.*)|*.*' 

あなたが望むものを決定する必要があります場所ですに設定ダイアログを表示するときに行います。あなたは、ユーザーにキャンセルを許可しますか、空のパスや不正な拡張子などをどう扱うのですか?例として、パスが選択されるまで表示し続けます。私は良い選択肢としてこれを支持しているわけではありません。

$dialogResult = $null 
while($dialogResult -ne "OK"){ 
    $dialogResult = $SaveFileDialog.ShowDialog() 
} 

そして、ExcelワークブックのSaveAsメソッドにこれを渡し

$SaveFileDialog.FileName 

それに必要なFileNameプロパティで選択したパスにアクセスし、実行してチェックすることができます。最後に、あなたのブックを閉じるとExcelのhttps://stackoverflow.com/a/25289878/3594883

​​3210

この方法の詳細については、この回答を参照してください。クリーンアップなどを実行してください。

+0

この回答は非常に徹底したので、私はそれをアップヴォートすることができればと思います。 –

関連する問題