JAVA 下载EXCEL

  • 1.在指定的目录下创建excel
  • 2.不需要知道传来的是什么类,利用传来的List获取对象并利用反射得到每个类的get方法,并给每个EXCEL的每个列赋值
  • 3.表头是根据数据库中的字典表获取的每个表的中文字符。
package com.example.demo.util;

import com.example.demo.domain.User;
import org.apache.poi.hssf.usermodel.*;

import javax.servlet.http.HttpServletResponse;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class Excle {

    Excle(){};
    /***
     * 创建表头
     * @param sheet
     */
    private static void createTitle(HSSFSheet sheet,String titleName[])
    {
        HSSFRow row = sheet.createRow(0);
        //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
        sheet.setColumnWidth(0, 10*256);
        sheet.setColumnWidth(1, 10*256);
        sheet.setColumnWidth(2, 15*256);
        sheet.setColumnWidth(3, 80*256);
        sheet.setColumnWidth(4, 15*256);
        sheet.setColumnWidth(5, 80*256);

        for(int i=0;i<titleName.length;i++){
            row.createCell(i).setCellValue(titleName[i]);
        }

      //这是硬给表头
      /*  HSSFCell cell;
        cell = row.createCell(0);
        cell.setCellValue("姓名");
        cell = row.createCell(1);
        cell.setCellValue("性别");
        cell = row.createCell(2);
        cell.setCellValue("电话");
        cell = row.createCell(3);
        cell.setCellValue("家庭地址");*/

    }

    public static int downloadAllClassmate(List<?> list,String titleName[],String sheetName,String dirPath,String fileName) throws Exception {
        int status =0;  //返回0下载失败,返回1下载成功
        HSSFWorkbook workbook = new HSSFWorkbook();       //新建一个工作簿
        HSSFSheet sheet = workbook.createSheet(sheetName);//sheetName
        HSSFCellStyle style = workbook.createCellStyle();
        style.setLocked(false);
        //设置表头
        createTitle(sheet,titleName);
        //新增数据行,并且设置单元格数据
        int rowNum = 1;
        Class clazz = list.get(0).getClass();
        for(int i=0;i<list.size();i++) {      //遍历获取的每一行数据
            HSSFRow row = sheet.createRow(rowNum);
            int j =0;
            //获得Object对象中的所有方法
            Object obj = list.get(i);
            Field[] fields = obj.getClass().getDeclaredFields();//获得属性
            for (Field field : fields) {
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                Method getMethod = pd.getReadMethod();//获得get方法
                getMethod.invoke(obj);//此处为执行该Object对象的get方法
                row.createCell(j).setCellValue((String) getMethod.invoke(obj)); //利用反射调用get方法为每一个列赋值
                j++;
                // Method setMethod = pd.getWriteMethod();//获得set方法
                //setMethod.invoke(obj,"参数");//此处为执行该Object对象的set方法
            }
            rowNum++;
        }
            File f = new File(dirPath);
            if(!f.exists()){
                f.mkdir();
            }
          FileOutputStream out =null;
            try {
                 out =  new FileOutputStream(dirPath+"/"+fileName);
                workbook.write(out);//目录存放路径
                status =1;
            }catch (Exception e){
                status =0;
                throw e;
            }finally {
                out.close();
                workbook.close();
            }
            return status;
    }
}

主类调用

 int status =  Excle.downloadAllClassmate(list,titleName,"信息表","D://Excel",date+".xls");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值