1

サーバーに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);

提案をよろしくお願いします。前もって感謝します。

4

5 に答える 5

1

これが問題であることはわかりませんがClose、ワークブックは決してありません。

workbook.Close();
application.Quit();
于 2013-08-27T13:28:57.620 に答える
0

Excel com の問題のリリースに関する既知の問題があります。

http://www.codeproject.com/Articles/9328/Release-Excel-Objectを参照してください。

于 2013-08-27T13:38:58.330 に答える
0

皆様、ご回答ありがとうございます。しかし、私の問題は解決しました。正直なところ、正確な理由はわかりませんが、サーバー上でExcelファイルを作成/保存した後、電子メールの添付ファイルを送信する前に、行の下に追加しただけです。

System.Threading.Thread.Sleep(1000);
于 2013-08-28T10:21:12.513 に答える