自述:在工作中遇到很多有趣的需求,在实施过程中看到了自己的很多不足。 
仅在这里记录收获,积累成就感,愉悦自己,感谢他人!

// <summary>
/// 将数据部分处理生成excel 并打包成zip
/// </summary>
/// <param name="datas">数据列表</param>
public static void CreatZip(List<AmmeterProportionLogBll.AmmeterProportionLog_Aduit_Export> datas){HttpContext curContext = HttpContext.Current;curContext.Response.ContentType = "application/zip";curContext.Response.ContentEncoding = Encoding.UTF8;curContext.Response.Charset = "";curContext.Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(DateTime.Now.ToString("yyyyMMddhhmmss") + ".zip", Encoding.UTF8));//处理数据生成excel表 以K_V形式保存 WorkbooksDictionary<string, HSSFWorkbook> Workbooks = new Dictionary<string, HSSFWorkbook>();            datas.ForEach(p => Workbooks.Add(p.txtAmmeterNum, Export0(p)));//遍历Workbooks 生成zip文件 curContext.Response.BinaryWrite(PackageManyZip(Workbooks).GetBuffer());curContext.Response.End();curContext.Response.Close();}
//生成excel表  截取表的部分显示

public static HSSFWorkbook Export2(AmmeterProportionLogBll.AmmeterProportionLog_Aduit_Export m) 

HSSFWorkbook workbook = new HSSFWorkbook(); 
ISheet sheet = workbook.CreateSheet(“Sheet1”);

        //设置6列  表中涉及多张图片处理sheet.SetColumnWidth(0, 20 * 256 + 200);sheet.SetColumnWidth(1, 20 * 256 + 200);sheet.SetColumnWidth(2, 20 * 256 + 200);sheet.SetColumnWidth(3, 20 * 256 + 200);sheet.SetColumnWidth(4, 20 * 256 + 200);sheet.SetColumnWidth(5, 20 * 256 + 200);ICellStyle dateStyle = workbook.CreateCellStyle();IDataFormat format = workbook.CreateDataFormat();dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");int rowIndex = 0;//行标记#region 表头及样式{IRow headerRow = sheet.CreateRow(rowIndex);headerRow.HeightInPoints = 25;               headerRow.CreateCell(0).SetCellValue("Excel大标题");ICellStyle headStyle = workbook.CreateCellStyle();headStyle.Alignment = HorizontalAlignment.Center;headStyle.VerticalAlignment = VerticalAlignment.Center;IFont font = workbook.CreateFont();font.FontHeightInPoints = 20;font.Boldweight = 700;headStyle.SetFont(font);headerRow.GetCell(0).CellStyle = headStyle;//合并单元格sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 5));rowIndex++;}#endregion#region 两种样式ICellStyle CellStyle = workbook.CreateCellStyle();CellStyle.Alignment = HorizontalAlignment.Left;CellStyle.VerticalAlignment = VerticalAlignment.Center;//字体IFont CellFont = workbook.CreateFont();CellFont.FontHeightInPoints = 10;CellFont.Boldweight = 700;CellStyle.SetFont(CellFont);ICellStyle rightheadStyle = workbook.CreateCellStyle();rightheadStyle.Alignment = HorizontalAlignment.Right;rightheadStyle.VerticalAlignment = VerticalAlignment.Center;//文本样式 2IFont rightfont = workbook.CreateFont();rightfont.FontHeightInPoints = 10;rightfont.Boldweight = 700;rightheadStyle.SetFont(rightfont);#endregion#region 区域、核查日期{rowIndex++;IRow headerRow = sheet.CreateRow(rowIndex);headerRow.HeightInPoints = 20;headerRow.CreateCell(0).SetCellValue("区域:" + m.hfAreaName);headerRow.GetCell(0).CellStyle = CellStyle;sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 1));headerRow.CreateCell(2).SetCellValue("核查日期:" + m.txtCurrentDateInfo.ToString());headerRow.GetCell(2).CellStyle = CellStyle;sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 2, 5));rowIndex++;}#endregion#region 分别呈现A单位 B单位 C单位的图片X张(0<=X<=12) 每个单位占2列{int R_CMCCP = DealPhoto(sheet, workbook, m.tdPhoto_CMCCP, rowIndex, 0, 12);int R_CTCCP = DealPhoto(sheet, workbook, m.tdPhoto_CTCCP, rowIndex, 2, 12);int R_CUCCP = DealPhoto(sheet, workbook, m.tdPhoto_CUCCP, rowIndex, 4, 12);rowIndex = Math.Max(Math.Max(R_CMCCP, R_CTCCP), R_CUCCP);}#endregionreturn workbook;}
/// <summary>
/// 分别对多张图片进行列表呈现
/// </summary>
/// <param name="Path">图片路径</param>
/// <param name="StartCol">起始列</param>
/// <param name="MaxNum">限制显示图片张数/param>private static int DealPhoto(ISheet sheet, HSSFWorkbook workbook, string Path, int rowIndex, int StartCol, int MaxNum){int RowNum = rowIndex - 1;if (Path != ""){string[] paths = Path.Split(';');int i = 0;for (i = 0; i < paths.Length && i < MaxNum; i++){if (i % 2 == 0){IRow headerRow = sheet.CreateRow(rowIndex + i / 2);headerRow.HeightInPoints = 80;RowNum++;}AddPieChartMerage(sheet, workbook, paths[i], RowNum, StartCol + i % 2, 0);}}else{IRow headerRow = sheet.CreateRow(rowIndex);headerRow.HeightInPoints = 80;sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, StartCol, StartCol + 1));RowNum++;}return ++RowNum;}//图片处理private static void AddPieChartMerage(ISheet sheet, HSSFWorkbook workbook, string totalFileURL, int row, int col, int MerageColCount){try{HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();//照片位置,(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,宽为100,高为50HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 100, 50, col, row, col + 1, row + 1);int i = 0;foreach (var fileurl in totalFileURL.Split(';')){string path = fileurl;//图片路径byte[] bytes = System.IO.File.ReadAllBytes(path);if (!string.IsNullOrEmpty(path)){int pictureIdx = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG);anchor = new HSSFClientAnchor(i * 100, 0, i * 100 + 100, 0, col, row, col + 1 + MerageColCount, row + 1);HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);//pict.Resize();用图片原始大小来显示}i++;}}catch (Exception){//throw ex;}}

//生成zip文件

public static MemoryStream PackageManyZip(Dictionary<string, HSSFWorkbook> Workbooks){byte[] buffer;MemoryStream returnStream = new MemoryStream();var zipMs = new MemoryStream();using (ZipOutputStream zipStream = new ZipOutputStream(zipMs)){zipStream.SetLevel(7);//压缩程度foreach (var kv in Workbooks){string fileName = kv.Key;//文件名为AmmeterNumusing (MemoryStream ms = new MemoryStream()){kv.Value.Write(ms);                        ms.Position = 0;var streamInput = ms;buffer = new byte[streamInput.Length];zipStream.PutNextEntry(new ZipEntry(fileName));while (true){var readCount = streamInput.Read(buffer, 0, buffer.Length);if (readCount > 0){zipStream.Write(buffer, 0, readCount);}else{break;}}ms.Flush();}zipStream.Flush();}zipStream.Finish();zipMs.Position = 0;zipMs.CopyTo(returnStream, 5600);}returnStream.Position = 0;return returnStream;}

效果如下:

注:excel 和压缩的处理稍显粗糙。期待改进!

一路积累,一路成长!欢迎见证!

C# 生成多张excel 并打包相关推荐

  1. 使用 easyExcel 生成多个 excel 并打包成zip压缩包

    前言: 最近项目有个需求,需要生成多个 excel 并打包成 zip下载:由于需要生成的 excel 头字段过多,这里有96个时间段的表头,如果建一个有96个字段的实体不太好,还好 easyExcel ...

  2. electron中使用adm-zip将多个excel文件压缩进文件夹,使用XLSX以及XLSXStyle生成带样式excel文件

    需求:electron环境下想要实现根据多个表生成多个Excel文件,打包存入文件夹内并压缩下载到本地.(实际场景描述:界面中有软件工程一班学生信息.软件工程二班学生信息.软件工程三班学生信息,上方有 ...

  3. python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

    接上篇文章<如何用python实现excel中的vlookup功能?>,上篇说到,最近我在做一个小项目,也是用python操作excel解决财务审计工作上的一些问题,以便提高工作效率及其准 ...

  4. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  5. 使用Hutool生成多个excel文件合并成zip压缩包下载

    这几天有个业务需要把项目里数据生成excel后打包zip下载,但之前的项目基本都是用Apache自带的poi去做,这个项目引入Hutool工具,所以就用了Hutool的功能去做了,跟之前相比感觉省事了 ...

  6. POI批量导出Excel ZIP打包下载

    POI批量导出Excel ZIP打包下载 1.公共抽象导出Excel类 需要自己实现两个抽象方法: getColumValueForColunmName : 扩展方法:根据名称判断来做值得转换 比如: ...

  7. 太秀了!用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!

    大家好,我是菜鸟哥! 最近有不少粉丝问我关于Python批量操作Excel的问题. 大家的关注点主要是如何循环遍历表格.如何用Pandas批量处理,当然,还有在996的压迫下如何提效(来挤出更多摸鱼时 ...

  8. 用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!

    如何循环遍历表格.如何用Pandas批量处理,当然,还有在996的压迫下如何提效(来挤出更多摸鱼时间). 为此,我特意肝了几天,用基于实际业务的脱敏数据,以完整小项目的形式,来集中解决这些问题. 我的 ...

  9. 0.进校的第一张Excel表:“住宿分布表” ——《Excel“智能化”之路》 系列文章

    <Excel"智能化"之路> 系列文章 系列目录    0.进校的第一张Excel表:"住宿分布表" 系列前言    转眼间就大二了,感觉自己还没学 ...

  10. Python提取多张excel表上的数据,合并汇总到一张新表

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于财会学习联盟,作者:我是刀哥啊 私信回复"资料" ...

最新文章

  1. 机器学习(1)机器学习基础 鸢尾花数据集
  2. Linux系统管理工具-iostat、free、ps、netstat、tcpdump
  3. python财务-财务方面的学生如何学习python?
  4. wpf 用户自定义事件传参
  5. JQUERY实现放大镜
  6. Fence Repair
  7. oracle在线sql数据库设计,一款在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql...
  8. Sublime Text3 + Golang搭建开发环境
  9. bootstrap居中
  10. CF1106F Lunar New Year and a Recursive Sequence(矩阵快速幂+bsgs+exgcd)
  11. Java入门到进阶推荐书籍
  12. 秒懂---LDA算法
  13. 汉王手写板linux驱动下载,汉王笔手写板驱动程序
  14. 计算机组装与维护公开课,计算机组装与维护公开课教案
  15. SEM和SD的区别和联系,以及其计算方法(实际作图方法)
  16. 神秘贼掉包二维码,支付宝赔偿200多,烧烤小哥为何还骂支付宝没良心?
  17. Day442443444445446447448.K8s -谷粒商城
  18. 第四章 网络层(TCP/IP称网际层)
  19. qt链接mysql文件失败_【成功经验】QT读取access 2010的.accdb文件总是失败
  20. 【CV】CVPR2021高光谱图像重建论文笔记

热门文章

  1. python多线程抢红包代码_python实现的抢红包程序代码
  2. html 的scor属性,[HTML] 通过 scrollWidth 属性滚动内容
  3. 电子科技大学信通2018级学生上早自习缺勤率情况分析
  4. 建立统计回归模型的基本步骤_基本回归模型
  5. 服务器做虚拟网吧,一种基于游戏的虚拟网吧实现方法
  6. 编程十年 (14):毁人不倦2
  7. windows默认打开计算机,[Answers 分享]如何在Windows 7中还原.dll文件的默认打开方式...
  8. 目前流行的数据分析软件有哪些?
  9. 字节跳动混沌工程实践总结
  10. Halcon条形码识别