博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)NPOI+SharpZipLib实现压缩多个Excel下载
阅读量:4487 次
发布时间:2019-06-08

本文共 5277 字,大约阅读时间需要 17 分钟。

转载自:

 

导出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; } } }

谢谢浏览!

转载于:https://www.cnblogs.com/Music/archive/2012/06/16/npoi-and-sharpzip.html

你可能感兴趣的文章
IBM MQ 创建以及常见问题集锦
查看>>
Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(1)
查看>>
SQL Server 服务器磁盘测试之SQLIO篇(一)
查看>>
sun.misc.Unsafe 详解
查看>>
食堂排队问题的一个实现
查看>>
Git 回滚代码的正确姿势
查看>>
构造函数、析构函数、虚析构函数、纯虚析构函数要点
查看>>
Python批量获取京东商品列表信息
查看>>
2017.7.10 C组总结
查看>>
SourceTree下载 及使用
查看>>
MyEclipse下安装FatJar打包工具
查看>>
什么是域名-视频讲解?
查看>>
大道至简第六章-从编程到工程
查看>>
单元测试——隔离神器:mockito
查看>>
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>