C#用COM导出Excel时,Excel不保存在服务器上,用Session保存Excel内容,直接给客户端下载 sessionexcel 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把Excel.Application对象放到session里当然不对。Excel没有保存到内存的功能,只能保存到文件。需要有个临时文件,让excel保存到临时文件,然后读临时文件到内存,放到session里,再删掉临时文件。(不知道这样保存到session里还有没有意义了...) Excel.Application对象放到session里主要是为了不在服务器端生成Excel文件。 额,Excel.Application这东西我印象中没有save2Stream 功能,所以你只能先存临时文件,然后在读出streamps:在csdn下载频道输入aspose.cell你可以找到更容易的东西,当然他是可以输出成stream滴 难道只有先存临时文件,再读出这种方法吗?没有直接把Excel文件提供客户端的吗?因为表格很复杂,如果重新在用其他的方法的话,就太麻烦了,又要重新设置格式 重新设置格式??设置什么格式?你就是把保存到session简单的修改为saveAs(路径)然后将文件下载到客户端,不就完了生成excel的部分完全不需要任何改动 Excel.Application myExcel = new Excel.Application(); myExcel.Visible =false; myExcel.DisplayAlerts = false; _Workbook myBook; myBook = myExcel.Workbooks.Add(true); _Worksheet mySheet; //9-30 mySheet= (_Worksheet)myBook.ActiveSheet; Excel.Range r = (Range)mySheet.get_Range("A1", "M35"); r.HorizontalAlignment = XlHAlign.xlHAlignCenter; //设置字体在单元格内的对齐方式 r.EntireColumn.AutoFit(); //自动调整列宽 r.WrapText = true; //文本自动换行 r.Borders.LineStyle = 1; Excel的赋值等。 myBook.SaveAs(Server.MapPath(filename));//修改为Saveas myBook.Close(false, null, false); System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook); myBook = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel); mySheet = null; //myExcel.Quit(); myExcel = null; GC.Collect();下载页面: System.IO.FileStream fileResult = System.IO.File.OpenRead(filepath); byte[] buffer = new byte[fileResult.Length]; fileResult.Read(buffer, 0, buffer.Length); fileResult.Close(); File.Delete(filepath);//这句话加入就会出现找不到文件,如果没有这句就导出成功 Response.Clear(); Response.ClearContent(); Response.Buffer = true; Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlPathEncode(name)); Response.ContentEncoding = System.Text.Encoding.Default; Response.OutputStream.Write(buffer,0,buffer.Length); fileResult.Close(); // System.IO.File.Delete(filepath);//这句话加入就会出现找不到文件,如果没有这句就导出成功。 Response.Flush(); Response.End(); 现在如果没有 File.Delete(filepath);//这句话 把程序发布到服务器,点击导出按钮没反应在本地测试是可以的各位大神可以帮帮忙解决一下吗?非常感谢! 服务器com和iis权限要配置,自己搜去吧,比较复杂,无数问题。 File.Delete(filepath);//这句话加入就会出现找不到文件,如果没有这句就导出成功废话吗,你先把saveAs的文件删除了,还下载什么啊如何从服务器下载文件到客户端,这个代码很简单,不要拍脑袋想,把文件流来回转没什么意义 void downloadfile(string s_path) { System.IO.FileInfo file = new System.IO.FileInfo(s_path); HttpContext.Current.Response.ContentType = "application/ms-download"; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Type", "application/octet-stream"); HttpContext.Current.Response.Charset = "utf-8"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8)); HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString()); HttpContext.Current.Response.WriteFile(file.FullName); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.End(); } 为什么要删?你如何确定用户已经下载过了?正确的做法是:string fileName = DateTime.Now.ToString("MMdd_HHmmss") + "_XXXX.xlsx";string excelpath = Server.MapPath("..") + Tools.GetDownloadDir(); //获取存放excel目录用系统时间命名文件,保存Excel到临时目录。定期清理临时文件夹。 服务器com和iis权限要配置,自己搜去吧,比较复杂,无数问题。真的是Com权限配置有问题现在已经解决了!谢了! 为什么我的Microsoft Visual Studio 2008一直安装失败? 求助,关于用GirdView控件做删除信息功能的问题 滑动条相关的事件是什么?? C#操作华表 dataset删除数据库记录 使用Socket自定义通讯协议的烦恼 请帮个忙,如何实现一个模糊查询的功能? 关于IE类 请求帮忙 高手帮忙解决一下 做为一个程序员,数据库到底要学到一个什么深度呀!!!!!迷茫中! C#运行的时候提示“无法加载DLL(XXXX.dll)”,DllImport设置绝对路径后就不报错了。 关于c# 2进制数据高位和低位的问题
你就是把保存到session简单的修改为saveAs(路径)
然后将文件下载到客户端,不就完了
生成excel的部分完全不需要任何改动
myExcel.Visible =false;
myExcel.DisplayAlerts = false;
_Workbook myBook;
myBook = myExcel.Workbooks.Add(true);
_Worksheet mySheet; //9-30
mySheet= (_Worksheet)myBook.ActiveSheet;
Excel.Range r = (Range)mySheet.get_Range("A1", "M35");
r.HorizontalAlignment = XlHAlign.xlHAlignCenter; //设置字体在单元格内的对齐方式
r.EntireColumn.AutoFit(); //自动调整列宽
r.WrapText = true; //文本自动换行
r.Borders.LineStyle = 1;
Excel的赋值等。
myBook.SaveAs(Server.MapPath(filename));//修改为Saveas
myBook.Close(false, null, false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
myBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
mySheet = null;
//myExcel.Quit();
myExcel = null;
GC.Collect();
下载页面:
System.IO.FileStream fileResult = System.IO.File.OpenRead(filepath);
byte[] buffer = new byte[fileResult.Length];
fileResult.Read(buffer, 0, buffer.Length);
fileResult.Close();
File.Delete(filepath);//这句话加入就会出现找不到文件,如果没有这句就导出成功
Response.Clear();
Response.ClearContent();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlPathEncode(name));
Response.ContentEncoding = System.Text.Encoding.Default;
Response.OutputStream.Write(buffer,0,buffer.Length);
fileResult.Close();
// System.IO.File.Delete(filepath);//这句话加入就会出现找不到文件,如果没有这句就导出成功。
Response.Flush();
Response.End();
废话吗,你先把saveAs的文件删除了,还下载什么啊
如何从服务器下载文件到客户端,这个代码很简单,不要拍脑袋想,把文件流来回转没什么意义
void downloadfile(string s_path)
{
System.IO.FileInfo file = new System.IO.FileInfo(s_path);
HttpContext.Current.Response.ContentType = "application/ms-download";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Type", "application/octet-stream");
HttpContext.Current.Response.Charset = "utf-8";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
HttpContext.Current.Response.WriteFile(file.FullName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.End();
}
你如何确定用户已经下载过了?
正确的做法是:string fileName = DateTime.Now.ToString("MMdd_HHmmss") + "_XXXX.xlsx";
string excelpath = Server.MapPath("..") + Tools.GetDownloadDir(); //获取存放excel目录
用系统时间命名文件,保存Excel到临时目录。
定期清理临时文件夹。