NPOI+SharpZipLib实现压缩多个Excel下载

导出excel是再常见不过的功能,其中NPOI是我一直使用的导出excel的框架。你可以猛击这里了解NPOI,最近有这样一个需求,当我想一次性导出多个excel文件时。我想在内存里面压缩后输出到浏览器进行下载。由此接触到了另外一个框架SharpZipLib,猛击这里了解。demo的代码贴在这里,以备后面查阅。

using System;using System.IO;using NPOI.HSSF.UserModel;using NPOI.HPSF;using NPOI.SS.UserModel;

using ICSharpCode.SharpZipLib.Zip;

namespace NpoiAndZip{public partial class ExportDownloadExcel : System.Web.UI.Page    {protected void Page_Load(object sender, EventArgs e)        {        }

protected void btnOK_Click(object sender, EventArgs e)        {string filename = "test.zip";            Response.ContentType = "application/zip";            Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));            Response.Clear();

InitializeWorkbook();            GenerateData();            MemoryStream ms1 = new MemoryStream();            MemoryStream ms2=new MemoryStream();            MemoryStream ms3=new MemoryStream();            ms1 = WriteToStream(hssfworkbook);            ms2 = WriteToStream(hssfworkbook2);            ms3 = WriteToStream(hssfworkbook3);            MemoryStream st = new MemoryStream();using (ZipFile zip = ZipFile.Create(st))            {                zip.BeginUpdate();                StreamDataSource d1=new StreamDataSource(ms1);                StreamDataSource d2 = new StreamDataSource(ms2);                StreamDataSource d3 = new StreamDataSource(ms3);//添加文件                zip.Add(d1, "test1.xls");                zip.Add(d2, "test2.xls");                zip.Add(d3, "test3.xls");                zip.CommitUpdate();            }            Response.BinaryWrite(st.GetBuffer());            Response.End();        }

HSSFWorkbook hssfworkbook;        HSSFWorkbook hssfworkbook2;        HSSFWorkbook hssfworkbook3;        MemoryStream WriteToStream(HSSFWorkbook workbook)        {//Write the stream data of workbook to the root directory            MemoryStream file = new MemoryStream();            workbook.Write(file);return file;        }

void GenerateData()        {            ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");            ISheet sheet2 = hssfworkbook2.CreateSheet("Sheet1");            ISheet sheet3 = hssfworkbook3.CreateSheet("Sheet1");            sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");            sheet2.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");            sheet3.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");int x = 1;for (int i = 1; i <= 15; i++)            {                IRow row = sheet1.CreateRow(i);for (int j = 0; j < 15; j++)                {                    row.CreateCell(j).SetCellValue(x++);                }            }for (int i = 1; i <= 15; i++)            {                IRow row = sheet2.CreateRow(i);for (int j = 0; j < 15; j++)                {                    row.CreateCell(j).SetCellValue(x++);                }            }for (int i = 1; i <= 15; i++)            {                IRow row = sheet3.CreateRow(i);for (int j = 0; j < 15; j++)                {                    row.CreateCell(j).SetCellValue(x++);                }            }        }

void InitializeWorkbook()        {            hssfworkbook = new HSSFWorkbook();            hssfworkbook2 = new HSSFWorkbook();            hssfworkbook3 = new HSSFWorkbook();////create a entry of DocumentSummaryInformation            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();            dsi.Company = "NPOI Team";            hssfworkbook.DocumentSummaryInformation = dsi;

////create a entry of SummaryInformation            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();            si.Subject = "NPOI SDK Example";            hssfworkbook.SummaryInformation = si;

////create a entry of DocumentSummaryInformation            DocumentSummaryInformation dsi2 = PropertySetFactory.CreateDocumentSummaryInformation();            dsi2.Company = "NPOI Team";            hssfworkbook2.DocumentSummaryInformation = dsi2;

////create a entry of SummaryInformation            SummaryInformation si2 = PropertySetFactory.CreateSummaryInformation();            si2.Subject = "NPOI SDK Example";            hssfworkbook2.SummaryInformation = si2;

////create a entry of DocumentSummaryInformation            DocumentSummaryInformation dsi3 = PropertySetFactory.CreateDocumentSummaryInformation();            dsi3.Company = "NPOI Team";            hssfworkbook3.DocumentSummaryInformation = dsi3;

////create a entry of SummaryInformation            SummaryInformation si3 = PropertySetFactory.CreateSummaryInformation();            si3.Subject = "NPOI SDK Example";            hssfworkbook3.SummaryInformation = si3;        }    }

//只有实现IStaticDataSource接口才能实现流操作class StreamDataSource : IStaticDataSource    {public byte[] bytes { get; set; }public StreamDataSource(MemoryStream ms)        {            bytes = ms.GetBuffer();        }

public Stream GetSource()        {            Stream s = new MemoryStream(bytes);return s;        }    }}
时间: 2024-09-29 17:25:49

NPOI+SharpZipLib实现压缩多个Excel下载的相关文章

asp.net SharpZipLib的压缩与解压问题_实用技巧

我使用SharpZipLib.dll中遇到的问题是:利用SharpZipLib压缩后生成的*.rar文件,利用其可以正常解压,但如果使用文件右击压缩生成的*.RAR文件,在解压过程中出错,具体报错信息:Wrong Local header signature: 0x21726152 ;但*.zip文件可正常解压. 具体压缩.解压代码实现参照网络上的代码,贴出概要代码: 复制代码 代码如下: /// <summary> /// 压缩文件 /// </summary> /// <

poi 导出excel 下载完成怎么判断

问题描述 我用的poi3.8导出excel并且让用户自己选择保存地址,但是由于数据量比较大,查询和下载都需要时间,所以查询的时候我在页面弹了个提示层,提示用户正在处理数据,但是到下载完成了,层还是在,怎么判断下载是否完成?或者怎么让excel下载完成后,去掉提示层 解决方案 解决方案二:这个得提示层主动去查询导出状态,会好一些解决方案三:楼主的意思是,后台让前台刷新,会让loading消失,但是流雷同ajax是不会让页面刷新的.2种方法:用struts2的后台式的状态查询功能,是一个定时任务,不

JSP从数据库导出数据到Excel下载的实现

JSP从数据库导出数据到Excel下载的实现 关键代码: <%@ page contentType="application/msexcel" %> <%    //response.setHeader("Content-disposition","inline; filename=videos.xls");    response.setHeader("Content-disposition","

ASP.NET之Excel下载模板、导入、导出操作_实用技巧

本文介绍了ASP.NET下Excel下载模板.导入.导出操作,供大家参考,具体内容如下 1.下载模板功能 protected void btnDownload_Click(object sender, EventArgs e) { var path = Server.MapPath(("upfiles\\") + "test.xlt"); //upfiles-文件夹 test.xlt-文件 var name = "test.xlt"; try {

JSP实现从数据库导出数据到Excel下载的方法_JSP编程

本文实例讲述了JSP实现从数据库导出数据到Excel下载的方法.分享给大家供大家参考,具体如下: 关键代码: <%@ page contentType="application/msexcel" %> <% //response.setHeader("Content-disposition","inline; filename=videos.xls"); response.setHeader("Content-disp

java实现excel下载(服务器端不生成文件)

问题描述 java实现excel下载(服务器端不生成文件) 语言是java 现在要做的就是点击下载后 直接下载excel文件,但是不能再服务器上生成excel文件 (生成后删除也不行) 数据我已经能取到请问如何操作啊.写在流里还是直接把excel对象写到流里? 我是菜鸟 望大神指点 解决方案 不是,文件是不存在的,知识点击查询的时候 获取 导数据,通过JS 生成excel 或者用通过java后台生成文件放入流中 解决方案二: 点击下载首先你那个文件得存在吧.然后通过流到客户端. 如果流数据你已经

如何用NPOI或者其他的什么读Excel的类库,生成表格的图片?

问题描述 如何用NPOI或者其他的什么读Excel的类库,生成表格的图片?用于上传到服务器web访问的 解决方案 解决方案二:http://www.cnblogs.com/MR_ke/archive/2010/02/25/1673243.html解决方案三:引用1楼nonocast的回复: http://www.cnblogs.com/MR_ke/archive/2010/02/25/1673243.html 没有讲到如何生成图片的解决方案四:什么是"生成表格的图片"?解决方案五:如果

C#中利用SharpZipLib进行压缩和解压

压缩 我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来,慢慢的研究,总算找到了门路.针对自己的需要改写了文件压缩和解压缩的两个类,分别为ZipClass和UnZipClass.其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让首次接触压缩和解压缩的朋友可以少走些弯路.下面就来解释如何在C#里用http://www.icsh

asp.net实现文件夹及文件压缩,并实现下载

 步骤 1)先引用 ICSharpCode.SharpZipLib.dll: 2).cs文件引入 using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.GZip;   3)代码    #region 下列代码为压缩并下载代码        ZipOutputStream