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();
}
}
}
}