日期:2014-05-17  浏览次数:20822 次

poi excel 怎么合并单元格???


上面是效果图,最终的图
我已经把课程类型和街道分院的单元格排好了,效果图如下 :




现在要排所属单位的单元格,该怎么排,排列时需要排序的按照中文A_Z进行排序,街道分院,所属单位 和授课老师 需要排序,相同的话就进行单元格合并,现在我说下我的现实思路.
每一条课程消息是一个记录, 整个是个List,首先我对List进行排序 ,按照街道分院来排序,排完顺序后,把相同的街道分院进行合并. 然后所属单位要针对街道分院才排序,例如 所属单位是在 a 街道分院的话,对应里面的3条记录进行中文排序,有相同的话进行合并.这个excel都弄了3天了,还没排到一半 真是很伤脑壳,忘大家能给点意见

------解决方案--------------------
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 

先获取工作薄对象: 


Java代码 
HSSFWorkbook wb = new HSSFWorkbook();
 
HSSFSheet sheet = wb.createSheet();
 
HSSFCellStyle setBorder = wb.createCellStyle();
HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet();

HSSFCellStyle setBorder = wb.createCellStyle();

一、设置背景色: 

Java代码 
setBorder.setFillForegroundColor((short) 13);// 设置背景色
setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
setBorder.setFillForegroundColor((short) 13);// 设置背景色
setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

二、设置边框: 


Java代码 
setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

三、设置居中: 

Java代码 
setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

四、设置字体: 


Java代码 
HSSFFont font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小
 
HSSFFont font2 = wb.createFont();
font2.setFontName("仿宋_GB2312");
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short) 12);
 
setBorder.setFont(font);//选择需要用到的字体格式
HSSFFont font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小

HSSFFont font2 = wb.createFont();
font2.setFontName("仿宋_GB2312");
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short) 12);

setBorder.setFont(font);//选择需要用到的字体格式

五、设置列宽: 


Java代码 
sheet.setColumnWidth(0, 3766); //第一个参数代表列id(从0开始),第2个参数代表宽度值
sheet.setColumnWidth(0, 3766); //第一个参数代表列id(从0开始),第2个参数代表宽度值

六、设置自动换行: 


Java代码 
setBorder.setWrapText(true);//设置自动换行
setBorder.setWrapText(true);//设置自动换行

七、合并单元格: 


Java代码 
Region region1 = new Region(0, (short) 0, 0, (short) 6);
 
//参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
sheet.addMergedRegion(region1);
Region region1 = new Region(0, (short) 0, 0, (short) 6);

//参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
sheet.addMergedRegion(region1);

附一个完整的例子: 


Java代码 
package cn.com.util;
 
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.util.CellRangeAd