zoukankan      html  css  js  c++  java
  • 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("");
    			}
    		}
    	}	
    }



    效果:



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


    总结:

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



  • 相关阅读:
    Eclipse快捷键 10个最有用的快捷键
    28000是 the account is lock
    MVN 打包命令
    增加eclipse启动的Tomcat内存的方法
    Ubuntu 12.04 简单实用的快捷键
    linux zip
    oracle 删除已连接用户
    eclipse下svn的分支与合并操作
    spring xml 配置文件向Bean 设置List值
    如何添加或删除ubuntu用户和组
  • 原文地址:https://www.cnblogs.com/DoubleEggs/p/5747140.html
Copyright © 2011-2022 走看看