浏览器上输入excel2007文件,就是在浏览器可以保存excel2007文件,我把IWorkbook写到内存里,之后总是提示流已经关闭了。不能在输出了.
string strPath=@"F:\a.xlsx";
XSSFWorkbook xssfworkbook = new XSSFWorkbook(strPath);
//加了数据之后
MemoryStream ms = new MemoryStream();
xssfworkbook.write(ms);//写到内存流
再对ms操作的时候,提示ms已经关闭了,输出不到浏览器中
1、贴代码;
2、NPOI对07的支持比较弱。
string strPath=@"F:\a.xlsx";
XSSFWorkbook xssfworkbook = new XSSFWorkbook(strPath);
//加了数据之后
MemoryStream ms = new MemoryStream();
xssfworkbook.write(ms);//写到内存流
再对ms操作的时候,提示ms已经关闭了,输出不到浏览器中
@fulai_xy: 换个方式下载可否?Response.Write(filePath)
@幻天芒: 可以啊 ,能写主要的代码吗??
@fulai_xy: Response.WriteFile(filePath)就是主要代码。
FileInfo fileInfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); 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(); Response.End();
@幻天芒: 哦,这样也可以吧
我是这样的
MemoryStream ms = new MemoryStream();
workbook.Write(ms);//调用这个后会关于文件流,在HSSFWorkbook不会关闭所以在处理时应注意
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("22.xlsx", Encoding.UTF8).ToString());
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
//Response.Write(ms.ToString());
Response.BinaryWrite(ms.ToArray());
不过有个问题 ,打开以保存的excel文件,总是会提示是否恢复此工作的内容
@fulai_xy: 试试去掉编码选项...还有ContentType,这两个会影响。
你应该把文件输出的那段代码贴出来