FistTest
项目要做导出功能 首先想到poi 然后搜了个工具类
这个工具类的做法是传一个List
String[] str={"字段1#filed1","字段2#filed2"...} 这种格式通过反射来自动导出
好用是好用 但是局限性太大 几十条数据不明显 1000多条数据而已居然要导出两分钟 气哭
然后我果断弃坑...
SecondTest
忘了什么途径看到easypoi 就拿来试了下 导出速度确实上来了
说下easypoi遇到的坑 想给标题行字体加粗找不到地方
百度半天没找到有点用的帮助==.
http://easypoi.mydoc.io/#text_202980
最后通过这个文档找到了解决办法
我这边先简单说下easypoi的使用
1.首先是pom文件配置 添加如下
cn.afterturn
easypoi-base
3.1.0
cn.afterturn
easypoi-web
3.1.0
cn.afterturn
easypoi-annotation
3.1.0
2.实体里边
@Excel(name = "生日", orderNum = "10",exportFormat = "yyyy-MM-dd",width=16)
private Date bitThday;//预放款日期
name 导出标题列名字 orderNum第几列 从0开始 exportFormat日期导出格式 非日期可以不写 width列宽 不填默认10
3.然后主要导出的方法是这个
ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
ExportParams exportParams是导出要传的参数 pojoClass是要导出的实体 list是要导出的数据集合
这是easypoi自带的工具类里的方法 返回值是
Workbook workbook 后边还需要做个数据流写到响应里 如下:
private static void downLoadExcel(String fileName, HttpServletResponse response, HttpServletRequest request, Workbook workbook) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String now = sdf.format(new Date());//加时间戳
fileName = fileName + now + ".xls";
final String userAgent = request.getHeader("USER-AGENT");
String finalFileName = null;
if (userAgent.contains("Mozilla") || userAgent.contains("Chrome")) {//google,火狐浏览器
finalFileName = new String(fileName.getBytes(), "ISO8859-1");
} else {
finalFileName = URLEncoder.encode(fileName, "UTF8");//其他浏览器
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + finalFileName + "\"");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
workbook.write(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
(补充说一下跟前端交互的坑 前端是用vue 然后用里边的axios 直接用里边的post或者get方法浏览器不会下载,需要写方法处理...还有就是后边能下载了但是拿不到 Content-Disposition里我传的文件名 哎 ..心累)
然后说重点了
想给标题行加样式需要传ExportParams exportParams的时候set其中的一个熟悉style 要传一个class类
工具默认传的是
ExcelExportStylerDefaultImpl.class这样一个实体类
而我们要设置的标题行字体加粗和背景颜色也就在这里
首先复制一个这个class的代码 然后自己新建一个除了类名其他都一样的类
最后在getTitleStyle里加上字体加粗以及设置颜色的代码就行 如下
标箭头的是我添的行---
如此解决问题