2017-11-13 1 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 스크립팅에 아직 익숙하지 않기 때문에 그 이유를 모르겠습니다. 난 그냥 대화 상자로 저장을 끝내고 싶어, 괜찮을 것이다. 원본의 끝을 잘라야합니까? (IE는.이 잘라됩니까?

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

을) 당신은이 일을 할 몇 가지 작업을 수행해야

+0

"이 행을 어디에 추가 했습니까?" 'SaveFileDialog.CreatePrompt = True'와'SaveFileDialog.OverwritePrompt = True'를 조사 했습니까? – lit

+0

죄송합니다. 닫기 대화 상자 바로 앞에 추가했습니다. –

+1

winforms 어셈블리를 추가 했습니까? 예 : 'Add-Type -AssemblyName System.Windows.Forms' 또한'$ SaveFileDialog.ShowDialog()'를 호출하여 윈도우를 표시 했습니까? – BenH

답변

1

. 첫째, 복사/붙여 넣기 작업이 대화 상자를 만들려면 후 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 통합 문서의 다른 이름으로 저장 방법에에

$SaveFileDialog.FileName 

패스이 필요 검사 할 수 있습니다. https://stackoverflow.com/a/25289878/3594883

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

마지막으로 통합 문서를 닫고 엑셀이 방법에 대한 자세한 내용은이 답변을 참조하십시오. 정리 등을 수행하십시오.

+0

이 답변은 너무 철저히 시험해 보았습니다. –

관련 문제