2017-06-09 2 views
0

Je suis en train d'envoyer l'e-mail avec fichier Excel joint à l'aideEnvoyer l'e-mail avec l'aide datatable Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel 

et je changer mon datatable d'exceller et d'essayer d'envoyer l'e-mail avec cette fichier. Mais ils donnent ces erreurs.

Erreur: System.Runtime.InteropServices.COMException: Impossible d'accéder à 'My_Data.xls'.

Ceci est le 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); 
    } 
} 

Répondre

0

Nécessité de créer l'élément de fixation, essayez de remplacer

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

avec

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

Ils me donnent le message d'erreur: System.Runtime.InteropServices.COMException: Impossible d'accéder à 'My_Data.xls'. sur cette partie "workbook.SaveAs (" My_Data.xls ",," – Scarlett

+0

c'est autorisations sur le dossier où vous essayez d'enregistrer le fichier, peut-être l'enregistrer dans le dossier temp, (peut-être. 'Path.GetTempPath() + " My_Data.xls "" .Aussi après le SaveAs (...) mieux pour fermer le classeur (ie 'workbook.Close()') – Rob

+0

Wow! Lorsque je change le chemin de la température, cela fonctionne.Intéressant! Merci Rob. – Scarlett

0

Essayez d'enregistrer votre classeur, puis ouvrez/attach:

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

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

Merci @ SchwartBrian. Cela m'aide :) – Scarlett