背景:

在北京工作的时候,又一次同事问了我这样一个问题,说我要把从数据库获取到的数据直接通过NPOI进行导出,但是我对导出的格式要特殊的要求,如图:

冥思苦想,最终顺利帮同事解决问题,虽然有点瑕疵,但是毕竟是盲写,也算是圆满完成任务了:

  1. //假设 DataTable dt=获取到的datatable
  2. List<Year_Month> listYear=Year_Month.ToList();//年限list
  3. List<Data> dataList=Data.ToList();//国别list
  4. List<dt> dtList=dt.ToList();//数据list
  5.  
  6. int countYear=listYear.Count();//年限数量
  7. int countdata=dataList.Count();//国别数量
  8. int countdt=dtList.Count();//数据数量
  9.  
  10. row=sheet.CreateRow(0);//创建行
  11. cell=row.CreateCell(0);//创建列
  12. cell.SetCellValue("时间");//单元格赋值
  13. //合并行,合并列
  14. sheet.AddMergedRegion(new CellRangeAddress(0,2,0,0));//些数据头,时间
  15.  
  16. //标题进出口岸
  17. cell=row.CreateCell(1);//创建列
  18. cell.SetCellValue("进出口岸");//单元格赋值
  19. //合并行,合并列
  20. sheet.AddMergedRegion(new CellRangeAddress(0,0,1,countdata*2));//进出口岸
  21.  
  22. //进口口岸名称
  23. row=sheet.CreateRow(1);
  24. for(int i=0;i<dataList.count;i++)
  25. {
  26. //根据数据条数,动态创建列
  27. cell=row.CreateCell(2*i+1);
  28. //合并行,合并列
  29. sheet.AddMergedRegion(new CellRangeAddress(1,1,2*i+1,2*(i+1)));//进出口岸
  30. //批量赋值
  31. cell.SetCellValue(dataList[i].GuoName);
  32. }
  33.  
  34. //进出口
  35. row=sheet.CreateRow(2);
  36. for(int i=0;i<dataList.count;i++)
  37. {
  38. cell=row.CreateCell(2*i+1);
  39. cell.SetCellValue("进口");
  40. cell=row.CreateCell(2*i+2);
  41. cell.SetCellValue("出口");
  42. }
  43.  
  44. //数据
  45. for(int i=0;i<yearList.count;i++)
  46. {
  47. row=sheet.CreateRow(i+3);//年份
  48. cell=row.CreateCell(0);
  49. cell.SetCellValue(yearList[i].nian);
  50.  
  51. //数据赋值
  52. for(int j=0;j<datalist.count;j++)
  53. {
  54. var item=shujuzongtiaoshu.where(u=>u.nianfen==yearList[i].year).toList();
  55. for(int k=0;k<item.count;k++)
  56. {
  57. //数据有值赋值,没有的值得赋空值单元格站位
  58. if(item[k].guobiemingcheng==dataList[j].name)
  59. {
  60. cell=row.CreateCell(2*j+1);
  61. cell.SetCellValue(datalist[j].jinkou);
  62. cell=row.CreateCell(2*j+2);
  63. cell.SetCellValue(datalist[j].chukou);
  64. }else
  65. {
  66. cell=row.CreateCell(2*j+1);
  67. cell.SetCellValue("");
  68. cell=row.CreateCell(2*j+2);
  69. cell.SetCellValue("");
  70. }
  71. }
  72. }
  73. }

效果:

提示:图片纯属后来补充,不能代表正式环境下生成文档格式,请见谅

总结:

技术什么的只要肯下功夫都会有的,面包会有的,奶油也会有的。可是难能可贵的是我们在不知道怎么做的时候能坚持一下,去自己脑补,我们要对自己,对生活乃至对工作任务及实现方法充满幻想与想象,只有这样,我们才有取之不竭用之不尽的创新去支持我们,给自己加油!

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. zju3430

    题意:给出多个加密的模式串,和多个待匹配的串,问每个串里出现了多少种模式串.加密方法是把每3bytes加密成按6bits一个对应成4个字符,对应方法题里给了. 分析:除了解密之外,基本是个赤裸裸的AC ...

  2. C#操作字符串方法总结<转>

    staticvoid Main(string[] args) { string s =""; //(1)字符访问(下标访问s[i]) s ="ABCD"; Co ...

  3. ffmpeg-20160726-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  4. java入门 第一季4

    1.数组 1).声明数组 数据类型[]数组名; 数据类型 数组名[]; 2).分配空间 数组名=new 数据类型[数组长度]: 3).赋值 score[0]=98: 直接创建一个长度为4的数组 int ...

  5. 掌握VS2010调试 -- 入门指南

    1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间.通常,debug是指发现缺 ...

  6. NPOI 1.2.4教程 –日期函数

    //Excel中有非常丰富的日期处理函数,在NPOI中同样得到了很好的支持.如下图: using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.PO ...

  7. NYOJ926(概率)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=926 设最终A获胜的概率为P,则B获胜的概率为1-P: 因此我们只需要考虑A获胜的概率即可 ...

  8. NYOJ题目10505C?5S?

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJ/CAIAAAAbDelhAAAgAElEQVR4nO3dPXLbOhfG8XcT7r0Q11

  9. lnmp初步学习知识整理

    Linux常用30个命令 1.帮助命令 1) man 就是manual的缩写,用来查看系统中自带的各种参考手册(一般linux系统中自带英文手册)! man 命令名 //查看该命令的介绍 2) 命令名 ...

  10. hadoop+javaWeb的开发中遇到包冲突问题(java.lang.VerifyError)

    1.HDFS + WEB 项目 报java.lang.VerifyError... 异常 抛异常: Exception in thread "main" java.lang.Ver ...