背景:

在北京工作的时候,又一次同事问了我这样一个问题,说我要把从数据库获取到的数据直接通过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动态合并行、合并列的更多相关文章

  1. Reapter合并行

    html文件: <asp:Repeater ID="rptEmployee" runat="server"> <HeaderTemplate& ...

  2. Vim常用操作-合并行。

    刚接触 Vim 会觉得它的学习曲线非常陡峭,要记住很多命令.所以这个系列的分享,不会教你怎么配置它,而是教你怎么快速的使用它. 在开发时为了代码美观,经常会把属性用换行的方式显示. <el-di ...

  3. easyui生成合并行,合计计算价格

    easyui生成合并行,合计计算价格 注:本文来源: 原创 一:图样你效果图 二:代码实现 1:datagrid 列展示: window.dataGrid = $("#dataGrid&qu ...

  4. sed行处理详解(交换行,合并行,删除行等)

    1.合并行 zj@zj:~/Script/blog_script$ cat test11234合并上下两行zj@zj:~/Script/blog_script$ sed '$!N;s/\n/\t/' ...

  5. 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行

    Editplus 选中一行: ctrl+rEditplus 复制一行: ctrl+r选择行,然后ctrl+c复制.复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行Ed ...

  6. C# 如何在Excel 动态生成PivotTable

    Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择.那么如何用C#从数据库中抓取数据,并在 ...

  7. LaTex 制作表格 合并行\multirow 合并列\multicolumn

    在latex文件最前面用这个包\usepackage{multirow} multirow 宏包提供了 \multirow 命令可以在表格中排版横跨两行以上的文本.命令的格式如下: \multirow ...

  8. js【table】合并行,合并列

    eg: function hbh() { var tab = document.getElementById("tableID"); var maxCol = 2, val, co ...

  9. 【EXCEL】簡単に合計をとる方法

    下記のような表があるとして.合計を取るときみんなSUM関数を使用しています. その方法もよいですが.もっと簡単の方法を説明します. ①合計する部分を選択します. ②ALT+=を押します. ※ノートパソ ...

随机推荐

  1. 利用ssh-copy-id无需密码登录远程服务器

    本地机器生成公钥和私钥 ssh-keygen -t rsa 一路回车,最后会在~/.ssh目录下生成id_rsa和id_rsa.pub这两个文件. 与远程服务器建立信任机制 ssh-copy-id - ...

  2. volley post非json格式数据并获取json数据

    在使用JsonObjectRequest时无法post非json格式的数据,因而采用StringRequest获取到相应的数据后再转为json格式的数据. //这里的上下文需要讨论 private s ...

  3. iOS coredata 级联删除

    应用场景如下,每个用户可以设定多个提醒,当删除一个用户时,应当把相关的提醒都删除,而删除一个提醒时,应当把提醒从用户信息中删除. 那么 Profile 应该建立一个如下图的relationship 而 ...

  4. Metro各种流转换

    Ibuffer转byte[] ,(int)buffer.Length); Byte[]转Ibuffer WindowsRuntimeBufferExtensions.AsBuffer(bytes,,b ...

  5. HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu

    其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒 ...

  6. 【数据结构】book3_3 表达式求值

    #include<iostream> #include <stdlib.h> using namespace std; typedef int Status; ; ; ; ; ...

  7. 【网络】VPN和代理服务器的区别

    来自:http://www.zhihujingxuan.com/19311.html [scotttony的回答(41票)]: VPN和ssh哪个比较好, 要看你怎么定义是“好”. ssh作为一个创建 ...

  8. ios block中引用self

    __block __weak typeof(self) tmpSelf = self; ^(){ tmpSelf...... }

  9. [Android Pro] Android studio jni中调用Log输出调试信息

    reference to : http://www.linuxidc.com/Linux/2014-02/96341.htm Android 开发中,java 可以方便的使用调试信息Log.i, Lo ...

  10. shell之数值运算

    Shell中声明变量默认是字符串, 要参与数值运算,可使用下面方式,简单,表示以数值方式.