POI导出表格到浏览器工具类

要封装的实体bean类

public class Question {private String id;            //题目IDprivate String companyId;    //所属企业private String catalogId;    //题目所属目录IDprivate String remark;        //题目简介private String subject;     //题干private String picture;     //图片private String analysis;    //题目分析private String type;        //题目类型  1:单选,2:多选,3:简答private String difficulty;    //难易程度: 1极易 2容易 3普通  4困难  5极难private String isClassic;    //是否经典面试题 0:否 1:是private String state;    //题目状态  0:不可用  1:可用(只有审核通过的题目才可以设置)private String reviewStatus;//审核状态  -1 审核不通过  0 审核中   1 审核通过// 如果要进行的是多表查询,你需要提供对象的属性值和想要对象那个值的get方法private Company company;private Catalog catalog;public String getCatelogName() {return catalog.getName();}public String getCompanyName() {return company.getName();}

业务层使用代码

     // 调用查询全部方法,由持久层提供查询的数据集合List<Question> questions = questionMapper.findAll();// 创建excl导出对象工厂类PoiFactory poiFactory = new PoiFactory();// 准备要导出的数据和表头LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();linkedHashMap.put("id", "题目ID");linkedHashMap.put("companyName", "所属企业名称");linkedHashMap.put("catelogName", "题目所属目录名称");linkedHashMap.put("remark", "题目简介");linkedHashMap.put("subject", "题干");linkedHashMap.put("picture", "图片");linkedHashMap.put("analysis", "题目分析");linkedHashMap.put("type", "题目类型  1:单选,2:多选,3:简答");linkedHashMap.put("difficulty", "难易程度: 1极易 2容易 3普通  4困难  5极难");linkedHashMap.put("isClassic", "是否经典面试题 0:否 1:是");linkedHashMap.put("state", "题目状态  0:不可用  1:可用");linkedHashMap.put("reviewStatus", "审核状态  -1 审核不通过  0 审核中   1 审核通过");// 设置表头名字poiFactory.setHeaderName("在线试题导出信息");// 返回传递给浏览器的ByteArrayOutputStream对象ByteArrayOutputStream os = poiFactory.autoPioOs(questions, linkedHashMap, Question.class);

excl导出对象工厂类

public class PoiFactory {// 定义题目名称和表头名称,如果未设置数据则使用空private String wordName = "";private String headerName = "";/*** 调用方法创建文件到服务器* @param obj       可以调用持久层的方法得到一个list集合将集合传入* @param map       key为bean的属性值,value为你要设置的表头* @param clazz     要传入bean的字节码对象* @param <E>*/public <E> void autoPio(List<E> obj, LinkedHashMap<String, String> map, Class<E> clazz) {// 创建工作簿XSSFWorkbook work = new XSSFWorkbook();// 创建工作表XSSFSheet sheet = work.createSheet();// 创建表头数据XSSFRow row_1 = sheet.createRow(0);XSSFCell cell_1_1 = row_1.createCell(0);cell_1_1.setCellValue(headerName);// 将map集合拆分Set<String> list = map.keySet();Object[] objects = map.values().toArray();// 设置表头String header;// 第二行设置XSSFRow row_2 = sheet.createRow(1);for (int i = 0; i < objects.length; i++) {header = (String) objects[i];row_2.createCell(i).setCellValue(header);}// 制作数据区// 循环集合创建集合的对象,每个对象为一行,每个对象里的值为一个单元格try {for (int i = 0; i < obj.size(); i++) {E bean = clazz.newInstance();bean = obj.get(i);// 创建第几行XSSFRow row = sheet.createRow(i + 2);// 创建存储数据的集合ArrayList<String> data = new ArrayList<>();// 获取所有传入的方法并存入集合for (String string : list) {// 获取方法对应的PropertyDescriptorPropertyDescriptor proDescriptor = new PropertyDescriptor(string, clazz);// 获取方法String invoke = (String) proDescriptor.getReadMethod().invoke(bean);System.out.println(invoke);// 将得到get方法的值存入集合data.add(invoke);}// 将数据写入单元格中for (int j = 0; j < data.size(); j++) {row.createCell(j).setCellValue(data.get(j));}}// 从内存写出到文件work.write(new FileOutputStream(new File(wordName + ".xlsx")));// 释放资源work.close();} catch (Exception e) {System.out.println("调用autoPio方法制作数据区时出现异常");throw new RuntimeException(e);}}/*** 调用方法创建文件将文件的字节流返回* @param obj       可以调用持久层的方法得到一个list集合将集合传入* @param map       key为bean的属性值,value为你要设置的表头* @param clazz     要传入bean的字节码对象* @param <E>* @return*/public <E> ByteArrayOutputStream autoPioOs(List<E> obj, LinkedHashMap<String, String> map, Class<E> clazz) {// 创建工作簿XSSFWorkbook work = new XSSFWorkbook();// 创建工作表XSSFSheet sheet = work.createSheet();// 创建表头数据XSSFRow row_1 = sheet.createRow(0);XSSFCell cell_1_1 = row_1.createCell(0);cell_1_1.setCellValue(headerName);// 将map集合拆分Set<String> list = map.keySet();Object[] objects = map.values().toArray();// 设置表头String header;// 第二行设置XSSFRow row_2 = sheet.createRow(1);for (int i = 0; i < objects.length; i++) {header = (String) objects[i];row_2.createCell(i).setCellValue(header);}// 制作数据区// 循环集合创建集合的对象,每个对象为一行,每个对象里的值为一个单元格ByteArrayOutputStream os = null;try {for (int i = 0; i < obj.size(); i++) {E bean = clazz.newInstance();bean = obj.get(i);// 创建第几行XSSFRow row = sheet.createRow(i + 2);// 创建存储数据的集合ArrayList<String> data = new ArrayList<>();// 获取所有传入的方法并存入集合for (String string : list) {// 获取方法对应的PropertyDescriptorPropertyDescriptor proDescriptor = new PropertyDescriptor(string, clazz);// 获取方法String invoke = (String) proDescriptor.getReadMethod().invoke(bean);System.out.println(invoke);// 将得到get方法的值存入集合data.add(invoke);}// 将数据写入单元格中for (int j = 0; j < data.size(); j++) {row.createCell(j).setCellValue(data.get(j));}}//输出时通过流的形式对外输出,包装对应的目标文件
//            os = new FileOutputStream(new File(wordName + ".xlsx"));os = new ByteArrayOutputStream();// 从内存写出到文件work.write(os);// 释放资源work.close();} catch (Exception e) {System.out.println("调用autoPioOs方法制作数据区时出现异常");throw new RuntimeException(e);}// 返回流对象return os;}public String getWordName() {return wordName;}public void setWordName(String wordName) {this.wordName = wordName;}public String getHeaderName() {return headerName;}public void setHeaderName(String headerName) {this.headerName = headerName;}
}

servlet返回到浏览器

try {//返回的数据类型为文件xlsx类型response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");String fileName = new String("题目数据.xlsx".getBytes(),"iso8859-1");response.addHeader("Content-Disposition","attachment;fileName="+fileName);//生成报告的文件,然后传递到前端页面ByteArrayOutputStream os = questionService.getReport();// 创建浏览器响应输出流对象ServletOutputStream sos = response.getOutputStream();os.writeTo(sos);sos.flush();os.close();} catch (IOException e) {e.printStackTrace();}

POI导出表格到浏览器工具类,poi工具类相关推荐

  1. POI导出表格Java代码实现

    POI导出表格 1. 引入依赖 2. Excel导出核心代码 2.1 核心代码导入包 2.2 核心util代码 2.3 Controller表格导出实现 3. Excel导出结果展示 3.1 导出链接 ...

  2. POI导出Excel,浏览器不下载的问题解决

    在做POI导出Excel的时候,遇到了浏览器不弹出下载框的问题 问题发现 debug跟进发现输出流已经成功写入,而且程序没有报错,可就是没有下载提示 在前台控制器的XHR-response中查看返回数 ...

  3. Springboot POI导出Excel(浏览器)

    需求:页面根据查询条件导出(浏览器) 由于本次导出数据量较大,这里采用XSSFWorkbook多线程进行导出,注:XSSFWorkbook导出excel文件结尾为:".xlsx". ...

  4. java导出表格vsd_java - 如何使用Apache POI将vsd / vsdx文件转换为图像(例如jpg png) - 堆栈内存溢出...

    我正在使用apache poi读取doc / docx文件. 现在,我可以从文档文件中提取段落和图片. 当我的doc文件中有vsd时,如何将vsd转换为png图像? 我尝试了这个: private b ...

  5. Spring Boot poi 导出Excel表格、Txt到浏览器下载

    Spring Boot & poi 导出Excel表格.Txt到浏览器下载 原文链接:小回博客 文章目录 Spring Boot & poi 导出Excel表格.Txt到浏览器下载 一 ...

  6. java excel 导出图片_JAVA 使用 POI 导出 EXCEL 自定义背景颜色

    开发中常用表格导入和导出 Excel 是常见的功能. 在这里分享下使用 POI 导出表格的简单实现,也是为大家提供个思路吧,抛砖引玉,话不多说直接上代码. 1.项目引入 maven 依赖 <!- ...

  7. 【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)

    讲点废话,吐个槽 最近有个要求,表格导出,之前也搞过,但觉得每次都到处找太麻烦了,有些大佬,展示部分代码,看着挺多个类,复制粘贴运行就报错,一检查,少个关键类,没办法跑,要么就是标注个什么什么大全,下 ...

  8. POI导出Excel工具类(简单看完就会)

    (一)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...

  9. 如何使用POI导出excel表格,以及处理浏览器无法识别下载文件的问题

    2022年5月31日更新, 推荐easyExcel或者Crab2Died/Excel4J, 使用起来很方便 废话不多说, 直接上代码. 1. 依赖 <properties><poi. ...

最新文章

  1. KEGG功能注释工具 KofamKOALA 安装与使用
  2. Quartz使用示例总结
  3. sql server 字符串转table
  4. 游戏人物标记——腾讯笔试
  5. python合并多个pdf_pypdf将多个pdf文件合并到一个pd中
  6. matlab实验函数编写与程序设计,matlab实验四函数编写与程序设计
  7. r语言之生成随机序列,随机数生成函数及用法
  8. 解锁新的“维权方式”?车主放花圈维权!特斯拉大怒:低俗方法滋事
  9. RadioButtonList控件绑定图片Vertical对齐
  10. 北京上海等昨天大规模断网 专家称与太阳无关
  11. 论文赏析[NAACL19]基于DIORA的无监督隐式句法树归纳
  12. 如何在Mac电脑上更改地区或国家位置设定?
  13. 机械设计基础课程设计详细步骤(说明书)
  14. 2021-09-29 使用sql查询oracle建表语句
  15. 统计学和计算机的关系,浅议统计学与其他学科的关系
  16. 软件系统设计-16-架构文档
  17. 避免2.4GHz ISM频段各种类型无线设备干扰的技术【转】
  18. Python尝试爬取同花顺A股行情
  19. oauth2 ldap sso
  20. 局域网访问提示无法访问检查拼写_win10无法访问局域网电脑 请检查名称的拼写...

热门文章

  1. String …params
  2. 大学生暑期短学期实验报告总结关于计算机编程,浙大电院短学期潮流综合实验实验报告(含源程序).doc...
  3. 如何组装一台安全机器人?天线是必不可少的组件
  4. 详解 三种蓝牙协议栈方案
  5. 调和级数python实现
  6. python字符串正则替换_Python用正则表达式进行字符串替换方法
  7. HTML555---表格和表单
  8. linux系统如何连接串口,Linux下如何测试及使用USB转串口线
  9. mobiscroll之treelist使用
  10. SQL Server 127个SQL server热门资料汇总