poi合并单元格
2016-01-24 19:01
411 查看
注:我这里合并的是列的相同单元格,图片效果如下:
POI合并单元格的方法是addMergedRegion();
/**
* 合并单元格
* @param sheet 要合并单元格的excel 的sheet
* @param cellLine 要合并的列
* @param startRow 要合并列的开始行
* @param endRow 要合并列的结束行
*/
private static void addMergedRegion(HSSFSheet sheet, int cellLine, int startRow, int endRow,HSSFWorkbook workBook){
HSSFCellStyle style = workBook.createCellStyle(); // 样式对象
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
//获取第一行的数据,以便后面进行比较
String s_will = sheet.getRow(startRow).getCell(cellLine).getStringCellValue();
int count = 0;
boolean flag = false;
for (int i = 1; i <= endRow; i++) {
String s_current = sheet.getRow(i).getCell(0).getStringCellValue();
if(s_will.equals(s_current))
{
s_will = s_current;
if(flag)
{
sheet.addMergedRegion(new CellRangeAddress(startRow-count,startRow,cellLine,cellLine));
HSSFRow row = sheet.getRow(startRow-count);
String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue();
HSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
count = 0;
flag = false;
}
startRow=i;
count++;
}else{
flag = true;
s_will = s_current;
}
//由于上面循环中合并的单元放在有下一次相同单元格的时候做的,所以最后如果几行有相同单元格则要运行下面的合并单元格。
if(i==endRow&&count>0)
{
sheet.addMergedRegion(new CellRangeAddress(endRow-count,endRow,cellLine,cellLine));
String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue();
HSSFRow row = sheet.getRow(startRow-count);
HSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
}
}
}
你只要在导出excel的方法里调用: addMergedRegion(sheet, 0, 0, sheet.getLastRowNum(),workBook);就是合并第一列的所有相同单元格。
POI合并单元格的方法是addMergedRegion();
/**
* 合并单元格
* @param sheet 要合并单元格的excel 的sheet
* @param cellLine 要合并的列
* @param startRow 要合并列的开始行
* @param endRow 要合并列的结束行
*/
private static void addMergedRegion(HSSFSheet sheet, int cellLine, int startRow, int endRow,HSSFWorkbook workBook){
HSSFCellStyle style = workBook.createCellStyle(); // 样式对象
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
//获取第一行的数据,以便后面进行比较
String s_will = sheet.getRow(startRow).getCell(cellLine).getStringCellValue();
int count = 0;
boolean flag = false;
for (int i = 1; i <= endRow; i++) {
String s_current = sheet.getRow(i).getCell(0).getStringCellValue();
if(s_will.equals(s_current))
{
s_will = s_current;
if(flag)
{
sheet.addMergedRegion(new CellRangeAddress(startRow-count,startRow,cellLine,cellLine));
HSSFRow row = sheet.getRow(startRow-count);
String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue();
HSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
count = 0;
flag = false;
}
startRow=i;
count++;
}else{
flag = true;
s_will = s_current;
}
//由于上面循环中合并的单元放在有下一次相同单元格的时候做的,所以最后如果几行有相同单元格则要运行下面的合并单元格。
if(i==endRow&&count>0)
{
sheet.addMergedRegion(new CellRangeAddress(endRow-count,endRow,cellLine,cellLine));
String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue();
HSSFRow row = sheet.getRow(startRow-count);
HSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
}
}
}
你只要在导出excel的方法里调用: addMergedRegion(sheet, 0, 0, sheet.getLastRowNum(),workBook);就是合并第一列的所有相同单元格。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树