小弟从事C#不久,很多东西还要学习,请教大家一个问题.
我现在要从DataTable生成一个excel文档,通过按钮来打开,但是发现如果只是新建一个excel对象
Excel.Application xApp=New Excel.Application();给它赋值之后使用xApp.Visiable=true;来显示.
碰到的问题就是,这样点按钮就直接打开,而没有下载的提示框.
但是使用FileInfo fileInfo = new FileInfo("@@###");来实现下载就必须要提供路径,而新建的这个excel对象没有保存的话应该还在内存中,没办法得到有效的路径.而我又不想使用book.Save()之类的方法直接保存到用户的文件系统中,而且这样也显然不合理.所以思来想去,我就使用book.SaveAs(#@#@)存到服务器的文件夹,再调用下载,然后再删除服务器中刚才新保存的excel文件.请问这样是否合适?会带来什么样的问题?谢谢大家了!下面是我的code:
            Excel.Application xApp = new Excel.ApplicationClass();
            
            //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
            //Excel.Workbook xBook = xApp.Workbooks._Open(Server.MapPath("/Scripts/NewExcel.xlsx"),Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            Excel.Workbook xBook = xApp.Workbooks.Add(Missing.Value);
            Excel.Worksheet xSheet = (Excel.Worksheet)xBook.Worksheets[1];
            xSheet.Cells[1, 1] = "SBbbbB11111";
            xBook.SaveAs(Server.MapPath("/Scripts/sb.xlsx"),Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
            xApp.Workbooks.Close();
            xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xApp);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xSheet);
            GC.Collect();            FileInfo fileInfo = new FileInfo(Server.MapPath("/Scripts/sb.xlsx"));
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + "Hello.xlsx");
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            File.Delete(Server.MapPath("/Scripts/sb.xlsx"));
            Response.End();