2013-08-27 39 views
1

我想在服務器上創建並保存excel文件,並稍後將其作爲文檔發送。在添加附件時,我收到了錯誤。任何人有任何想法,我該如何解決它?將Excel文件作爲附件發送時出錯

The process cannot access the file because it is being used by another process 

請找我正在使用的是創建Excel文件和返回路徑將在以後添加文件的代碼,:

Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
      string attachmentPath = Convert.ToString(ConfigurationManager.AppSettings["AttachmentPath"] as object); 
      string path = attachmentPath + FileName; 
      excel.Application.Workbooks.Add(true); 

      int ColumnIndex = 0; 
      foreach (DataColumn col in table.Columns) 
      { 
       ColumnIndex++; 
       excel.Cells[1, ColumnIndex] = col.ColumnName; 
      } 
      int rowIndex = 0; 
      foreach (DataRow row in table.Rows) 
      { 
       rowIndex++; 
       ColumnIndex = 0; 
       foreach (DataColumn col in table.Columns) 
       { 
        ColumnIndex++; 
        excel.Cells[rowIndex + 1, ColumnIndex] = row[col.ColumnName].ToString(); 
       } 
      } 
      excel.DisplayAlerts = false; 
      excel.ActiveWorkbook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, 
      false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);     

      excel.Quit(); 
      return path + ".xls"; 

下面是我用上面的路徑添加爲代碼附件的電子郵件:

  if (attachmentPaths != null && attachmentPaths.Length > 0) 
      { 
       foreach (string path in attachmentPaths) 
       { 
        if (!string.IsNullOrEmpty(path)) 
         message.Attachments.Add(new System.Net.Mail.Attachment(path)); 
       } 
      } 
      SmtpClient smtp = new SmtpClient(objBO.SmtpDomain); 
      smtp.Send(message); 

請提供建議。提前致謝。

+0

我知道這是一個愚蠢的問題,但你沒有在Excel中打開的文件或任何偶然的機會嗎? – ars265

+0

不,我正在創建代碼中的excel文件,並在下一刻將它作爲附件發送。在後面的部分中,我應該刪除創建的同一個excel文件。所以沒有問題,同時手動打開它。 – ABC

+0

您的網站可能運行在不是所有權限的帳戶下 – meda

回答

0

謝謝大家的回覆。但我的問題解決了。老實說,我不知道確切的原因,但是我做的只是在創建/保存excel文件到服務器上之後和發送電子郵件附件之前添加到下面的行中。

System.Threading.Thread.Sleep(1000); 
0

這可能是因爲您可能會使用MS Excel打開Excel文件,或者您是任何其他程序來閱讀Excel。檢查您的任務管理器並關閉所有應用程序並重新打開該項目並重試。

按照最新的評論,而你正在做這樣的

  1. 創建excel文件
  2. 發送excel文件
  3. 刪除Excel文件

我認爲你試圖刪除一個正在發送的文件。所以請確保您只有在發送完成時纔開始刪除文件。

示例代碼

SmtpClient smtp = new SmtpClient(objBO.SmtpDomain); 
     try{ 
     smtp.Send(message); 
     } 
     catch{ 
     } 
     finally{ 
     //deletes the file. 
     } 
+0

謝謝您的回覆,但我也在做同樣的事情。 我得到的錯誤不是在刪除文件時,而是作爲附件添加到電子郵件中。 是否有任何程序使用我可以關閉所有進程訪問此文件之前添加它作爲附件? – ABC

1

我不知道這是問題,但你永遠不Close工作簿。

workbook.Close(); 
application.Quit(); 
+0

這會解決你的問題嗎? – kbvishnu

0

.NET 4個的附件實現IDisposable,所以你應該確保你有一個使用語句,這樣的物品設置時超出範圍。

 if (attachmentPaths != null && attachmentPaths.Length > 0) 
      { 
       foreach (string path in attachmentPaths) 
       { 
        if (!string.IsNullOrEmpty(path)) 
        { 
         using(Attachment data = new Attachment(path)) 
         { 
          message.Attachments.Add(data); 
         } 
        }    
       } 
      } 

SmtpClient smtp = new SmtpClient(objBO.SmtpDomain); 
smtp.Send(message); 
相關問題