java使用poi导出excel的内容,同时可以利用反射进行动态获取信息

一,Java-poi导出

我们很多人都是希望我们可以写一个我们的Java导出的工具类,不需要用插件来实现,那下面就是我写的一个Java导出工具类,话不多说开始。
首先我们针对的是maven项目,导入相应的依赖

   org.apache.poi
   poi
   3.14


   org.apache.poi
   poi-ooxml
   3.14


导入了相应的依赖后,我们就可以进行相应的代码编写了,下面是我编写的代码,这里我们传入的是泛型类。
public void  getexport(Collection< T> dataset ,String[] headers HttpServletResponse response HttpServletRequest request ,String fileName){
    //创建一个excel文件,excel文档对象
    HSSFWorkbook workbook= new HSSFWorkbook() ;
    //创建一个excel表单
    HSSFSheet sheet= workbook.createSheet(fileName) ;

    //设置单元格样式1
    HSSFCellStyle cellStyle1=workbook.createCellStyle() ;
    //设置单元格居中
    cellStyle1.setAlignment(HSSFCellStyle. ALIGN_CENTER) ;
    //设置填充色
    cellStyle1.setFillPattern(HSSFCellStyle. SOLID_FOREGROUND) ;
    cellStyle1.setFillForegroundColor(HSSFColor.YELLOW. index) ;
    //设置边框
    cellStyle1.setBorderLeft(HSSFCellStyle. BORDER_THIN) ;
    cellStyle1.setBorderRight(HSSFCellStyle. BORDER_THIN) ;
    cellStyle1.setBorderTop(HSSFCellStyle. BORDER_THIN) ;
    cellStyle1.setBorderBottom(HSSFCellStyle. BORDER_THIN) ;

    //设置单元格样式2
    HSSFCellStyle cellStyle2=workbook.createCellStyle() ;
    //设置单元格居中
    cellStyle2.setAlignment(HSSFCellStyle. ALIGN_CENTER) ;
    //设置边框
    cellStyle2.setBorderLeft(HSSFCellStyle. BORDER_THIN) ;
    cellStyle2.setBorderRight(HSSFCellStyle. BORDER_THIN) ;
    cellStyle2.setBorderTop(HSSFCellStyle. BORDER_THIN) ;
    cellStyle2.setBorderBottom(HSSFCellStyle. BORDER_THIN) ;

    //创建第一行,设置表头
    HSSFRow row= sheet.createRow( 0) ;
    for( int i= 0 ;ilength ;i++){
        HSSFCell cell=row.createCell(i) ;
        cell.setCellStyle(cellStyle1) ;
        cell.setCellValue(headers[i]) ;
    }
    //遍历集合取出数据
    Iterator< T> it = dataset.iterator() ;
    int index =  0 ;
    while (it.hasNext()){
        index++ ;
        row = sheet.createRow(index) ;
        t = ( T) it.next() ;
        // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
        Field[] fields = t.getClass().getDeclaredFields() ;
        for ( int i= 0 ;ilength ;i++){
            HSSFCell cell= row.createCell(i) ;
            cell.setCellStyle(cellStyle2) ;
            Object value=getFildValue(fields[i] ,t) ;
            // 判断值的类型后进行强制类型转换
            String textValue =  null;
            if(value  instanceof Boolean){
                boolean bValue = (Boolean) value ;
                textValue =  "是" ;
                if (!bValue)
                {
                    textValue =  "否" ;
                }
            } else if (value  instanceof Date)
            {
                Date date = (Date) value ;
                SimpleDateFormat sdf =  new SimpleDateFormat( "yyyy-MM-dd") ;
                textValue = sdf.format(date) ;
            } else
            {
                // 其它数据类型都当作字符串简单处理
                textValue = value.toString() ;
            }
            if (textValue!= null){
                    cell.setCellValue(textValue) ;
            }

        }
    }
    //输出excel文件
    OutputStream output= null;
    try {
        output=response.getOutputStream() ;
        response.setHeader( "Content-disposition" "attachment; filename="+ URLEncoder. encode(fileName "UTF-8")+ ".xls") ;
        response.setContentType( "application/vnd.ms-excel;charset=UTF-8") ;
        workbook.write(output) ;

   catch (IOException e) {
        e.printStackTrace() ;
    } finally {
        try {
            output.close() ;
       catch (IOException e) {
            e.printStackTrace() ;
        }
    }
}

下一节我将来实现如何将我们的工具类打成jar包,这样我们就可以将我们的jar包导入到我们的项目中去了。

你可能感兴趣的:(Java技术)