4.2单元格合并与数据读取
POI中支持单元格合并,主要类为org.apache.poi.hssf.util.Region,通过new Region(rowFrom, colFrom, rowTo, colTo)设置合并的行列,四个参数说明如下:
参数 | 说明 |
rowFrom | 合并单元格的起始行(POI中row的标号) |
colFrom | 合并单元格的起始列(POI中row的标号) |
rowTo | 合并单元格的结束行(POI中column的标号) |
colTo | 合并单元格的结束列(POI中column的标号) |
如图19,写一个sheet的title是合并的。步骤是:先创建每个合并单元格的第一个单元格,将数据写入到单元格,再进行单元格合并。
图19
代码片段:
@SuppressWarnings("deprecation") public static HSSFWorkbook write(InputStream inputStream) throws IOException, ClassNotFoundException{ //初始一个workbook HSSFWorkbook workbook = new HSSFWorkbook(inputStream); //获取第一张sheet HSSFSheet sheet = workbook.createSheet("合并单元格"); //创建合并单元格的第一个单元格数据 HSSFRow row = sheet.createRow(0); HSSFCell c0 = row.createCell(0); c0.setCellValue(new HSSFRichTextString("工号")); HSSFCell c1 = row.createCell(1); c1.setCellValue(new HSSFRichTextString("姓名")); HSSFCell c2 = row.createCell(2); c2.setCellValue(new HSSFRichTextString("部门")); HSSFCell c3 = row.createCell(3); c3.setCellValue(new HSSFRichTextString("2010年度休假数据")); HSSFCell c4 = row.createCell(7); c4.setCellValue(new HSSFRichTextString("2011年度休假数据"));
HSSFRow row1 = sheet.createRow(1); HSSFCell c5 = row1.createCell(3); c5.setCellValue(new HSSFRichTextString("2010法定总假(天)")); HSSFCell c6 = row1.createCell(4); c6.setCellValue(new HSSFRichTextString("2010弹性总假(天)")); HSSFCell c7 = row1.createCell(5); c7.setCellValue(new HSSFRichTextString("2010病假总假(天)")); HSSFCell c8 = row1.createCell(6); c8.setCellValue(new HSSFRichTextString("2010补充总假(天)"));
HSSFCell c9 = row1.createCell(7); c9.setCellValue(new HSSFRichTextString("2011法定总假(天)")); HSSFCell c10 = row1.createCell(8); c10.setCellValue(new HSSFRichTextString("2011弹性总假(天)")); HSSFCell c11 = row1.createCell(9); c11.setCellValue(new HSSFRichTextString("2011病假总假(天)")); HSSFCell c12 = row1.createCell(10); c12.setCellValue(new HSSFRichTextString("2011补充总假(天)"));
//设置合并单元格的区域
sheet. sheet. sheet. sheet. sheet.
return workbook;
} |
合并后的单元格数据读取主要是读取合并前的第一个单元格的内容即可(默认合并单元格保留数据为第一个单元格的数据),所以我们在将以上合并后的单元格进行读取操作。
代码片段:
public static HSSFWorkbook write(InputStream inputStream) throws IOException, ClassNotFoundException{ //初始一个workbook HSSFWorkbook workbook = new HSSFWorkbook(inputStream); //获取第一张sheet HSSFSheet sheet = workbook.getSheet("合并单元格"); //循环所以的合并单元格 for(int numMR = 0; numMR < sheet.getNumMergedRegions(); numMR++){ //获取合并单元格 //获取合并单元格的第一个单元格 HSSFCell cell = sheet.getRow(region.getRowFrom()). System.out.println("第"+(numMR+1)+"个合并单元格值为:"+cell.getRichStringCellValue().toString()); } return workbook; } |
输出结果:
图20