c#中调用EXCEL,我怎么实现在服务器端生成EXCEL文件,不保存直接到输出到客户端下载?

时间:2021-03-12 17:52:31
网页要生成EXCEL报表供用户下载,我调用了EXCEL,生成后保存到服务器端的某个目录,就可以下载,但是我不想保存而直接输出到客户端下载,因为每次都要保存,服务器段就生成太多的文件了。
我目前的代码是:
//调用下面的类
Excel.Application xlApp;
Excel._Workbook xlBook;
Excel._Worksheet xlSheet;
Excel._QueryTable xlQryTable;
Excel.Range rans;
Excel.Range ran;

。。。。。生成文件后

//输出到客户端的代码
xlBook.SaveCopyAs(Server.MapPath(".") + "\\aaa.xls");
string path = Server.MapPath("aaa.xls");
System.IO.FileInfo file = new System.IO.;
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
 // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度 
Response.AddHeader("Content-Length", file.Length.ToString());

// 指定返回的是一个不能被客户端读取的流,必须被下载 
Response.ContentType = "application/ms-excel";

// 把文件流发送到客户端 
Response.WriteFile(file.FullName);
// 停止页面的执行 
Response.End();

6 个解决方案

#1


private void StringW(DataGrid dg)
{
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
dg.RenderControl(htw);
Response.Write(sw.ToString());
htw.Close();
sw.Close();
Response.End();
}

#2


我不是用上面的方法的,而是调用EXCEl的控件的,因为上面的导出来的有HTML代码的,到时候不能导入的。

#3


不保存也能下載?
你可不可以這樣,每次生成一個新的下載之前刪掉上一次的excel文件。

#4


up

#5


我的项目中是在客户端生成EXCEL效果不错

#6


mark

#1


private void StringW(DataGrid dg)
{
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
dg.RenderControl(htw);
Response.Write(sw.ToString());
htw.Close();
sw.Close();
Response.End();
}

#2


我不是用上面的方法的,而是调用EXCEl的控件的,因为上面的导出来的有HTML代码的,到时候不能导入的。

#3


不保存也能下載?
你可不可以這樣,每次生成一個新的下載之前刪掉上一次的excel文件。

#4


up

#5


我的项目中是在客户端生成EXCEL效果不错

#6


mark