1、通过io流的方式导出
a.编写工具类
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* 文件流导出
* @author 96109
*/
public class ExportExcelUtil {
public static byte[] exportExcel(String sheetTitle, String[] title, List<?> list) {
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作区
Sheet sheet = wb.createSheet(sheetTitle);
// 创建表头
Row row = sheet.createRow(0);
row.setHeightInPoints(20);
// 设置标题: 第1行用于设置字段名
Row rowTitle = sheet.createRow(0);
rowTitle.setHeightInPoints(20);
// 字段名一一赋值,
Cell fillCell;
for (int i = 0; i < title.length; i++) {
fillCell = rowTitle.createCell(i);
fillCell.setCellValue(title[i]);
}
byte result[] = null;
ByteArrayOutputStream output = null;
try {
// 创建表格数据
Field[] fields;
int i = 1;
for (Object rowObj : list) {
// 反射获取对象数组
fields = rowObj.getClass().getDeclaredFields();
// 创建行
Row rowBody = sheet.createRow(i);
// 设置行高
rowBody.setHeightInPoints(20);
int j = 0;
// 获取一个实体类对象的属性名
for (Field field : fields) {
// 如果类中的成员变量为private,必须进行此操作
field.setAccessible(true);
// 获得对应实体类对象对应属性名的值,比如: field = id, 则 entityObj 就是 id对应的值
Object entityObj = field.get(rowObj);
// 如果取的值为null,则置"", 否则导出出现异常
if (entityObj == null) {
entityObj = "";
}
// 创建单元格
fillCell = rowBody.createCell(j);
fillCell.setCellValue(entityObj.toString());
j++;
}
i++;
}
output = new ByteArrayOutputStream();
// 生成的excel写入字符流中
wb.write(output);
// 转换成字节数组
result = output.toByteArray();
} catch (Exception ex) {
Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (null != output) {
output.close();
}
} catch (IOException ex) {
Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
wb.close();
} catch (IOException ex) {
Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
return result;
}
}
b.编写接口
@GetMapping("/exportStuScoresExcel")
public void exportStuScoreExcel(HttpServletResponse response, Student st) throws UnsupportedEncodingException {
String id = st.getId();
System.out.println();
String[] heads = {"姓名", "年龄"};
List<Student> list = new ArrayList<>();
Student s = new Student();
s.setId("1");
s.setName("2");
list.add(s);
byte[] Excel = ExportExcelUtil.exportExcel("学生成绩", heads, list); // 调用工具类
String fileName = "sdd";
// 响应设置
response.addHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));//这种方式mac和windows导出的文件名就不会乱码
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.addHeader("Content-Transfer-Encoding", "binary");
ServletOutputStream outputStream = null;
try {
response.setStatus(HttpStatus.OK.value());
outputStream = response.getOutputStream();
outputStream.write(Excel);
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、存到服务器上
导出csv文件
String filename = "xxx.csv";
File file = new File(filePath);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
csvWriter = new CsvWriter(bw, ',');
csvWriter.setForceQualifier(true);
csvWriter.setUseTextQualifier(true);
String[] vs = new String[]{"a","b"};
csvWriter.writeRecord(vs);