Powershell | COM对象Excel | 打开前景?
只有在没有configuration邮件帐户时才会出现问题 – 仍然可以获得解决scheme
我需要一些帮助。 我已经发现了这个小脚本的一个非常奇怪的习惯。 我完全不知道为什么会发生这种情况。 如果我运行下面的代码, Microsoft Outlook启动。 只要我不终止 Outlook进程脚本被卡住了! 为什么这个代码会启动Outlook? 我搞不清楚了!
$Path = "C:\test.xls" #Excelvar: $Row = [int] 2 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $true $Excel.DisplayAlerts = $false #Sheets: $ADUsers = "Active Directory Users" $Groups = "Create Groups" $UsertoGroup = "User to groups" $DNS = "DNS" #$Worksheet = $Workbook.Sheets.Add() $checkxls = test-path -pathtype Any $Path if ($checkxls -eq $false) { $wb = $Excel.Workbooks.Add() $wb.Worksheets.add() $wb.SaveAs($Path) $wb.Close() $Excel.Quit()
Thx提前!
Outlook终止后的Powershell输出:
Application : Microsoft.Office.Interop.Excel.ApplicationClass Creator : 1480803660 Parent : System.__ComObject CodeName : _CodeName : Index : 1 Name : Tabelle4 Next : System.__ComObject OnDoubleClick : OnSheetActivate : OnSheetDeactivate : PageSetup : System.__ComObject Previous : ProtectContents : False ProtectDrawingObjects : False ProtectionMode : False ProtectScenarios : False Visible : -1 Shapes : System.__ComObject TransitionExpEval : False AutoFilterMode : False EnableCalculation : True Cells : System.__ComObject CircularReference : Columns : System.__ComObject ConsolidationFunction : -4157 ConsolidationOptions : {False, False, False} ConsolidationSources : DisplayAutomaticPageBreaks : False EnableAutoFilter : False EnableSelection : 0 EnableOutlining : False EnablePivotTable : False FilterMode : False Names : System.__ComObject OnCalculate : OnData : OnEntry : Outline : System.__ComObject Rows : System.__ComObject ScrollArea : StandardHeight : 15 StandardWidth : 10,71 TransitionFormEntry : False Type : -4167 UsedRange : System.__ComObject HPageBreaks : System.__ComObject VPageBreaks : System.__ComObject QueryTables : System.__ComObject DisplayPageBreaks : False Comments : System.__ComObject Hyperlinks : System.__ComObject _DisplayRightToLeft : False AutoFilter : DisplayRightToLeft : False Scripts : System.__ComObject Tab : System.__ComObject MailEnvelope : CustomProperties : System.__ComObject SmartTags : System.__ComObject Protection : System.__ComObject ListObjects : System.__ComObject EnableFormatConditionsCalculation : True Sort : System.__ComObject PrintedCommentPages : 0
这里的问题是,当你运行$wb.Worksheets.add()
它将新的工作表返回到pipe道(这就是为什么当你杀死Outlook时显示工作表属性)。
我相信工作表的MailEnvelope属性是什么导致Outlook打开(如果您存储表并返回MailEnvelope属性,发生相同的行为)。
要解决这个问题,可以存储返回的工作表,使用Out-null cmdlet或将工作表$ws = $wb.Worksheets.add()
为void: $ws = $wb.Worksheets.add()
或$wb.Worksheets.add() | Out-Null
$wb.Worksheets.add() | Out-Null
或[void] $wb.Worksheets.add()
- 如何在指定的terminal会话帐户上打开Excel / Powerpoint,而不是使用最低ID的默认值?
- 发生COMException – 未知名称。 (从HRESULTexception:0x80020006(DISP_E_UNKNOWNNAME))当试图修改现有的Excel文件
- 使用Python的comtypes库将查询表添加到Excel的问题
- 如何获得某个Excel进程的窗口或进程句柄?
- Excel Viewer(XLView)有没有COM API?
- 需要骨架代码来从PythonWin调用Excel VBA
- Excel通过PowerShell的COM对象
- VB.NET / COM Server代码方式比Excel VBA代码慢
- 使一个基于C#的Excel插件运行在最不痛苦的过程之外