2017-06-09 3 views
0

Ich versuche, die E-Mail mit angehängter Excel-Datei zu senden mitSenden Sie die E-Mail mit Datentabelle Microsoft.Office.Interop.Excel mit

using Microsoft.Office.Interop.Excel 

und ich meine Datentabelle ändern zu übertreffen und versuchen, die E-Mail mit, dass schicken Datei. Aber sie geben diese Fehler.

Fehler: System.Runtime.InteropServices.COMException: kann nicht auf "My_Data.xls" zugreifen.

Dies ist der Code.

void SendEmail() 
{ 
    //get the data from database 
    DataTable data = GetData(); 

    // Create an Excel object and add workbook... 
    Excel.ApplicationClass excel = new Excel.ApplicationClass(); 
    Excel.Workbook workbook = excel.Application.Workbooks.Add(true); 

    // Add column headings 
    int iCol = 0; 
    foreach (DataColumn c in data.Columns) 
    { 
     iCol++; 
     excel.Cells[1, iCol] = c.ColumnName; 
    } 
    // for each row of data... 
    int iRow = 0; 
    foreach (DataRow r in data.Rows) 
    { 
     iRow++; 

     // add each row's cell data... 
     iCol = 0; 
     foreach (DataColumn c in data.Columns) 
     { 
      iCol++; 
      excel.Cells[iRow + 1, iCol] = r[c.ColumnName]; 
     } 
    } 

    // Global missing reference for objects we are not defining... 
    object missing = System.Reflection.Missing.Value; 

    // If wanting to Save the workbook... 
    workbook.SaveAs("My_Data.xls", 
    Excel.XlFileFormat.xlOpenXMLWorkbook, missing, missing, 
     false, false, Excel.XlSaveAsAccessMode.xlNoChange, 
     missing, missing, missing, missing, missing); 

    String from = "aa.gmail.com"; 

    String to = "bb.gmail.com"; 

    using (MailMessage mm = new MailMessage(from, to)) 
    {  
     SmtpClient smtp = new SmtpClient(); 
     mm.Subject = "List"; 
     //I have no idea for this part 
     mm.Attachments.Add("My_Data.xls"); 
     mm.IsBodyHtml = true; 

     smtp.Host = "smtp.gmail.com"; 
     smtp.EnableSsl = true; 
     System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(); 
     credentials.UserName = "[email protected]"; 
     credentials.Password = "1234"; 
     smtp.UseDefaultCredentials = true; 
     smtp.Credentials = credentials; 
     smtp.Port = 587; 
     smtp.Send(mm); 
    } 
} 

Antwort

0

Notwendigkeit, das Befestigungselement zu erstellen, versuchen

mm.Attachments.Add(@"My_Data.xls"); 

mit

mm.Attachments.Add(new Attachment(@"My_Data.xls")); 
+0

Sie geben mir die Fehlermeldung: System.Runtime.InteropServices.COMException: Kann nicht auf 'My_Data.xls' zugreifen. auf diesem Teil "workbook.SaveAs (" My_Data.xls ",," – Scarlett

+0

das ist Berechtigungen für den Ordner, in dem Sie versuchen, die Datei zu speichern, vielleicht speichern Sie sie in den Temp-Ordner, (vielleicht. 'Path.GetTempPath() + " My_Data.xls "'. Auch nach der SaveAs (...) am besten, um die Arbeitsmappe zu schließen (dh' workbook.Close() ') – Rob

+0

Wow! Wenn ich den Pfad zu Temp ändern, funktioniert es. Interessant! Danke Rob. – Scarlett

0

Versuchen Sie, Ihre Arbeitsmappe zu speichern, und dann öffnen/attach:

workbook.SaveAs(@"path\to\workbook.xlsx"); 
    workbook.Close(); 

    mailObject.Attachments.Add(@"path\to\workbook.xlsx"); 
+0

Dank ersetzt @ SchwartBrian. Es hilft mir :) – Scarlett

Verwandte Themen