Java POI 操作Excel 应用(一)

来源:互联网 发布:设备网络搜索使用方法 编辑:程序博客网 时间:2024/06/14 17:14

此应用是利用POI动态生成复杂表头,结果如下


首先介绍几个重要的类

org.apache.poi.hssf.usermodel.HSSFWorkbook;//工作簿org.apache.poi.hssf.usermodel.HSSFSheet;   //sheet页org.apache.poi.hssf.usermodel.HSSFRow;     //行org.apache.poi.hssf.usermodel.HSSFCell;    //单元格 

以上是创建一个Excel文档必不可少的类。

图构造:

HSSFWorkbook workBook = new HSSFWorkbook();//创建一个工作薄对象HSSFSheet sheet = workBook.createSheet("Page 1");//创建sheet页HSSFRow headRow = sheet.createRow((short) 1);//创建标题行 //设置单元格范围CellRangeAddress cra0 = new CellRangeAddress(1,(short)(7),0,0);CellRangeAddress cra1 = new CellRangeAddress(1,(short)2,(short)(1),(short)1);CellRangeAddress cra2 = new CellRangeAddress(1,(short)2,(short)(2),(short)2);CellRangeAddress cra3 = new CellRangeAddress(1,(short)2,(short)(3),(short)3);CellRangeAddress cra4 = new CellRangeAddress(1, 1, 4, 6);CellRangeAddress cra7 = new CellRangeAddress(1,(short)2,(short)(7),(short)7);CellRangeAddress cra8 = new CellRangeAddress(1,(short)2,(short)(8),(short)8);                     //设置边框工具类public void setBorder(CellRangeAddress cellRangeAddress, Sheet sheet,              Workbook wb) throws Exception {          RegionUtil.setBorderLeft(1, cellRangeAddress, sheet, wb);          RegionUtil.setBorderBottom(1, cellRangeAddress, sheet, wb);          RegionUtil.setBorderRight(1, cellRangeAddress, sheet, wb);          RegionUtil.setBorderTop(1, cellRangeAddress, sheet, wb);            }  


//根据单元格范围合并单元格sheet.addMergedRegion(cra0);sheet.addMergedRegion(cra1);sheet.addMergedRegion(cra2);sheet.addMergedRegion(cra3);sheet.addMergedRegion(cra4);sheet.addMergedRegion(cra5);sheet.addMergedRegion(cra6);sheet.addMergedRegion(cra7);sheet.addMergedRegion(cra8);    //设置边框    this.setBorder(cra0, sheet, workBook);this.setBorder(cra1, sheet, workBook);this.setBorder(cra2, sheet, workBook);this.setBorder(cra3, sheet, workBook);this.setBorder(cra4, sheet, workBook);this.setBorder(cra5, sheet, workBook);this.setBorder(cra6, sheet, workBook);this.setBorder(cra7, sheet, workBook);this.setBorder(cra8, sheet, workBook);ArrayList<String> fieldName = DataSource.getTableName();     for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题cell = headRow.createCell(j);//使用行对象创建列对象,0表示第1列/**************对标题添加样式begin********************///设置列的宽度/sheet.setColumnWidth(j, 6000);cellStyle = workBook.createCellStyle();//创建列的样式对象//设置内容居中cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置列样式cell.setCellStyle(cellStyle);HSSFFont font = workBook.createFont();//创建字体对象//字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);cellStyle.setFont(font);/**************对标题添加样式end********************/String ch_title = "三坐标";//添加样式cell.setCellType(HSSFCell.CELL_TYPE_STRING);if(fieldName.get(j) != null){//将创建好的样式放置到对应的单元格中cell.setCellStyle(cellStyle);if(j!=4&&j!=5&&j!=6){cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值}else{    cell.setCellValue(ch_title);}}else{cell.setCellValue("-");}}headRow = sheet.createRow((short) 1);
//设置x,y,z表头for (int j = 4; j < 7; j++) {cell = headRow.createCell(j);cell.setCellValue(fieldName.get(j));cell.setCellStyle(cellStyle);}//表头下部(特征)headRow = sheet.createRow((short)(rows+4));cell = headRow.createCell(1);cell.setCellValue("特征");cell.setCellStyle(cellStyle);

下面要注意数据源转化:

对于Java开发,一般拿到的数据都是对象化的,而我们需要的是对象的属性转换为String直接写入到对应的excel单元格中。

原创粉丝点击