1. import java.io.FileNotFoundException;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import org.apache.poi.hssf.usermodel.HSSFCell;
  9. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  10. import org.apache.poi.hssf.usermodel.HSSFFont;
  11. import org.apache.poi.hssf.usermodel.HSSFRow;
  12. import org.apache.poi.hssf.usermodel.HSSFSheet;
  13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  14. import org.apache.poi.hssf.util.Region;
  15. import org.apache.poi.ss.usermodel.Font;
  16. import org.apache.poi.ss.util.CellRangeAddress;
  17. import org.hibernate.SQLQuery;
  18. import org.hibernate.transform.Transformers;
  19. import org.jboss.seam.annotations.Name;
  20. import org.jboss.seam.annotations.remoting.WebRemote;
  21.  
  22. import com.sunsheen.jfids.system.base.composite.data.query.QueryParameterImpl;
  23. import com.sunsheen.jfids.system.database.DBSession;
  24. import com.sunsheen.jfids.util.DataBaseUtil;
  25.  
  26. public class SalaryPoi {
  27.  
  28. @SuppressWarnings("deprecation")
  29. public String getToExcel(){
  30. ......省略数据源获取
  31. // 返回表单结果集
  32. List list = query.list();
  33. int size = list.size();
  34. System.out.println("+++++++++++++" + size);
  35.  
  36. //初始化POI
  37. //创建工作簿---->XSSF代表10版的Excel(HSSF是07版前的Excel)
  38. HSSFWorkbook wb = new HSSFWorkbook();
  39.  
  40. //工作表
  41. HSSFSheet sheet = wb.createSheet("淞幸科技");
  42.  
  43. //标头行,代表第一行
  44. HSSFRow head=sheet.createRow(0);
  45. HSSFCell hssfCell=head.createCell(0);
  46.  
  47. hssfCell.setCellValue("成都淞幸科技有限责任公司"+date.substring(0,4)+"年"+
  48. date.substring(date.length()-2,date.length())+"月工资表");
  49. head.setHeightInPoints(70);
  50.  
  51. //合并第一行的单元格
  52. CellRangeAddress address=new CellRangeAddress(0,0,0,26);
  53. sheet.addMergedRegion(address);
  54.  
  55. //创建字体与风格
  56. HSSFCellStyle cellStyle = wb.createCellStyle();//生成表头格样式
  57. HSSFFont hssfFont = wb.createFont();//创建字体
  58. hssfFont.setFontHeightInPoints((short)12);//字体大小
  59. hssfFont.setBoldweight(Font.BOLDWEIGHT_BOLD);//粗体
  60. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
  61. cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
  62. cellStyle.setFont(hssfFont);
  63. hssfCell.setCellStyle(cellStyle);
  64.  
  65. //修饰风格2
  66. HSSFCellStyle cellStyle2 = wb.createCellStyle();//生成表头格样式
  67. cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
  68. cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
  69.  
  70. HSSFRow header=sheet.createRow(1);
  71. //创建单元格,0代表第一行第一列
  72. String[] heards ={"序号","部门名称","工号","姓名","银行卡号","定级工资","岗位工资","基础
  73. ,"实发工资总额"......};
  74. for(int i =0;i<heards.length;i++){
  75. HSSFCell hssfCell1=header.createCell(i);
  76. hssfCell1.setCellStyle(cellStyle2);
  77. hssfCell1.setCellValue(heards[i]);
  78. }
  79. //设置列的宽度
  80. // getPhysicalNumberOfCells()代表这行有多少包含数据的列
  81. for(int i=0;i<header.getPhysicalNumberOfCells();i++){
  82. //POI设置列宽度时比较特殊,它的基本单位是1/255个字符大小,
  83. //因此我们要想让列能够盛的下20个字符的话,就需要用255*20
  84. sheet.setColumnWidth(i, 255*15);
  85. }
  86. //设置行高,行高的单位就是像素,因此30就是30像素的意思
  87. header.setHeightInPoints(30);
  88. int k =2;
  89. //
  90. for(int i=0;i<size;i++){
  91. // //创建多行数据
  92. HSSFRow headers=sheet.createRow(k++);
  93. // //拿出所有查询出的一条list(list(Map<>))信息
  94. Map<String, Object> map = (Map<String, Object>) list.get(i);
  95. System.out.println(map);
  96.  
  97. String[] context ={你要写入的数据};
  98. for(int j=0;j<context.length;j++){
  99. HSSFCell hssfCell2=headers.createCell(j);
  100. hssfCell2.setCellStyle(cellStyle2);
  101. hssfCell2.setCellValue(context[j]);
  102. }
  103. }
  104.  
  105. // 合并相同列中的数据
  106. // 处理相同的数据合并单元格
  107. if(sheet.getLastRowNum()>2){//获取最后一行行标,比行数小 满足合并的条件,2是数据行的开始,0 1 行为表头
  108. HSSFRow row_1 = sheet.getRow(2);
  109. HSSFCell cell_1 = row_1.getCell(1);
  110.  
  111. String departname = cell_1.getStringCellValue();
  112.  
  113. for(int i=3;i<=sheet.getLastRowNum();i++){
  114. //除第一个外,循环将内容相同的单元格设为"",这里体现出为什么原数据要有序!
  115. HSSFRow rows = sheet.getRow(i);
  116. //此处表示对单元格进行内容相同合并处理,我这里获取的是每行的第2列进行对比,要多列对比的,这里自行增加
  117. HSSFCell cells_1 = rows.getCell(1);
  118. //这里值相同则设置位空,方便之后的合并
  119. if(departname.equals(cells_1.getStringCellValue())){
  120. cells_1.setCellValue("");
  121. }else{
  122. departname = cells_1.getStringCellValue();
  123. }
  124. }
  125. }
  126. int sk;
  127. if(sheet.getLastRowNum()>2){//将为空的单元格与之前不为空的合并
  128. sk=2;
  129. for(int i=3;i<=sheet.getLastRowNum();i++){
  130. HSSFRow rows = sheet.getRow(i);
  131. HSSFCell cell_0 = rows.getCell(1);
  132. if(cell_0.getStringCellValue() == ""){//如果为空但还没对比到最后一行,继续循环
  133. if(i==sheet.getLastRowNum()){
  134. sheet.addMergedRegion(new CellRangeAddress(sk, i, 1, 1));//如果已经对比到最后一行,开始合并
  135. }
  136. }else{
  137. if(sk != i-1){//不为空且i-1不为sk则合并
  138. sheet.addMergedRegion(new CellRangeAddress(sk, i-1, 1, 1));//起始行号,终止行号, 起始列号,终止列号
  139. }
  140. sk =i;
  141. }
  142. }
  143. }
  144. //上面设置好了内容,我们当然是要输出到某个文件的,输出就需要有输出流
  145. FileOutputStream fos;
  146. try {
  147. fos = new FileOutputStream("d:/2010.xls");
  148. //向指定文件写入内容
  149. wb.write(fos);
  150. fos.close();
  151. return "导出Excel已完成!";
  152.  
  153. } catch (FileNotFoundException e) {
  154. // TODO 自动生成的 catch 块
  155. e.printStackTrace();
  156. } catch (IOException e) {
  157. // TODO 自动生成的 catch 块
  158. e.printStackTrace();
  159. }
  160.  
  161. return "导出Excel失败!";
  162. }
  163. }

POI HSS 合并重复的列的更多相关文章

  1. ASP.NET中重复表格列合并的实现方法(转自脚本之家)

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...

  2. POI Excel 合并数据相同的行

    import java.io.Serializable; /** * POI Excel报表导出,列合并实体<br> * * @author WQ * */ public class Po ...

  3. poi读取合并单元格

    poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...

  4. POI 怎么设置Excel整列的CellStyle啊

    POI 怎么设置Excel整列的CellStyle啊,而不是循环每个Cell.因为现在是生成Excel模板,不知道客户会输入多少行. 问题补充: 指尖言 写道 好像没有这个方法,CellStyle是C ...

  5. poi获取合并单元格内的第一行第一列的值

    当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...

  6. Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  7. POI 实现合并单元格以及列自适应宽度

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  8. POI 简单合并单元格

    public class MergedCells { /** 测试使用的POI版本是3.1 * @param args */ public static void main(String[] args ...

  9. poi excel 合并单元格

    结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip,        colId, colId + c ...

随机推荐

  1. Python实现读取json文件到excel表

    一.需求 1.'score.json' 文件内容: { "1":["小花",99,100,98.5], "2":["小王" ...

  2. js中json对象取键和值

    1.json中输出各个键值: var ohp = {"星期一":18,"星期二":16,"星期三":19,"星期四":1 ...

  3. UnitySendMessage

    SendMessage查找的方法是在自身当中去查找 SendMessageUpwards查找的方法是在自身和父类中去查找,如果父类还有父类,继续查找,知道找到根节点为止. BroadcastMessa ...

  4. scala容器使用

    花了两个小时左右,学习了一下scala语言, 由于scala运行在jvm之上, 可以使用java容器也可以使用scala自带的容器. import java.util import java.util ...

  5. mui的事件实现(持续更新)

    长按事件: mui('.mui-scroll').on('longtap', '.index-tab-item', function(e) { alert("长按生效") }); ...

  6. Web前端几种常见的实现水平垂直居中的方法

    第一种: 父容器不设置宽度,用定位实现水平垂直居中. <!DOCTYPE html> <html lang="en"> <head> <m ...

  7. 【vlan-hybird】

    根据项目要求搭建号拓扑图如下: 分别配置pc1-5的ip地址: 配置交换机sw1: 配置交换机sw2

  8. PHP中对字符串的一些操作

    php中判断字符串在另一个字符串中是否存在(strpos): if(strpos('www.baidu.com', 'www') !== false){ // 存在 }else{ // 不存在 } p ...

  9. Hive初识(四)

    Hive本质上是一个数据仓库,但不存储数据(只存储元数据(metadata),Hive中的元数据包括表的名字,表的列和分区及分区及其属性,表的属性(是否为外部表等),表的数据所在目录等),用户可以借助 ...

  10. CPS---(Cyber-Physical Sytem,信息物理融合系统)

    1.CPS定义 CPS是连接计算机虚拟世界与物理现实世界的系统.---We refer to systems that bridge the cyber-world of computing and ...