Excel到新Outlook联系人:数据正确但未阅读

sxissh06  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(136)

我写了下面的脚本,它的工作是获取一个(格式良好的)Excel文件,然后在Outlook中逐行创建新的联系人。
我运行的是Windows 11,所有的东西都是最近更新的(实际上是今天早上)。
在PowerShell中(以管理员身份运行),脚本运行时不会引发任何错误。输出到屏幕的数据表明Excel文件正在正确读取。
在Outlook中创建新联系人。
但是,**没有任何数据正在读取到联系人中。如果您能解释一下我错过了什么,我将不胜感激。**可能是新联系人没有正确保存以保留数据?

# Create an Excel application object
$excel = New-Object -ComObject Excel.Application

# Open the workbook
$workbook = $excel.Workbooks.Open("C:\Users\DW-ECM\Scripts\test_xl.xlsx")

# Select the first worksheet
$worksheet = $workbook.Worksheets.Item(1)

# Define the range of cells that contain the data
$range = $worksheet.UsedRange

# Creates a new instance of the Outlook application object 
# using the COM (Component Object Model) interface in PowerShell
$outlook = New-Object -ComObject Outlook.Application

Write-Host "Selected workbook: $($workbook.Name)"
Write-Host "Selected worksheet: $($worksheet.Name)"

# Loop through each row in the range
for ($i = 2; $i -le $range.Rows.Count; $i++) {
    # Get the current row
    $row = $range.Rows.Item($i)
    
    # Create a new contact object
    $contact = $outlook.CreateItem(2)

    # Set the properties of the contact object
    $contact.Account = $row.Cells.Item(1).Value2
    $contact.Business2TelephoneNumber = $row.Cells.Item(2).Value2
    $contact.BusinessAddress = $row.Cells.Item(3).Value2
    $contact.CompanyName = $row.Cells.Item(4).Value2
    $contact.Department = $row.Cells.Item(5).Value2
    $contact.Email1Address = $row.Cells.Item(6).Value2
    $contact.FirstName = $row.Cells.Item(7).Value2
    $contact.JobTitle = $row.Cells.Item(8).Value2
    $contact.LastName = $row.Cells.Item(9).Value2
    $contact.MobileTelephoneNumber = $row.Cells.Item(10).Value2
    $contact.User1 = $row.Cells.Item(11).Value2
    $contact.User2 = $row.Cells.Item(12).Value2
    
    # Save the contact to Outlook
    $contact.Save()

    Write-Host "Creating contact for $($row.Cells.Item(8).Value2) $($row.Cells.Item(10).Value2)"
}

# Close the workbook and quit Excel
$workbook.Close()
$excel.Quit()

# Save and close the Outlook instance
$outlook.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook)
Remove-Variable outlook

# Stop the Outlook process
Stop-Process -ProcessName OUTLOOK -Force
  • 编辑的清晰度,我要求的帮助和一个错字。
gjmwrych

gjmwrych1#

作为管理员运行是一个坏主意- Outlook是一个单体,如果它已经运行,您的脚本将附加到现有的示例。COM系统将拒绝在不同安全上下文中运行的两个应用程序(PS和Outlook)之间编组调用。

yhived7q

yhived7q2#

您的PowerShell脚本(其中两个Office应用程序- Excel和Outlook是自动化的)看起来不错,我没有看到任何奇怪的地方。请注意,您不能同时运行Outlook进程的两个示例(与Excel不同),因此,如果它已经运行,您将获得一个正在运行的示例。这意味着如果您已经打开Outlook并由用户运行(没有管理权限),您以管理权限从命令行(或任何其他shell)运行的代码将无法连接到正在运行的Outlook示例,并且不会添加联系人。
在PowerShell中(以管理员身份运行),脚本运行时不会引发任何错误。

确保在相同的安全上下文下运行所有应用程序和PowerShell脚本以便能够在Outlook中添加联系人。这意味着当您以管理员身份运行脚本时,Outlook应关闭(不运行)。

相关问题