日期:2014-05-20  浏览次数:20788 次

使用Excel.Application 导出Excel的问题
代码如下,问题是我第次次导出,同一应用程序但不同的界面,导出的数据会覆盖上一次导出的Excel表。我保存的文件是不同的。
就是说我两次导出,保存为不同的文件,但前一次的数据被覆盖为后一次的数据。
我用Excel打开文件再导出,看到错误信息是不能使用sheel1.xlsx. 是不是我的Application 还没有退出?要怎么样才能退出呢
C# code
string filePath = "";
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;                
            }
            filePath = saveFileDialog1.FileName;
            Microsoft.Office.Interop.Excel.Application app =
                 new Microsoft.Office.Interop.Excel.ApplicationClass();
            try
            {
                app.Visible = false;
                Workbook wBook = app.Workbooks.Add(true);
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                if (inventList.Count>0)
                {
                    int row = 0;
                    row = inventList.Count;                    
                    for (int i = 0; i < row; i++)
                    {
                        wSheet.Cells[i+2, 1] = inventList[i].PartNo;
                       
                    }                    
                    wSheet.Cells[1, 1] = "产品编号";
                                   }
                //设置禁止弹出保存和覆盖的询问提示框   
                app.DisplayAlerts = false;
                app.AlertBeforeOverwriting = false;
                //app.Workbooks[1].Close(true, filePath, null);
                app.Workbooks[1].Save();
                app.Save(filePath);
                app.SaveWorkspace(filePath);
         
                app.Quit();
                app = null;
                               
                MessageBox.Show("数据导出成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("导出数据时出现错误!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }


------解决方案--------------------
我做过vb导出数据。我关闭的时候把Workbook和Worksheet也关闭了。
不知道这个对你有没有什么影响。。。。
------解决方案--------------------
wBook.close()不知道java是不是也有
------解决方案--------------------
还有我在vb里打开excel的时候都是将路径传进去的
Set gsXlApp = CreateObject("Excel.Application")
gsXlApp.DisplayAlerts = False
Set gsXlBook = gsXlApp.Workbooks.Open(filePath, UpdateLinks:=0)
Set gsXlSheet = gsXlBook.Sheets(1)

保存的时候也是直接用wBook.save来保存
感觉数据被覆盖的问题就是book和sheet没有关闭,导致重用,结果第二次就录入时第一次的数据从新被录入。
只是个人意见,不知道对不对。

If Not (gsXlSheet Is Nothing) Then
Set gsXlSheet = Nothing
End If

If Not (gsXlBook Is Nothing) Then
gsXlBook.Close
Set gsXlBook = Nothing
End If

If Not (gsXlApp Is Nothing) Then
gsXlApp.Application.IgnoreRemoteRequests = False
gsXlApp.Quit
Set gsXlApp = Nothing
End If
这是我vb关闭用的,上面是我声明用的。
------解决方案--------------------
再看看是不是数据问题,两回的数据本身都是一样的。。。