jws 方式表格导出,excel文件导出,rest风格接口实现

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

一、思路:从数据库表中查出list ,封装到 HSSFWorkook 中,再由HSSFWorkook  写出到 File 中,

用 response 的 build 方法  实现下载、导出。

 

二、 实现代码:

要加上注解 :@Produces ,文本就写 text , 图片写  img ( 如果我没有记错的话)

 

  @Path("/exportWWCollectReport")@Produces("text/plain")@GET@Overridepublic 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;

 

 @Overridepublic 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 格式的表格, 可以保存极大的数据量。

 

生成的临时文件存放在工程中,记得删除。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

先思再行 闭着眼睛编程

摘要&#xff1a;解决问题最重要的习惯不是一直盯着屏幕和编写修改代码&#xff0c;某些时候&#xff0c;阻止你成功的东西恰恰会是过于努力。这时候你需要暂停一下&#xff0c;平缓你的思绪&#xff0c;换一种方法或许能带给你不一样的效果。你会花多少时间思考如何编写代码&a…

javaScript复习

ES6字符串方法&#xff1a; //console.log(String.prototype);var str "abcdefabc";//console.log(str.includes("a"));//结果true//console.log(str.includes("abf"));//结果false//console.log(str.startsWith("d"));//false//cons…

STS的安装教程-鹏鹏

STS全称Spring Tools Suite。 简介&#xff1a;Spring Tools Suite (STS)其实就是一个被包装过的Eclipse&#xff0c;主要用于快速的开发Spring项目&#xff0c;我们不用再去编辑繁琐的xml配置文件&#xff0c;而是由工具自动生成。STS有两种安装方式&#xff0c;一种是直接在E…

final的用法

final 根据程序上下文环境&#xff0c;Java关键字final有“这是无法改变的”或者“终态的”含义&#xff0c;它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变&#xff1a;设计或效率。 final类不能被继承&#xff0c;没有子类&#xff0c;f…

爱恨交织的编程语言 是什么吸引了你

摘要&#xff1a;每门编程语言都有自身独特的地方&#xff0c;那么为什么有些语言会一直存活在我们周围&#xff0c;而有些语言却逐渐被人淡忘&#xff0c;是什么吸引你&#xff1f; 每名程序员至少知道两门以上的编程语言&#xff0c;有些甚至不是所谓的编程语言&#xff08;比…

Unable to parse the date: 2017-12-30 日期格式转化失败

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff0c; 日期格式转化失败。 原因&#xff1a;参数是2017-09-23 这种格式&#xff0c;代码却是写的转为&#xff1a; &qu…

linux逻辑卷管理

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a; Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小&#xff0c;以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时&#xff0c;解决的方法通常是使用符…

[LeedCode]921. 使括号有效的最少添加

题目描述&#xff1a; 给定一个由 ( 和 ) 括号组成的字符串 S&#xff0c;我们需要添加最少的括号&#xff08; ( 或是 )&#xff0c;可以在任何位置&#xff09;&#xff0c;以使得到的括号字符串有效。从形式上讲&#xff0c;只有满足下面几点之一&#xff0c;括号字符串才是…

abstract的一些用法

&#xfeff;&#xfeff;abstract&#xff08;抽象&#xff09;修饰符&#xff0c;可以修饰类和方法 1&#xff0c;abstract修饰类&#xff0c;会使这个类成为一个抽象类&#xff0c;这个类将不能生成对象实例&#xff0c;但可以做为对象变量声明的类型&#xff0c;也就是编译…

github 如何设置项目的语言显示

github 会根据一个项目文件最多的那个种类的文件显示为对应的语言项目 如果想让整个项目显示为 HTML 项目, 需要进行以下步骤的设置 1.在根目录下创建一个文件 .gitattributescreate .gitattributes2.在 .gitattributes 内编辑以下内容&#xff1a; *.js linguist-languageHTML…

C++提高进阶,你知道多少?

C从零开始 ——何谓编程 引言 曾经有些人问我问题&#xff0c;问得都是一些很基础的问题&#xff0c;但这些人却已经能使用VC编一个对话框界面来进行必要的操作或者是文档/视界面来实时接收端口数据并动态显示曲线&#xff08;还使用了多线程技术&#xff09;&#xff0c;却连…

POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)

这两题好像是一样的&#xff0c;就是3177要去掉重边。 但是为什么要去重边呢&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;我认为如果有重边的话&#xff0c;应该也要考虑在内才是。 这两题我用了求割边&#xff0c;在去掉割边&#xff0c;用DFS缩…

postman界面变成了左右结构怎么办

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在左上角 file -- settongs中设置一下&#xff1a;

面向对象阶段个人总结

&#xfeff;&#xfeff;面向对象阶段的个人总结 我个人对面相对向的总结。我想到了我认为比较好的方法&#xff0c;就是对照每次学习一个大模块的前的章节目录进行回顾总结&#xff0c;比如我们这阶段学习是面向对象的课程&#xff0c;下面我就来按照章节 目录进行一个系统…

1.springboot:入门程序

一、Spring Boot 简介 官网英文&#xff1a; Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get st…

2018.12.18运算符,分支结构(循环),异常处理,函数

1复习 <!DOCTYPE html><html><head> <meta charset"UTF-8"> <title>复习预习</title> <style> .b { /* 作用域: {}产生的, {作用域开始的标识, }作用域结束的标识 */ /*出现在作用域中的所有内…

javax.ws.rs.NotSupportedException: Cannot consume content type

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff1a;javax.ws.rs.NotSupportedException: Cannot consume content type 解决&#xff1a;使用postman发送 post 请求访…

java异常预习

java中的异常捕获结构有try&#xff0c;catch&#xff0c;finally三部分组成。其中&#xff0c;try语句块存放的是可能发生异常的java语句&#xff1b;catch程序块在try语句块之后&#xff0c;用来激发被捕获的异常&#xff1b;finally语句块是异常处理结构的最后执行部分&…

【亲测有效】Kali Linux无法安装网易云音乐的解决方案

问题描述 由于 Kali Linux 的内核是基于 Debian 的&#xff0c;我们在安装网易云音乐的时候更偏向于选择安装网易云音乐 v1.1.0 deepin15&#xff08;64位&#xff09; 的包&#xff0c;可是我发现在安装过程中&#xff0c;无法定位 libqcef1 软件包&#xff0c;对于很多钟爱网…

C/C++函数名修饰约定

函数名字修饰&#xff08;Decorated Name&#xff09;方式 函数的名字修饰&#xff08;Decorated Name&#xff09;就是编译器在编译期间创建的一个字符串&#xff0c;用来指明函数的定义或原型。 正在装载数据…… LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的…