Excel动态合并行、合并列
背景:
在北京工作的时候,又一次同事问了我这样一个问题,说我要把从数据库获取到的数据直接通过NPOI进行导出,但是我对导出的格式要特殊的要求,如图:
冥思苦想,最终顺利帮同事解决问题,虽然有点瑕疵,但是毕竟是盲写,也算是圆满完成任务了:
- //假设 DataTable dt=获取到的datatable
- List<Year_Month> listYear=Year_Month.ToList();//年限list
- List<Data> dataList=Data.ToList();//国别list
- List<dt> dtList=dt.ToList();//数据list
- int countYear=listYear.Count();//年限数量
- int countdata=dataList.Count();//国别数量
- int countdt=dtList.Count();//数据数量
- row=sheet.CreateRow(0);//创建行
- cell=row.CreateCell(0);//创建列
- cell.SetCellValue("时间");//单元格赋值
- //合并行,合并列
- sheet.AddMergedRegion(new CellRangeAddress(0,2,0,0));//些数据头,时间
- //标题进出口岸
- cell=row.CreateCell(1);//创建列
- cell.SetCellValue("进出口岸");//单元格赋值
- //合并行,合并列
- sheet.AddMergedRegion(new CellRangeAddress(0,0,1,countdata*2));//进出口岸
- //进口口岸名称
- row=sheet.CreateRow(1);
- for(int i=0;i<dataList.count;i++)
- {
- //根据数据条数,动态创建列
- cell=row.CreateCell(2*i+1);
- //合并行,合并列
- sheet.AddMergedRegion(new CellRangeAddress(1,1,2*i+1,2*(i+1)));//进出口岸
- //批量赋值
- cell.SetCellValue(dataList[i].GuoName);
- }
- //进出口
- row=sheet.CreateRow(2);
- for(int i=0;i<dataList.count;i++)
- {
- cell=row.CreateCell(2*i+1);
- cell.SetCellValue("进口");
- cell=row.CreateCell(2*i+2);
- cell.SetCellValue("出口");
- }
- //数据
- for(int i=0;i<yearList.count;i++)
- {
- row=sheet.CreateRow(i+3);//年份
- cell=row.CreateCell(0);
- cell.SetCellValue(yearList[i].nian);
- //数据赋值
- for(int j=0;j<datalist.count;j++)
- {
- var item=shujuzongtiaoshu.where(u=>u.nianfen==yearList[i].year).toList();
- for(int k=0;k<item.count;k++)
- {
- //数据有值赋值,没有的值得赋空值单元格站位
- if(item[k].guobiemingcheng==dataList[j].name)
- {
- cell=row.CreateCell(2*j+1);
- cell.SetCellValue(datalist[j].jinkou);
- cell=row.CreateCell(2*j+2);
- cell.SetCellValue(datalist[j].chukou);
- }else
- {
- cell=row.CreateCell(2*j+1);
- cell.SetCellValue("");
- cell=row.CreateCell(2*j+2);
- cell.SetCellValue("");
- }
- }
- }
- }
效果:
提示:图片纯属后来补充,不能代表正式环境下生成文档格式,请见谅
总结:
技术什么的只要肯下功夫都会有的,面包会有的,奶油也会有的。可是难能可贵的是我们在不知道怎么做的时候能坚持一下,去自己脑补,我们要对自己,对生活乃至对工作任务及实现方法充满幻想与想象,只有这样,我们才有取之不竭用之不尽的创新去支持我们,给自己加油!
Excel动态合并行、合并列的更多相关文章
- Reapter合并行
html文件: <asp:Repeater ID="rptEmployee" runat="server"> <HeaderTemplate& ...
- Vim常用操作-合并行。
刚接触 Vim 会觉得它的学习曲线非常陡峭,要记住很多命令.所以这个系列的分享,不会教你怎么配置它,而是教你怎么快速的使用它. 在开发时为了代码美观,经常会把属性用换行的方式显示. <el-di ...
- easyui生成合并行,合计计算价格
easyui生成合并行,合计计算价格 注:本文来源: 原创 一:图样你效果图 二:代码实现 1:datagrid 列展示: window.dataGrid = $("#dataGrid&qu ...
- sed行处理详解(交换行,合并行,删除行等)
1.合并行 zj@zj:~/Script/blog_script$ cat test11234合并上下两行zj@zj:~/Script/blog_script$ sed '$!N;s/\n/\t/' ...
- 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行
Editplus 选中一行: ctrl+rEditplus 复制一行: ctrl+r选择行,然后ctrl+c复制.复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行Ed ...
- C# 如何在Excel 动态生成PivotTable
Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择.那么如何用C#从数据库中抓取数据,并在 ...
- LaTex 制作表格 合并行\multirow 合并列\multicolumn
在latex文件最前面用这个包\usepackage{multirow} multirow 宏包提供了 \multirow 命令可以在表格中排版横跨两行以上的文本.命令的格式如下: \multirow ...
- js【table】合并行,合并列
eg: function hbh() { var tab = document.getElementById("tableID"); var maxCol = 2, val, co ...
- 【EXCEL】簡単に合計をとる方法
下記のような表があるとして.合計を取るときみんなSUM関数を使用しています. その方法もよいですが.もっと簡単の方法を説明します. ①合計する部分を選択します. ②ALT+=を押します. ※ノートパソ ...
随机推荐
- 使用Java的多线程和IO流写一个文件复制功能类
创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...
- ios 多线程必读内容 :锁
大学时的生产者消费者问题还记得吗?ios中的锁,请阅读以下官方文档,虽然是英文的,但是说的非常准确: Threading Programming Guide 中的 Synchronization ht ...
- ios中的addChildViewController 和 android中的fragment
刚才突然感觉这2个东西的功能特别像,记录一下,待研究!
- Qt 常用的功能
1.程序重启 void Widget::reStart() { qApp->closeAllWindows(); QProcess::startDetached(qApp->appli ...
- ACM/ICPC 之 树形DP(POJ1192)
将某点看做根状态,邻接点看做子状态,由子状态向根状态转移. POJ1192-最优连通子集 题解:将每一个点分成两个状态进行保存,因此可以构造一个数组dp[i][2]. dp[i][0]:不包括该点权值 ...
- Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
开始--运行--输入regsvr32空格 然后将filezila安装目录下的fzshellext.dll拖拽到[regsvr32空格]之后 注:64位电脑注意拖拽的文件为fzshellext_64 ...
- Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用 ...
- Spring配置数据源
Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源. DBCP数据源 DBCP类包位于 ...
- Dynamic Invok Webservice
来源:网络,自己做修改 CSharpCodeProvider csc = new CSharpCodeProvider(); ICodeCompiler icc = csc.CreateCompile ...
- 【leetcode】Minimum Size Subarray Sum(middle)
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...