jws 方式表格导出,excel文件导出,rest风格接口实现
2018-01-17 13:05
676 查看
一、思路:从数据库表中查出list ,封装到 HSSFWorkook 中,再由HSSFWorkook 写出到 File 中,
用 response 的 build 方法 实现下载、导出。
二、 实现代码:
要加上注解 :@Produces ,文本就写 text , 图片写 img ( 如果我没有记错的话)
@Path("/exportWWCollectReport")
@Produces("text/plain")
@GET
@Override
public Response exportWorkWeights(
@QueryParam("tableName") @DefaultValue("工作权重统计报表") String tableName,
@QueryParam("startTime") String startTime,
@QueryParam("endTime") String endTime,
@QueryParam("employeeNo") String employeeNo,
@QueryParam("organizeId") String organizeId,
@QueryParam("employeeName") String employeeName,
@QueryParam("position") String position,
@QueryParam("jobTypeId") String jobTypeId,
@QueryParam("projectId") String projectId) {
try{
return workWeightCollectService.exportWorkWeights(tableName, startTime, endTime, employeeNo,
organizeId, employeeName, position, jobTypeId, projectId);
}catch (Exception ex){
logger.debug("工作权重统计报表导出失败:",ex.getMessage());
return null;
}
}
要导这个包下的 response :
import javax.ws.rs.core.Response; @Override
public Response exportWorkWeights(String tableName, String startTime, String endTime, String employeeNo,
String organizeId, String employeeName, String position, String jobTypeId, String projectId) throws Exception {
// 要导出的列表数据
String sql = getWorkWeightCollectReportSql( startTime, endTime, employeeNo,
organizeId, employeeName, position, jobTypeId, projectId);
List<Object> wwList = getResultList(sql);
if (null == wwList){
return null;
}
List<List<Object>> list = new ArrayList<List<Object>>(); // list 是要导出的表数据
WorkWeightDto ww = null;
String startT = null;
String endT = null;
WorkWeightDto wwdto = new WorkWeightDto();
for (Object ob : wwList) {
Object[] obj = (Object[])ob;
List<Object> dataList = new ArrayList<Object>();
startT = String.valueOf(obj[0]) == null ? "":String.valueOf(obj[0]);
endT = String.valueOf(obj[1]) == null ? "": String.valueOf(obj[1]);
dataList.add(startT+" 至 "+endT);
dataList.add(String.valueOf(obj[2]) == null ? "":String.valueOf(obj[2])); // 工号
dataList.add(String.valueOf(obj[10]) == null ? "":String.valueOf(obj[10])); // 中心
String bu = String.valueOf(obj[11]);
wwdto = setOrganizeBu(wwdto, bu);
String ke = String.valueOf(obj[12]);
wwdto = setOrganizeKe(wwdto,ke);
String shi = String.valueOf(obj[13]);
if(shi.substring(shi.length()-2,shi.length()).contains("室")){
wwdto.setShi(shi);
}else {
wwdto = setOrganizeKe(wwdto, shi);
}
dataList.add(wwdto.getBu()); // 部
dataList.add(wwdto.getKe()); // 科
dataList.add(wwdto.getShi()); // 室
dataList.add(String.valueOf(obj[3]) == null ? "":String.valueOf(obj[3])); //姓名
dataList.add(String.valueOf(obj[8]) == null ? "":String.valueOf(obj[8])); // 职级
dataList.add(String.valueOf(obj[5]) == null ? "":String.valueOf(obj[5])); // 工作类型
dataList.add(String.valueOf(obj[7]) == null ? "":String.valueOf(obj[7])); // 项目
dataList.add(String.valueOf(obj[9]) == null ? "":String.valueOf(obj[14])); // 工作任务
dataList.add(String.valueOf(obj[9]) == null ? "":String.valueOf(obj[9])); // 比例
list.add(dataList);
}
//表头
String[] headers = new String[]{"所属周期","工号","中心","部门","科","室","姓名","职级","工作类型","项目","工作任务","比例"};
FileOutputStream fileOut = null;
try{
HSSFWorkbook workbook = ExportUtil.excelOut(headers, list);
fileOut = new FileOutputStream(tableName+".xlsx");
workbook.write(fileOut);
// 以上是写入文件,以下是下载文件
File file = new File(tableName+".xlsx");
Response.ResponseBuilder response = Response.ok(file);
response.header("Content-Disposition","attachment; filename=" +new String((tableName+".xlsx").getBytes("gbk"), "iso8859-1"));
return response.build();
} catch (Exception e){
e.printStackTrace();
return null;
}
finally {
fileOut.close();
}
}
另: xlsx 格式的表格,容量数据条数有上限,大约是36000+条数据。建议使用 csv 格式的表格, 可以保存极大的数据量。
生成的临时文件存放在工程中,记得删除。
用 response 的 build 方法 实现下载、导出。
二、 实现代码:
要加上注解 :@Produces ,文本就写 text , 图片写 img ( 如果我没有记错的话)
@Path("/exportWWCollectReport")
@Produces("text/plain")
@GET
@Override
public Response exportWorkWeights(
@QueryParam("tableName") @DefaultValue("工作权重统计报表") String tableName,
@QueryParam("startTime") String startTime,
@QueryParam("endTime") String endTime,
@QueryParam("employeeNo") String employeeNo,
@QueryParam("organizeId") String organizeId,
@QueryParam("employeeName") String employeeName,
@QueryParam("position") String position,
@QueryParam("jobTypeId") String jobTypeId,
@QueryParam("projectId") String projectId) {
try{
return workWeightCollectService.exportWorkWeights(tableName, startTime, endTime, employeeNo,
organizeId, employeeName, position, jobTypeId, projectId);
}catch (Exception ex){
logger.debug("工作权重统计报表导出失败:",ex.getMessage());
return null;
}
}
要导这个包下的 response :
import javax.ws.rs.core.Response; @Override
public Response exportWorkWeights(String tableName, String startTime, String endTime, String employeeNo,
String organizeId, String employeeName, String position, String jobTypeId, String projectId) throws Exception {
// 要导出的列表数据
String sql = getWorkWeightCollectReportSql( startTime, endTime, employeeNo,
organizeId, employeeName, position, jobTypeId, projectId);
List<Object> wwList = getResultList(sql);
if (null == wwList){
return null;
}
List<List<Object>> list = new ArrayList<List<Object>>(); // list 是要导出的表数据
WorkWeightDto ww = null;
String startT = null;
String endT = null;
WorkWeightDto wwdto = new WorkWeightDto();
for (Object ob : wwList) {
Object[] obj = (Object[])ob;
List<Object> dataList = new ArrayList<Object>();
startT = String.valueOf(obj[0]) == null ? "":String.valueOf(obj[0]);
endT = String.valueOf(obj[1]) == null ? "": String.valueOf(obj[1]);
dataList.add(startT+" 至 "+endT);
dataList.add(String.valueOf(obj[2]) == null ? "":String.valueOf(obj[2])); // 工号
dataList.add(String.valueOf(obj[10]) == null ? "":String.valueOf(obj[10])); // 中心
String bu = String.valueOf(obj[11]);
wwdto = setOrganizeBu(wwdto, bu);
String ke = String.valueOf(obj[12]);
wwdto = setOrganizeKe(wwdto,ke);
String shi = String.valueOf(obj[13]);
if(shi.substring(shi.length()-2,shi.length()).contains("室")){
wwdto.setShi(shi);
}else {
wwdto = setOrganizeKe(wwdto, shi);
}
dataList.add(wwdto.getBu()); // 部
dataList.add(wwdto.getKe()); // 科
dataList.add(wwdto.getShi()); // 室
dataList.add(String.valueOf(obj[3]) == null ? "":String.valueOf(obj[3])); //姓名
dataList.add(String.valueOf(obj[8]) == null ? "":String.valueOf(obj[8])); // 职级
dataList.add(String.valueOf(obj[5]) == null ? "":String.valueOf(obj[5])); // 工作类型
dataList.add(String.valueOf(obj[7]) == null ? "":String.valueOf(obj[7])); // 项目
dataList.add(String.valueOf(obj[9]) == null ? "":String.valueOf(obj[14])); // 工作任务
dataList.add(String.valueOf(obj[9]) == null ? "":String.valueOf(obj[9])); // 比例
list.add(dataList);
}
//表头
String[] headers = new String[]{"所属周期","工号","中心","部门","科","室","姓名","职级","工作类型","项目","工作任务","比例"};
FileOutputStream fileOut = null;
try{
HSSFWorkbook workbook = ExportUtil.excelOut(headers, list);
fileOut = new FileOutputStream(tableName+".xlsx");
workbook.write(fileOut);
// 以上是写入文件,以下是下载文件
File file = new File(tableName+".xlsx");
Response.ResponseBuilder response = Response.ok(file);
response.header("Content-Disposition","attachment; filename=" +new String((tableName+".xlsx").getBytes("gbk"), "iso8859-1"));
return response.build();
} catch (Exception e){
e.printStackTrace();
return null;
}
finally {
fileOut.close();
}
}
import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignment; import java.io.FileOutputStream; import java.util.List; public class ExportUtil { public static HSSFWorkbook excelOut(String[] cloumName, List<List<Object>> list){ //声明一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //生成一个表格 HSSFSheet sheet = workbook.createSheet(); //设置表格默认列宽度为20个字符 sheet.setDefaultColumnWidth(20); //生成一个样式,用来设置标题样式 HSSFCellStyle style = workbook.createCellStyle(); // 表头居中 style.setAlignment(HorizontalAlignment.CENTER); //生成一个字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 12); // 字体高度 font.setFontName(" 黑体 "); // 字体 //把字体应用到当前的样式 style.setFont(font); // 生成并设置另一个样式,用于设置内容样式 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setAlignment(HorizontalAlignment.CENTER); // 生成另一个字体 HSSFFont font2 = workbook.createFont(); font2.setFontName(" 黑体 "); // 字体 // 把字体应用到当前的样式 style2.setFont(font2); HSSFRow row = sheet.createRow(0); for(int i = 0; i < cloumName.length; i++){ //单元格 HSSFCell cellHead = row.createCell(i); cellHead.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(cloumName[i]); cellHead.setCellValue(text); } for (int i = 0; i < list.size(); i++){ row = sheet.createRow(i + 1); List<Object> dataList = list.get(i); for (int j = 0; j < dataList.size(); j++) { // 表格内容样式设置 HSSFCell cellHead = row.createCell(j); cellHead.setCellStyle(style2); HSSFRichTextString text = new HSSFRichTextString(String.valueOf(dataList.get(j))); // 为空 if(text == null || text.toString() == ""){ cellHead.setCellValue(""); } /* // 整数,不为电话 else if(ValidateUtils.isInteger(String.valueOf(text)) && !(StringUtils.startsWith(String.valueOf(text),"1") && String.valueOf(text).length() == 11)){ cellHead.setCellValue(Integer.parseInt(String.valueOf(text))); } // 有小数、或为电话 else if(ValidateUtils.isDouble(dataList.get(j).toString())){ cellHead.setCellValue(Double.parseDouble(String.valueOf(text))); }*/ // 字符串 else{ cellHead.setCellValue(String.valueOf(text)); } } } return workbook; } }
另: xlsx 格式的表格,容量数据条数有上限,大约是36000+条数据。建议使用 csv 格式的表格, 可以保存极大的数据量。
生成的临时文件存放在工程中,记得删除。
相关文章推荐
- 将Table数据导出至Excel文件(中国移动实现的方式)
- 将Table数据导出至Excel文件(中国移动实现的方式)
- 将Table数据导出至Excel文件(中国移动实现的方式)
- 将Table数据导出至Excel文件(中国移动实现的方式)
- MVC 实现表格数据导出Excel(NPOI方式)
- php导出 excel文件 实现方式
- 针对Excel表格文件操作的编程实现
- 针对Excel表格文件操作的编程实现
- VC:用ADO方式实现把CListCtrl数据写成Excel文件
- 将(Oracle)数据库表导出到Excel,并生成文件(C#实现)
- 实现各种文件的下载方法:用于 WEB上的报表导出(jxl 实现Excel报表下载),核心思想就是将文件的输出流传给HttpResponseOutputStream 里就成了。
- 用FLEX实现屏幕快照及下载 flex导出excel文件
- jsp中使用EXCEL组件将表格导出为EXCEL文件
- Php代码实现将mysql数据库导出为excel表格形式
- JAVASCRIPT将网页表格导出EXCEL或WORD文件
- .net导出EXCEL文件操作类包括格式较复杂表格导出
- JAVASCRIPT将网页表格导出EXCEL或WORD文件
- 针对Excel表格文件操作的编程实现
- 把DataSet所有数据表导出到Excel表格文件(在前人基础上只是稍作了一下修改)
- 实现将 GridView 导出到 Excel文件中