起因:

之前利用反射生成excel导出,这个组件本来挺好用的,结果,坑爹的本地研发没有问题,生产环境却有问题。不知道什么原因直接导致服务重启,还重新加载类,直接导致jvm的永久区内存溢出。

异常: java.lang.OutOfMemoryError: PermGen space

说明:

Perm空间被占满。无法为新的class分配存储空间而引发的异常。这个异常以前是没有的,但是在Java反射大量使用的今天这个异常比较常见了。主要原因就是大量动态反射生成的类不断被加载,最终导致Perm区被占满。

更可怕的是,不同的classLoader即便使用了相同的类,但是都会对其进行加载,相当于同一个东西,如果有N个classLoader那么他将会被加载N次。因此,某些情况下,这个问题基本视为无解。当然,存在大量classLoader和大量反射类的情况其实也不多。

解决方案:可以针对单独的一个数据对象写一个excel 表格的生成。缺点:不能通用,我在赶任务的时候就是这样干的。

后来工作任务没这么重了,我在空闲时间想到可以利用json数据。利用json来取值,可以达到通用性的

maven 引用

net.sf.json-lib

json-lib

2.4

jdk15

org.apache.poi

poi-ooxml

3.16-beta2

基本代码:

packagecom.example;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;importorg.apache.poi.hssf.usermodel.HSSFCellStyle;importorg.apache.poi.hssf.usermodel.HSSFRow;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.hssf.util.HSSFColor;public classTest {public static voidmain(String[] args) {//TODO Auto-generated method stub

List list = new ArrayList();

TestBoby a= newTestBoby();

TestBoby b= newTestBoby();

a.setName("aa");

a.setAge(3);

b.setAge(4);

b.setName("nn");

list.add(b);

list.add(a);

JSONArray json= JSONArray.fromObject(list); //首先把字符串转成 JSONArray 对象

String[] heads={"name","age"};

Export2Excel(heads,heads,json);

}public static voidExport2Excel(String[] heads,String[] names,JSONArray jsonArray) {

HSSFWorkbook workbook= new HSSFWorkbook();//创建一个Excel文件

HSSFSheet sheet= workbook.createSheet();//创建一个Excel的Sheet

HSSFCellStyle style=workbook.createCellStyle();

style.setFillBackgroundColor(HSSFColor.BLUE_GREY.index);

HSSFRow titleRow= sheet.createRow(0);for(int i=0;i

titleRow.createCell(i).setCellValue(heads[i]);

}

titleRow.setRowStyle(style);if (jsonArray.size() > 0) {for (int i = 0; i < jsonArray.size(); i++) {

HSSFRow row= sheet.createRow(i + 1);

JSONObject json= jsonArray.getJSONObject(i); //遍历 jsonarray

for(int j=0;j

row.createCell(j).setCellValue(json.get(names[j]).toString());

}

}

}try{

FileOutputStream fos= new FileOutputStream("a.xls");

workbook.write(fos);

fos.close();

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

View Code

java的json导出excel_利用json生成excel表格相关推荐

  1. java poi 生成excel_利用POI生成EXCEL文件的方法实例

    一.背景 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修 ...

  2. java使用POI导出word数据以及生成word表格

    暑期在杭州实习了两个月,主要是使用vue+SpringMVC进行一个网页开发. 而在开发的过程中,也遇到了比较常见的文件导出问题–以固定格式将数据存储在word.excel等office文件格式中. ...

  3. html利用js生成excel表格(html表格标签生成excel)table2excel实例:一表格多sheets

    table2excel实例 使用插件:table2excel.js 简介:table2excel 可以转换和下载html上的表格,使他成为.xlsx格式,能够被Excel打开 实例代码 <hea ...

  4. pandas后台导出excel_利用pandas将numpy数组导出生成excel

    代码 # -*- coding: utf- -*- """ Created on Sun Jun :: @author: Bruce Lau ""&q ...

  5. java横向导出excel_利用Java进行Excel的数据导入导出

    1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...

  6. 利用POI生成EXCEL报表(通过web页面导出后台数据)

    很多时候需要将数据利用浏览器进行导出,这个时候我们就可以采用Apache的POI进行实现通过web页面实现Excel导出后台数据,并且以.xlsx的形式下载到本地,也就是excel表格形式. 首先先下 ...

  7. java使用jxl生成excel表格,jsp使用js下载excel文件xls

    java使用jxl生成excel表格,jsp使用js下载excel文件 后端代码 maven jar包 主体代码逻辑 引入的jar包 具体代码段 重点详解 表头和表格内容两种格式 直接将 HttpSe ...

  8. Java后台生成Excel表格

    Java后台生成Excel表格 功能简述 需求 目标 实现 1.首先在项目中导入jxl相关jar包,并引入 2.编写代码 3.结果 后记 功能简述 由于公司业务需求,我需要实现一个完全通过Java后台 ...

  9. 利用owc生成excel并且显示在页面

    主要利用OWC生成Excel,画表头和显示从数据库读出来的数据,然后显示在前台页面上,无需客户端安装office,只需要安装owc.一年以前写的,似乎很烦锁,哪位有高见请指教! 后面利用OWC操作EX ...

最新文章

  1. 切换JAVAC的方法
  2. 数学建模学习笔记——灰色关联分析(评价类)
  3. java内存图怎么画,jvm内存模型怎么画?简单美观的模型图制作软件
  4. C语言经典面试题目(转的,不过写的的确好!)
  5. 漫画:什么是MD5算法
  6. 用html和css布局如下图像,[看书][CSS精粹(第2版)]第三章 CSS和图像 HTML网页布局...
  7. 推荐40个优秀的免费CSS工具
  8. redis linux工具安装,redis Linux版本的安装,以及一些基本的认识
  9. 大数据学习笔记:距离度量和相似度度量
  10. java 时间类型添加_java date类型 怎么 插入 时间 到 数据库
  11. 水体专题提取与叶绿素a浓度反演
  12. 【cf-edu-round72: C 】The Number Of Good Substrings(思维)
  13. 混响延迟插件9个合集 – ValhallaDSP Bundle 2020 WiN 免安装版
  14. MVP简单使用+RecyclerView
  15. 面试后说hold什么意思_面试结束后就傻傻等通知?你还可以做这三件事!
  16. 全球与中国液压离合器市场现状及未来发展趋势(2022)
  17. 网易笔试题 寻找第K大
  18. 关于图片onload事件兼容性处理, 谷歌浏览器版本 56.0.2896.3 (64-bit) 微信客户端浏览器 canvas篇
  19. Linux命令行与shell脚本编程大全第三版 学习笔记
  20. JAVA的while循环语句和break与continue的使用

热门文章

  1. 如何在python中使用正则表达式从多行字符串中删除特定字符
  2. 深入浅析Python 函数注解与匿名函数
  3. Python基础教程:list和tuple
  4. python整数与IP地址转换
  5. Python属性和内建属性
  6. python函数中把列表(list)当参数时的入坑与出坑
  7. 【opencv4】opencv教程 C++ 4、Mat对象(深拷贝:clone()、copyTo(),create()创建图片,zeros()、eye()初始化空白图像,Scalar()创建向量)
  8. C语言malloc动态分配内存分配失败怎么办?exit(OVERFLOW);(include <cstdlib>)
  9. 给IDEA给类和方法添加注解
  10. linux——关于ip、静态网络、动态网络、网关、DNS的设置