【发布时间】:2018-04-26 14:54:03
【问题描述】:
我有以下代码,但我试图让它通过动态对话框提示用户,以将输出文件“另存为”。
$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 脚本还是新手。我只是想让它在另存为对话框中结束,就可以了。我必须把原件的末端剪掉吗? (即,这会被删掉吗?
$Workbook.Close($true)
$Excel.Quit()
while( [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)){}
[gc]::collect()
[gc]::WaitForPendingFinalizers()
)
【问题讨论】:
-
一个问题是“你在哪里添加了这些行?”你调查过
SaveFileDialog.CreatePrompt = True和SaveFileDialog.OverwritePrompt = True吗? -
抱歉,在关闭对话框之前添加了它。
-
您是否添加了 winforms 程序集?例如
Add-Type -AssemblyName System.Windows.Forms也调用了$SaveFileDialog.ShowDialog()来显示窗口?
标签: excel powershell scripting dialog save-as