对话框将文件保存为现有脚本

我有下面的代码,但我试图让它提示用户使用dynamic对话框来获取输出文件“另存为”。

$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() 

所以我尝试join:

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

但似乎没有工作。 不知道为什么,也许是因为我仍然是新手的PowerShell脚本。 我只是想把它保存为对话框结束,会没事的。 我是否必须将原来的结尾切掉? (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 

复制/粘贴操作后,创build对话框并设置一些属性

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

在显示对话框时,您将需要决定要执行的操作。 你是否允许用户取消,如何处理空path,不正确的扩展等…为了举例,我将继续显示它,直到select一条path。 我不认同这是一个好的select。

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

然后,您可以使用FileName属性访问选定的path,并对其执行检查

 $SaveFileDialog.FileName 

将其传递给Excel工作簿的SaveAs方法。 有关此方法的详细信息,请参阅此答案https://stackoverflow.com/a/25289878/3594883

 $WorkBook.SaveAs($SaveFileDialog.FileName, 51, [Type]::Missing, [Type]::Missing, $false, $false, 1, 2) 

最后closures你的工作簿和Excel。 执行清理等