将Excel文件作为附件发送时出错
本文关键字:出错 Excel 文件 | 更新日期: 2023-09-27 18:29:07
我正试图在服务器上创建并保存一个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);
请提供建议。谢谢,提前。
我不知道这是问题所在,但您从未Close
您的工作簿。
workbook.Close();
application.Quit();
这可能是因为您可能是使用MS excel打开excel文件的,或者您是读取excel的任何其他程序。请检查您的任务管理器并关闭所有应用程序,然后重新打开项目并重试。
根据最新评论,当你这样做的时候
- 创建excel文件
- 发送excel文件
- 删除excel文件
我想你正试图删除一个正在发送的文件。因此,请确保只有在发送完成后才开始删除文件。
样本代码
SmtpClient smtp = new SmtpClient(objBO.SmtpDomain);
try{
smtp.Send(message);
}
catch{
}
finally{
//deletes the file.
}
发布excel-com问题存在已知问题
请参阅http://www.codeproject.com/Articles/9328/Release-Excel-Object
In.net4附件实现IDisposable,因此您应该确保您有一个using语句,以便在超出范围时处理对象。
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);
感谢大家的回复。但我的问题解决了。老实说,我不知道确切的原因,但我所做的只是在服务器上创建/保存excel文件后和发送电子邮件附件之前添加到下面的行。
System.Threading.Thread.Sleep(1000);