java poi合并单元表格(求帮助啊)

java代码如何实现excel表格里相同的值合拼如图... java代码如何实现excel表格里相同的值合拼如图 展开
 我来答
匿名用户
2013-12-10
展开全部
  /**
  * 
  * @param context
  * @param dictionary
  * @param rows 数据行
  * @param fileName 文件名
  * @param fields 列名
  * @param fieldsName 字段名
  */
 private void outExcelFile(HttpContext context,
   IContextDictionary dictionary, DataRowCollections rows,
   String fileName, List<String> fields, List<String> fieldsName) {
  int cellSize = fields.size();
  if(cellSize == 0){
   LogManager.debug("没有指定列头信息,无法导出Excel文件!");
   return;
  }
  //============创建样式    start
  HSSFWorkbook workbook = new HSSFWorkbook();
  HSSFSheet sheet = workbook.createSheet();
  //列头字体样式
        HSSFFont headerFont = workbook.createFont();
        headerFont.setFontName("宋体");
        headerFont.setFontHeightInPoints((short) 12);
        headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        //列头样式
        HSSFCellStyle headerStyle = workbook.createCellStyle();
        headerStyle.setFont(headerFont);
        headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
        headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
        headerStyle.setLocked(true);
        headerStyle.setWrapText(true);
        //标题样式
        HSSFFont titleFont = workbook.createFont();
        titleFont.setFontName("宋体");
        titleFont.setFontHeightInPoints((short) 15);
        titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        
        HSSFCellStyle titleStyle = workbook.createCellStyle();
        titleStyle.setFont(titleFont);
        titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        titleStyle.setLocked(true);
        titleStyle.setWrapText(true);
        
        //普通单元格字体样式
        HSSFFont cellFont = workbook.createFont();
        cellFont.setFontName("宋体");
        cellFont.setFontHeightInPoints((short)12);
        //普通单元格样式
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFont(cellFont);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
        cellStyle.setLocked(true);
        cellStyle.setWrapText(true);
        //============创建样式    end
        
        //设置序号列、列宽和标题行     start
        HSSFRow titleRow = sheet.createRow(0);
        titleRow.setHeightInPoints(50);
        HSSFCell titleCell = titleRow.createCell(0);
        titleCell.setCellValue(new HSSFRichTextString(fileName));
        titleCell.setCellStyle(titleStyle);
        //sheet.addMergedRegion(new Region(0,(short)0,0,(short)cellSize));//合并单元格--方法过时                                                                                                                                                                                                                                                                          
        //CellRangeAddress  起始行 结束行 起始列 结束列
        sheet.addMergedRegion(new CellRangeAddress(0,0,(short)0,(short)cellSize));//合并单元格
       
        //显示总的数据个数 start
        HSSFRow countRow = sheet.createRow(1);
        countRow.setHeightInPoints(40);
        HSSFCell countCell = countRow.createCell(0);
        countCell.setCellValue(new HSSFRichTextString("共计专项检查("+rows.size()+")项"));
        countCell.setCellStyle(headerStyle);
        sheet.addMergedRegion(new CellRangeAddress(1,1,(short)0,(short)cellSize));//合并单元格
  //显示总的数据个数 end 
        
        HSSFRow headerRow = sheet.createRow(2);
        headerRow.setHeightInPoints(35);
        HSSFCell headerCell = null;
        
        //序号
        int startIndex = 0 ;
     headerCell = headerRow.createCell(0);
  sheet.setColumnWidth(0, 2000);
  headerCell.setCellValue(new HSSFRichTextString("序号"));
  
  headerCell.setCellStyle(headerStyle);
  startIndex ++ ;
  
  //列头
  for(int i = 0; i < cellSize; i ++){
   sheet.setColumnWidth(startIndex + i, 7000);
   headerCell = headerRow.createCell(startIndex + i);
   headerCell.setCellValue(new HSSFRichTextString(fields.get(i)));
   headerCell.setCellStyle(headerStyle);
  }
  //设置序号列、列宽和标题行   end
  
  //文件正文 start
  int rowNum = 1;
  int rowIndex = 0;
  HSSFRow row = null;
  List<Integer[]> cellRangeLst = new ArrayList<Integer[]>(0);
  Integer [] arr = null;
  int l = 0;
  String orgName = ""; 
  for(int j = 2; j<rows.size()+2; j++){//循环行
   DataRow dataRow = rows.get(rowIndex); //对应数据库字段
   HSSFCell cell = null;
   row = sheet.createRow(j + 1);
         row.setHeightInPoints(55);
   //序号
   cell = row.createCell(0);
   cell.setCellValue(rowNum++);
      cell.setCellStyle(cellStyle);
      
      if(StringHelper.isNullOrEmpty(orgName)){
       arr = new Integer[2];
       arr[0] = j + 1;
       l =j + 1;
       orgName = dataRow.getString("ORGNAME");
      }else{
       if(!orgName.equals(dataRow.getString("ORGNAME"))){
        arr[1] = j;
        cellRangeLst.add(arr);
        sheet.addMergedRegion(new CellRangeAddress(l,j,1,1));
        arr = new Integer[2];
        l = j+1;
        orgName = dataRow.getString("ORGNAME");
       }
       
       if(rowIndex == rows.size() - 1){
        arr[1] = j+1;
        cellRangeLst.add(arr);
        sheet.addMergedRegion(new CellRangeAddress(l,j+1,1,1));
       }
      }
      
      for(int k = 0; k < cellSize; k++){
       cell = row.createCell(k + startIndex);
       String column = fieldsName.get(k); //对应数据库字段
       String value = "";
       if("APSJ".equals(column)){
        value = getAPSJValue(dataRow.getString(column));
       }else{
        value = dataRow.getString(column);
       }
       cell.setCellValue(new HSSFRichTextString(value));
          cell.setCellStyle(cellStyle);
      }
      rowIndex ++;
  }
  //文件正文 end
  
  //for(Integer[] te : cellRangeLst){
  // sheet.addMergedRegion(new CellRangeAddress(te[0],te[1],1,1));//合并处室单元格
  //}
  
  //下载
  HttpServletResponse response = context.getResponse();
  
  response.setContentType("application/x-download;charset=UTF-8");
  String title = "export";
  try {
   title = java.net.URLEncoder.encode(fileName, "UTF-8");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  response.addHeader("Content-Disposition", "attachment;filename=" + title + ".xls");
  try {
   OutputStream out = response.getOutputStream();
   workbook.write(out);
   out.flush();
   out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

//参考一下吧

追问
谢谢你的帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虚之源
推荐于2016-07-22 · TA获得超过313个赞
知道小有建树答主
回答量:484
采纳率:50%
帮助的人:191万
展开全部

去年哥也写过这么个东东。

new Region 这个已经过时了,现在是用addMergedRegion(new CellRangeAddress(row,row,col,col);

追问
呵呵,你的这个我喜欢,求源码。。。594689303
追答
我这个是根据一颗树生成的excel。我是用递归将这些数据封装成树,然后再写入到excel的,这个可能跟你的不大一样。而且我这个是边写数据,边合并的。你的是写完了数据,然后再考虑合并。。现在合并的方法是这个addMergedRegion(new CellRangeAddress(row,row,col,col);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
binbin19900705
2013-12-10
知道答主
回答量:28
采纳率:0%
帮助的人:5.6万
展开全部
poi打印Excel中你可以用你定义的sheet里面的自带合并单元格方法。
EG:sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 7));
sheet就是你自己定义的sheet啦,里面的参数是行,列,行,列。刚刚我写的那个就是合并第一行从
第0个单元格到底7个单元格的合并语句。
另外poi打印过程中系统是不是识别自动合并那几个单元格,需要你手动提前设置好。
追问
谢谢你的回答
追答
不客气
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guolf2012
2013-12-10
知道答主
回答量:14
采纳率:0%
帮助的人:8.3万
展开全部
你是想用JAVA生成这样一个文档么?是的话留下邮箱,我写了一个工具类,发给你。这个不是一两句代码就搞定的。
追问
要啊!594689303
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式