System.Runtime.InteropServices.COMException: «Предпринята попытка добавить одно и то же поле более одного раза». ошибка в outlook vsto addin c # - PullRequest
0 голосов
/ 26 июня 2018

Мне нужно добавить 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 голосов
/ 26 июня 2018

Вам необходимо проверить, представлено ли конкретное поле в текущем представлении. Например, попробуйте запустить следующий макрос VBA в Outlook:

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 
0 голосов
/ 26 июня 2018

Как насчет:

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"); 
...