2017-03-14 2 views
1

ich eine C# Console App erstellen möchten (oder eine Dienstleistung - nicht sicher, wie ein Dienst noch zu entwickeln), dass: KenntOutlook neue E-Mail Excel Reihe

1), wenn eine neue E-Mail wird im Posteingang empfangen> LOTALogs Mappe. Diese E-Mail wird von einer mobilen Anwendung gesendet und enthält einen Anhang und einige Probleme, die der Kunde erfahren hat.

2) Nimmt den neuen E-Mail-Inhalt, der durch Kommas getrennt ist, analysiert und fügt den Inhalt in ein Excel-Arbeitsblatt ein, in dem die Spalten bereits eingerichtet sind.

verwaltet I zu erzeugen:

1) Der Parser:

public static string[] emailContentsArray() 
    { 
     string content = "Username = Customer1,User ID = 362592,Unit ID = 805618,Date = Mar 12, 2017,Device = Android LGE LG-H990,OS version = 7.0 (API 24),App version = 1.0.0.56,Description = some description,Message = some message"; 
     string[] contentArray = content.Split(','); 

     // Case where date format includes another comma 
     if (contentArray.Length > 10) 
     { 
      // Parsing headers 
      contentArray[0] = contentArray[0].Substring(11); 
      contentArray[1] = contentArray[1].Substring(10); 
      contentArray[2] = contentArray[2].Substring(10); 
      contentArray[3] = contentArray[3].Substring(7) + ", " + contentArray[4].Substring(1); 
      contentArray[4] = contentArray[5].Substring(9); 
      contentArray[5] = contentArray[6].Substring(13); 
      contentArray[6] = contentArray[7].Substring(14); 
      contentArray[7] = contentArray[8].Substring(14); 
      contentArray[8] = contentArray[9].Substring(10); 
      contentArray[9] = null; 

      for (int i = 0; i < contentArray.Length; i++) 
      { 
       Console.Write(contentArray[i] + ","); 
      } 
     } 
     //else 
     //{ 

     //} 
     return contentArray; 
    } 

2) zugegriffen, um den Ordner und gezählt, um die Anzahl der Elemente:

public static string[] emailContent() 
    { 
     string[] content = null; 
     Microsoft.Office.Interop.Outlook.Application app = null; 
     Microsoft.Office.Interop.Outlook.NameSpace ns = null; 
     Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null; 
     Microsoft.Office.Interop.Outlook.MAPIFolder logFolder = null; 

     app = new Microsoft.Office.Interop.Outlook.Application(); 
     ns = app.GetNamespace("MAPI"); 
     inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
     logFolder = app.ActiveExplorer().CurrentFolder = inboxFolder.Folders["LOTALogs"]; 
     int itemCount = logFolder.Items.Count; 

     Console.WriteLine("\n\nFolder Name: {0}, Num Items: {1}\n", logFolder.Name, itemCount); 

     return content; 
    } 

3) geöffnet und gedruckt die Inhalt der Tabelle:

 Excel.Application xlApp = new Excel.Application(); 
     string path = "C:\\SomeUser\\BugReports"; 
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@path); 
     Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
     Excel.Range xlRange = xlWorksheet.UsedRange; 

     for (int i = 1; i <= xlRange.Row + xlRange.Rows.Count - 1; i++) 
     { 
      for (int j = 1; j <= xlRange.Column + xlRange.Columns.Count - 1; j++) 
      { 
       if (j == 1) 
        Console.Write("\r\n"); 

       if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null) 
        Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t"); 
      } 
     } 
     xlWorkbook.Save(); 
     xlWorkbook.Close(); 
     xlApp.Quit(); 

     Console.ReadLine(); 

Ich bin jetzt ein wenig verloren :)

Ich brauche noch:

1) Erstellen Sie ein Ereignis-Listener (ich glaube, das ist, was es heißt) so kann ich die E-Mail-Körper-Parser sagen, um die E-Mail gehen holen Inhalt.

2) Extrahieren Sie den E-Mail-Text aus der E-Mail.

erhielt diese

Console.WriteLine(logFolder.Items[1].Body); 

3) Nehmen Sie die E-Mail-Inhalte mit und an die Tabelle anhängen.

4) Sollte ich dies als Windows Service erstellen?

PS - Ich bin kein Entwickler, nur mit Code herumspielen und versuchen, so effizient wie möglich zu sein. Ich möchte diese Tabelle nicht manuell ausfüllen, wenn eine technologische Lösung in Sicht ist. Bitte kommentieren Sie, wenn Sie Vorschläge haben, mit dem Code effizienter zu arbeiten und ihn anders zu modellieren.

Antwort

2

Sieht solide für mich. Ich verzichte auf den Service, aber es hängt sehr von Ihren Nutzern ab. Wenn Ihr Kunde nicht wirklich "blind" sein will, fügt er viele ungerechtfertigte Komplikationen hinzu.

Was an der Tabelle anhängt ...

int lastRow = xlWorksheet.UsedRange.Rows; 
Excel.Range xlRange = xlWorksheet.Cells[lastRow + 1, 1]; 
xlRange.Value = stuffFromInbox; 

wenn Sie nur das Hinzufügen der ein Artikel in der Tabelle, wird dies gut funktionieren. Für Massen-Lese-/Schreiboperationen mit der Tabellenkalkulation (wie Ihre "Geöffnete und gedruckte Inhalte der Tabelle") wäre es viel effizienter, die Value oder Value2 der gesamten Range in eine object[,] zu lesen. Dann iteriere durch das lokale Array.

Verwandte Themen