java编写的导出Excel工具类包含业务需求。一些有意义的想法的实现

import com.qf.entity.Hosregister;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class ExportExcel {
    static HSSFWorkbook workbook;//创建工作簿                                                              步骤一
    static HSSFSheet sheet;    //创建sheet文件                                                              步骤二
    static String[] heads;   //设置头信息(即第一行的数据)                                                  步骤三

    //创建第一行
    public static void  createFirstLine(String[] headtitle){//String[] headtitle当中存储的是excel表格中第一行的作为每列头的信息。调用这个方法时需要自己根据需要的头信息现创new String{"头一","头二",.....}作为参数
        workbook=new HSSFWorkbook();//创建真实工作簿,这是全局变量                  步骤四
        sheet=workbook.createSheet("导出信息");//调用工作簿方法创建sheet文件,这是全局变量          步骤五
        HSSFRow row = sheet.createRow(0);//在工作簿中创建第一行                                      步骤六
        heads=headtitle;//全局变量                                                                            步骤七
        for (int i = 0; i <heads.length ; i++) {
            HSSFCell cell=row.createCell(i);  //在第一行中创建几个单元格,i代表创建的第几个单元格                  步骤八
            cell.setCellValue(heads[i]);  //将传进来的数组的元素值赋在创建出来的单元格中                          步骤九
        }
    }

    //创建第二行以后的数据                                                                                       步骤十
    public static  void createOther(List<Hosregister> list){//Hosregister为封装excel每一行数据的实体类
        List list1=new ArrayList();

        for (int i = 0; i < list.size(); i++) {//循环传进来的list集合,得到每一个Hosregister对象,获取当中的属性放进每一个单元格

            //业务内容:将每个对象单独放进list1集合,方便后面放进单元格还不至于被覆盖
            list1.add(list.get(i).getHosRid());//将门诊科室放进去
            list1.add(list.get(i).getDoctor().getDname());//将医生姓名放进去
            //设置时间输出到excel表格中的格式
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = simpleDateFormat.format(list.get(i).getHosdate());
            list1.add(format);//将挂号日期放进去
            list1.add(list.get(i).getDept().getDeptname());//将部门名称放进去
            list1.add(list.get(i).getHosRstate());//将挂号状态放进去



            HSSFRow row = sheet.createRow(i + 1);//每循环一次就创建一行

            for (int j = 0; j < heads.length; j++) {
                HSSFCell cell = row.createCell(j);//根据头中有几列就在每一行创建几个单元格
                //根据他们返回值类型决定将他们强转成什么类型给单元格赋值,如果过不强转就无法使用setCellValue方法
                if (list1.get(j) instanceof Integer){
                    cell.setCellValue((Integer)list1.get(j));
                }else if(list1.get(j) instanceof String){
                    cell.setCellValue((String) list1.get(j));
                }else if (list1.get(j) instanceof Date){
                    cell.setCellValue((Date) list1.get(j));
                }

            }
             list1.clear();//清空list1集合上一次添加的元素,让下一次循环不受上一次结果影响
        }
    /*    switch (j){
            case 0:
                cell.setCellValue(list.get(i).getHosRid());//当创建的是第一个单元格时,将门诊科室放进去
            case 1:
                cell.setCellValue(list.get(i).getDoctor().getDname());//当创建的是第二个单元格时,将医生姓名放进去
            case 2:
                cell.setCellValue(list.get(i).getHosdate());//当创建的是第三个单元格时,将挂号日期放进去
            case 3:
                cell.setCellValue(list.get(i).getDept().getDeptname());//当创建的是第四个单元格时,将部门名称放进去
            case 4:
                cell.setCellValue(list.get(i).getHosRstate());//当创建的是第五个单元格时,将状态放进去
        }*/
    }
    //导出
    public  static void  exportEcel(OutputStream output){
        sheet.setGridsPrinted(true);//设置以表格方式导出                                                  步骤十一
        try {
            workbook.write(output);  //                                                                     步骤十二
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

以下为使用此工具类

    @RequestMapping("/exportExcel")  //这是一个前端网页的请求地址
    public  void exportExcel(String hosdate){
    
     String[] hosDate = hosdate.split(",");//以逗号分开得到一个数组,但数组中并不会包含分开的这个字符
System.out.println(Arrays.toString(hosDate));

        ExportExcel.createFirstLine(new String[]{"门诊科室","主治医生","挂号时间","挂号科室","状态"});//第一行的信息
        ExportExcel.createOther(depDocHosbyhosdate);

//通过获取当前时间,来保证每次生成的文件名不一致
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd HHmmss");
        String format = simpleDateFormat.format(date);

        File file=new File("C:\\Users\\Administrator\\Desktop\\"+format+".xls");//导出地址


        FileOutputStream fileOutputStream =null;
        try {
           fileOutputStream = new FileOutputStream(file);
            ExportExcel.exportEcel(fileOutputStream);//导出

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

     
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值