npoi 导出execl 动态合并单元格内容

最近工作遇到了导出execl画表格,记录一下,省的下次再忘了,用的第三方的NPOI, 其中涉及到动态合并单元格,其中你想要动态合并的那列的数据,最好查询数据的时候排序一下,不然还得要处理跨行合并的问题,那样比较麻烦,所以我是先排序了一下,以下是代码

  

  1     public IWorkbook GetDeptExcelQuerys(YearQueryParam param, User user)
  2         {
  3 
  4             //创建workbook
  5             IWorkbook workbook;
  6             workbook = new HSSFWorkbook();
  7             ISheet sheet = workbook.CreateSheet("Sheet1");
  8             //表头样式
  9             IRow headerRow = sheet.CreateRow(0);
 10             headerRow.HeightInPoints = 25;
 11             headerRow.CreateCell(0).SetCellValue("xxxx金额记录表");
 12             ICellStyle headStyle = workbook.CreateCellStyle();
 13             headStyle.Alignment = HorizontalAlignment.Center;
 14             IFont font = workbook.CreateFont();
 15             font.Boldweight = 25;
 16             font.FontHeightInPoints = 16;
 17             font.Color = HSSFColor.Black.Index;
 18             headStyle.SetFont(font);
 19             headerRow.GetCell(0).CellStyle = headStyle;
 20             sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 7));
 21 
 22             //border
 23             //普通单元格样式
 24             ICellStyle bodyStyle = workbook.CreateCellStyle();
 25             bodyStyle.Alignment = HorizontalAlignment.Center;
 26             bodyStyle.VerticalAlignment = VerticalAlignment.Center;
 27             IFont font1 = workbook.CreateFont();
 28             font1.Color = HSSFColor.Black.Index;
 29             font1.Boldweight = 25;
 30             font1.FontHeightInPoints = 12;
 31             bodyStyle.FillForegroundColor = HSSFColor.White.Index;
 32             bodyStyle.SetFont(font1);
 33             //设置格式
 34             IDataFormat format = workbook.CreateDataFormat();
 35             // format.GetFormat("¥#,##0") 货币格式
 36            // bodyStyle.DataFormat = format.GetFormat("Numeric");
 37            //cell.SetCellType(CellType.Numeric);
 38 
 39             // 表头
 40             Dictionary<string, string> arrList = new Dictionary<string, string> { { "序号", "Numbers" }, { "名字", "DeptName" }, { "地区", "RegionName" }, { "年份", "Year" }, { "预算金额(元)", "BudgetMoney" }, { "调整金额(元)", 
 41             "ModifyMoney" }, { "实际预算金额(元)", "RBudgetMoney" }, { "医疗总费用(元)", "TotalAmount" } };
 42             IRow headrow = sheet.CreateRow(1);
 43             var cellCount = 0;
 44             foreach (var item in arrList)
 45             {
 46                 ICell headcell = headrow.CreateCell(cellCount);
 47                 headcell.SetCellValue(item.Key.ToString());
 48                 headcell.CellStyle = headStyle;
 49                 cellCount++;
 50             }
 51             var result = GetDeptExeclQuerys(param, user);
 52 
 53             var name = string.Empty;
 54             var type = string.Empty;
 55             object vue;
 56             //填充表内数据
 57             for (int i = 0; i < result.Count; i++)
 58             {
 59                 var j = 0;
 60                 IRow row = sheet.CreateRow(i + 2);
 61                 foreach (var item in arrList)
 62                 {
 63                     ICell cell = row.CreateCell(j);
 64                     foreach (System.Reflection.PropertyInfo p in result[i].GetType().GetProperties())
 65                     {
 66                         name = p.Name;
 67                         vue = p.GetValue(result[i]);
 68                         type = p.PropertyType.Name;
 69                         if (item.Value == name)
 70                         {
 71                             if (type == "Int32" || type == "Decimal")
 72                             {
 73                                 cell.SetCellValue(CellbillIsRMB(vue, false));
 74                             }
 75                             else
 76                             {
 77                                 cell.SetCellValue(vue.ToString());
 78                             }
 79                             cell.CellStyle = bodyStyle;
 80                         }
 81                     }
 82                     j++;
 83                 }
 84 
 85             }
 86 
 87             //合并行
 88             ArrayList arrTitles = new ArrayList { { "Numbers" }, { "DeptName" }, { "RegionName" }, { "Year" }, { "BudgetMoney" }, { "ModifyMoney" }, { "RBudgetMoney" }, { "TotalAmount" } };
 89             DataTable dt = ListToDt<YearExeclResult>(result, arrTitles, false, ""); //因为我取的数据源是集合,于是转成datatable,合并单元格的时候需要用到
 90             MergeCells(sheet, dt, 0, 0, 0); //合并单元格 
 91             MergeCells(sheet, dt, 1, 1, 1);
 92             MergeCells(sheet, dt, 2, 2, 2);
 93             //列宽
 94             sheet.SetColumnWidth(0, 20 * 256);
 95             sheet.SetColumnWidth(1, 20 * 256);
 96             sheet.SetColumnWidth(2, 20 * 256);
 97             sheet.SetColumnWidth(3, 20 * 256);
 98             sheet.SetColumnWidth(4, 25 * 256);
 99             sheet.SetColumnWidth(5, 25 * 256);
100             sheet.SetColumnWidth(6, 25 * 256);
101             sheet.SetColumnWidth(7, 25 * 256);
102 
103             return workbook;
104         }
View Code

 

 1 /// <summary>
 2 /// 合并单元格
 3 /// </summary>
 4 /// <param name="sheet">当前sheet</param>
 5 /// <param name="dt">数据源</param>
 6 /// <param name="cellIndex">要合并的第几列</param>
 7 /// <param name="startIndex">起始列号</param>
 8 /// <param name="endIndex">终止列号</param>
 9 
10 public void MergeCells(ISheet sheet, DataTable dt, int cellIndex, int startIndex, int endIndex)
11         {
12             for (int i = 1; i < dt.Rows.Count + 2; i++)
13             {
14                 string value = sheet.GetRow(i).GetCell(cellIndex).StringCellValue;
15                 int end = i;
16                 for (int j = i + 1; j < dt.Rows.Count + 2; j++)  
17                 {
18                     string value1 = sheet.GetRow(j).GetCell(cellIndex).StringCellValue;
19                     if (value.Trim() != value1.Trim())
20                     {
21                         end = j - 1;
22                         break;
23                     }
24                     else if (value.Trim() == value1.Trim() && j == (dt.Rows.Count + 1))
25                     {
26                         end = j;
27                         break;
28                     }
29                 }
30                 sheet.AddMergedRegion(new CellRangeAddress(i, end, startIndex, endIndex));
31                 i = end;
32             }
33         }  
View Code

 效果图:

 

第一次写博客有点懵!!

 

转载于:https://www.cnblogs.com/OBprogrammer/p/10577916.html

NPOI读取模板导出Excel(合并单元格) NPOI读取模版导出excel,合并相邻值相同的单元格。 立即下载

相关推荐

大漠多线程增强版:解决窗口消失、坐标错乱与识别卡死

多线程环境下窗口自动化面临的核心挑战,本质是GDI资源非线程安全、HWND生命周期失控及图像引擎状态污染三大底层问题。Windows GUI编程中,跨线程共享hDC、缓存失效的窗口句柄、OpenCV静态Mat等设计缺陷,导致FindPic失败、GetCursorPos异常、坐标跳变等典型故障。本方案通过线程局部存储(TLS)重构资源生命周期、WinEventHook+心跳探测构建实时窗口状态链、ABI对齐的多语言内存契约,实现稳定低延迟的并发UI识别与控制。适用于游戏多开监控、电商RPA、后台UI状态采集等

weixin_30561177的博客 477

C# 使用NPIO在excel指定单元格写内容,合并单元格

注:在项目里不要忘记添加NPIO的引用,及在程序最开头处加入两行内容。 using NPOI.HSSF.UserModel; using NPOI.SS.Util; 1、使用NPIO在excel指定的单元格写内容 HSSFWorkbook workbook = new HSSFWorkbook(); //创建工作表 var sheet = workbook.CreateSheet("信息表"); var row = sheet.CreateRow(0);//第1行 var cell0 = row.Cre

qq_40467670的博客 3299

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

NPOI导出EXCEL 合并单元格、统计列、单元格样式设置

先上效果图: 先声明一个IWorkbook对象: IWorkbook workbook; //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式 string fileExt = Path.GetExtension(fileName).ToLower(); i...

qq_34059765的博客 6717

赛灵思Xilinx 7系列FPGA硬件设计知识总结

本文讲述了赛灵思7系列FPGA硬件设计的关键点,为使用该系列FPGA提供硬件设计参考。

csdn_dsw的博客 3620

避坑指南:STM32定时器测PWM频率占空比时,那些CubeMX没告诉你的细节(蓝桥杯真题衍生)

本文深入解析STM32定时器测量PWM频率和占空比时的关键细节,揭示CubeMX配置中未明确的时钟树原理和输入捕获机制。针对蓝桥杯嵌入式赛题中的常见问题,提供动态调整预分频器、多采样数字滤波等实战解决方案,帮助开发者避免测量误差,提升PWM测量精度和稳定性。

weixin_28692153的博客 339

NPOI 1.2.3教程 -16 合并单元格MergeCells

<br />using System; using System.Text; using System.IO; using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using NPOI.HSSF.UserModel.Contrib; using NPOI.SS.Util; using NPOI.SS.UserModel; namespace MergeCellsInXls { cl

Taskcnjia的专栏 7884

01、【solidworks】windosws正在配置solidworks问题及注册表未卸载干净问题解决

windosws正在配置solidworks问题及注册表未卸载干净问题解决

qq_740388770的博客 2万+

python合并单元格-Python---- table合并单元格colspan和rowspan

colspan和rowspan这两个属性用于创建特殊的表格。colspan是“column span(跨列)”的缩写。colspan属性用在td标签中,用来指定单元格横向跨越的列数:在浏览器中将显示如下:单元格1单元格2单元格3单元格4该例通过把colspan设为“3”, 令所在单元格横跨了三列。如果我们将colspan设为“2”,则该单元格将只跨越两列,于是有必要在第一行插入另外一个单元格,以确...

weixin_39875503的博客 1228

[特殊字符]用Python爬取中国裁判文书网案例信息:从爬虫到数据可视化全流程实战(附代码)

✅ 分析裁判文书网的网页结构;✅ 自动化爬取案件信息;✅ 解析加密参数并获取数据;✅ 数据可视化图表输出;✅ 模块化构建爬虫系统。

2201_76125261的博客 2823

基于STM32F4XX 、HAL库的GXHT30C温湿度传感器驱动应用C语言程序设计

define GXHT30C_STATUS_WRITE_CHK (1 << 0) // 写数据校验状态。#define GXHT30C_STATUS_HUMI_TRACK (1 << 11) // 湿度跟踪报警。#define GXHT30C_STATUS_TEMP_TRACK (1 << 10) // 温度跟踪报警。#define GXHT30C_STATUS_CMD_STATUS (1 << 1) // 命令执行状态。

PP_Cottage的博客 226

NPOI画复杂的execl

execl呈现效果

bugalitter的博客 218

Python 爬虫实战:破解网页 JS 混淆加密参数

摘要:本文针对Python爬虫破解JS混淆加密参数的技术难题,系统解析了变量混淆、控制流混淆、AES/MD5加密混淆等常见类型及其检测方法,提出"定位-还原-复现"的三步破解策略。通过实战案例详细演示了从JS逆向分析到Python代码实现的完整流程,包括MD5签名生成、AES加密复现等核心代码实现,并对不同混淆场景的破解方法进行了对比分析。文中特别强调技术应用的合规性边界,指出开发者应遵守相关法律法规,在合理范围内使用逆向技术。随着反爬技术升级,建议开发者持续学习动态调试等进阶技能,同时

2503_91057718的博客 2067

C#的NPOI按照规定模板导出excel设置单元格样式,并在单元格中动态存放数据

NpOI导入excel整个过程遇到的问题总结

bingmo_的博客 2060

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c# Excel 合并列导入

前台使用了 layui,后端使用c#。

weixin_42955679的博客 427

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NPOI 合并单元格

需要用到的类:CellRangeAddressCellRangeAddress类的构造方法public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 一共四个参数,分别是:待合并的开始行、结束行、开始列、结束列,参数均为索引值,从0开始。headerRow.CreateCell(0).SetCellVa

SunMoonJP的博客 2668

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NPOI合并单元格后的边框设置

NPOI普通设置表格样

m2j1984的专栏 3万+

poi-tl导出word复杂表格(单元格合并,生成复杂表格)

poi-tl导出表格,单元格合并

yuanay的博客 1万+

.NET Core(C#)使用NPOI合并Excel(.xls,.xlsx)单元格及设置样式

NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目, 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。本文主要介绍.NET Core(C#)中,使用NPOI合并Excel(.xls,.xlsx)文件单元格及设置样式方法,以及相关的示例代码。 原文地址:.NE

weixin_42098295的博客 1129

NPOI 教程 - 2.1单元格合并

      转载http://liyingchun343333.blog.163.com/blog/static/3579731620091018212990/ 合并单元格在制作表格时很有用,比如说表格的标题就经常是把第一行的单元格合并居中。那么在NPOI中应该如何实现单元格的合并呢? 为了实现这一功能,NPOI引入了新的概念,即Region,因为合并单元格,其实就是设定一个区域。下面说一...

weixin_30443731的博客 366

使用npoi导入Excel - 带合并单元格--附代码

之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白。在网上翻了半天也没有找到合适的解决方案,最后还是想着静下心来好好研究一番,于是... 我们先来看看通常我们的导入方式,如下图,这是我们的导入模板,带有合并单元格 下面我们来看看对应的npoi所读到的DataTable数据 ...

土伦 2703

C#使用NPOI进行word的读写

目录一、简介1、操作Word的类库:二、简单使用1、XWPFDocument类的实例化2、设置页面的大小3、段落处理4、表格处理5、页眉页脚处理三、综合示例四、参考一、简介1、操作Word...

dotNET跨平台 8242

C#操作word合并单元格

利用c#Microsoft.Office.Interop.Word,模板生成word中表格单列数据合并

pixiuz的博客 890

C# 操作word表格合并单元格

C# 操作word表格遇到合并单元格的时候,假设表格是3行6列newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));//合并第1行第1列到横向单元格合并,使用如下语句 newTable.Cell(1, 3).Merge(newTable.Cell(1, 4));newTable.Cell(2, 4).Merge(newTable.Cell(2, 5));最后...

默默努力的博客 8261
下一篇: extjs grid数据排序之array.sort()排序
a6926521
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值