System.Runtime.InteropServices.COMException:“试图多次添加同一字段。” Outlook vsto Addin C#中的错误

时间:2018-06-26 12:16:10

标签: c# vsto outlook-addin

我必须在当前视图中添加Categories列。我在ThissAddIn_Startup方法中有以下代码。

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    outlookNameSpace = this.Application.GetNamespace("MAPI");
    inbox = outlookNameSpace.GetDefaultFolder(
                    Microsoft.Office.Interop.Outlook.
                    OlDefaultFolders.olFolderInbox);
    items = inbox.Items;
    items.Sort("[ReceivedTime]", true);
    Outlook.TableView CurView = ((Outlook.TableView)inbox.CurrentView);
    var viewField = CurView.ViewFields.Add("Categories");
    var columnFormat = viewField.ColumnFormat;
    columnFormat.Align = Outlook.OlAlign.olAlignRight;
    columnFormat.Width = 10;
    CurView.Save();
    CurView.Apply();
}

运行此代码后,我无法向视图添加Categories列。 任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

怎么样:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    outlookNameSpace = this.Application.GetNamespace("MAPI");
    inbox = outlookNameSpace.GetDefaultFolder(
                    Microsoft.Office.Interop.Outlook.
                    OlDefaultFolders.olFolderInbox);
    items = inbox.Items;
    items.Sort("[ReceivedTime]", true);
    Outlook.TableView CurView = ((Outlook.TableView)inbox.CurrentView);
    var viewField = CurView.ViewFields["Categories"];
    var columnFormat = viewField.ColumnFormat;
    columnFormat.Align = Outlook.OlAlign.olAlignRight;
    columnFormat.Width = 10;
    CurView.Save();
    CurView.Apply();
}

如果可行,我建议您修改代码以检查是否存在Categories字段,如果不存在则添加它...或者,您可以删除所有列并仅添加所需的列:

// remove all columns 

while (CurView.ViewFields.Count > 1) 
{ 
  CurView.ViewFields.Remove(1); 
} 

// re-add needed columns 
CurView.ViewFields.Add("Categories"); 
CurView.ViewFields.Add("ReceivedTime"); 
CurView.ViewFields.Add("Subject"); 

答案 1 :(得分:-1)

您需要检查当前视图中是否已经显示了特定字段。例如,尝试在Outlook中运行以下VBA宏:

Sub DemoViewFieldsAdd() 
  Dim oTableView As Outlook.TableView    
  Dim oViewFields As Outlook.ViewFields 
  Dim oViewField As Outlook.ViewField 
  Dim oInbox As Outlook.folder 

  Set oInbox = Application.Session.GetDefaultFolder(olFolderInbox)

  If oInbox.CurrentView.ViewType = olTableView Then 
    Set oTableView = oInbox.CurrentView 
    Set oViewField = oTableView.ViewFields("Categories") 
    If oViewField Is Nothing Then 
      Set oViewField = oTableView.ViewFields.Add("Categories") 
    End If 
  End If 
End Sub