效果图:

package excel;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.List;

import java.util.Objects;

public class OperateExcel {

/**

* 创建WorkBook对象

* @param list 合并后的list集合

* @param labels 标签数组(文件第一行)

* @param title 左右语句类型数组(文件第一行)

* @return HSSFWorkbook对象

*/

public XSSFWorkbook getWorkBook(List list, JSONArray labels, JSONArray title) {

XSSFWorkbook xwk = new XSSFWorkbook();

XSSFSheet xssfSheet = xwk.createSheet("导出结果");

//√符号

int[] code = {0x2611};

//创建表头

Integer initLabel = 3;

createHeader(xssfSheet,labels,title,initLabel);

JSONObject oneRow;

int j = 0;

int size = list.size();

for (j = 0; j < size; j++) {

oneRow = list.get(j);

// 创建内容行:从第二行开始,跳过属性列

createContent(labels, xssfSheet, oneRow, j,initLabel,code);

oneRow = null;

}

return xwk;

}

/**

* 创建表头

* @param xssfSheet 工作薄

*/

private void createHeader(XSSFSheet xssfSheet,JSONArray labels,JSONArray title,Integer initLabel) {

Row rowIndex = xssfSheet.createRow(0);

Cell first = rowIndex.createCell(0);

first.setCellValue("序号");

if(title != null && title.size() != 0){

Cell second = rowIndex.createCell(1);

second.setCellValue(title.get(0).toString());

Cell third = rowIndex.createCell(2);

third.setCellValue(title.get(1).toString());

}

if(labels != null && labels.size() != 0){

for(Object obj : labels){

JSONObject newVo = (JSONObject) obj;

Cell fourAddCellIndex = rowIndex.createCell(initLabel++);

fourAddCellIndex.setCellValue(newVo.getString("name"));

}

}

xssfSheet.createFreezePane( 0, 1, 0, 1 );

}

/**

* 创建内容行:从第二行开始,跳过属性列

* @param labels 标签数组

* @param xssfSheet 工作薄

* @param oneRow 行对象内容

* @param j 列索引

*/

private void createContent(JSONArray labels, XSSFSheet xssfSheet, JSONObject oneRow, int j,Integer initLabel, int[] code) {

Row row = xssfSheet.createRow(j + 1);

//创建相对静态的内容,前三列为序号,左边语句,右边语句

createStaticContent(oneRow, j, row);

JSONArray signLabels = oneRow.getJSONArray("label");

//创建Label内容,在labels标签中的打√符号

createLabelContent(labels, row, initLabel, signLabels, code);

row = null;

signLabels = null;

}

/**

*创建Label内容,在labels标签中的打√符号

* @param labels 批次任务的标签

* @param row 行对象

* @param initLabelCell 前三列处理完成之后的列索引

* @param signLabels 一行所标记的label

* @param code √符号码。可扩展其他的符号

*/

private void createLabelContent(JSONArray labels, Row row, Integer initLabelCell, JSONArray signLabels, int[] code) {

JSONObject label;

String value;

if(signLabels != null && signLabels.size() != 0){

int i=0;

int size = labels.size();

for(i=0;i

label = (JSONObject) labels.get(i);

for (Object signLabel : signLabels) {

value = (String) signLabel;

if (value.equals(label.getString("value"))) {

Cell fourAddCell = row.createCell(initLabelCell + i);

fourAddCell.setCellValue(new String(code, 0, 1));

break;

}

}

}

}

value = null;

label = null;

}

/**

*创建相对静态的内容,前三列为序号,左边语句,右边语句

* @param oneRow 要写入Excel行对象的一行内容

* @param j Excel行号

* @param row Excel行对象

* @return 返回第四列索引

*/

private void createStaticContent(JSONObject oneRow, int j, Row row) {

Cell first = row.createCell(0);

first.setCellValue(j + 1);

Cell second = row.createCell(1);

second.setCellValue(Objects.nonNull(oneRow)?oneRow.getString("sentenceL"):"");

Cell third = row.createCell(2);

third.setCellValue(Objects.nonNull(oneRow)?oneRow.getString("sentenceR"):"");

//return 3;

}

}

StringEx工具类 newUUID方法

public static final String newUUID() {

return UUID.randomUUID().toString().replace("-", "").toUpperCase();

}

测试类

package excel;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import utils.StringEx;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.List;

public class App {

public static void main(String[] args){

//获取title

String titleStr = "[\"中文\",\"英文\"]";

JSONArray title = JSONArray.parseArray(titleStr);

//获取labels总数 [{"name":"古风","id":"1"},{"name":"仙女","id":"2"},{"name":"流氓","id":"3"}]

String labelsStr = "[{\"name\":\"古风\",\"value\":\"古风\"},{\"name\":\"仙女\",\"value\":\"仙女\"},{\"name\":\"流氓\",\"value\":\"流氓\"}]";

JSONArray labels = JSONArray.parseArray(labelsStr);

//[{"sentenceL":"李白乘舟将欲行","sentenceR":"Libai chengzhou jiangyu xing",label:["古风","仙女"]},{"sentenceL":"李白乘舟将欲行","sentenceR":"Libai chengzhou jiangyu xing",label:["仙女","流氓"]},{"sentenceL":"李白乘舟将欲行","sentenceR":"Libai chengzhou jiangyu xing",label:["古风","流氓"]}]

String listStr = "[{\"sentenceL\":\"李白乘舟将欲行\",\"sentenceR\":\"Libai chengzhou jiangyu xing\",label:[\"古风\",\"仙女\"]},{\"sentenceL\":\"李白乘舟将欲行\",\"sentenceR\":\"Libai chengzhou jiangyu xing\",label:[\"仙女\",\"流氓\"]},{\"sentenceL\":\"李白乘舟将欲行\",\"sentenceR\":\"Libai chengzhou jiangyu xing\",label:[\"古风\",\"流氓\"]}]";

List convertList = JSONArray.parseArray(listStr,JSONObject.class);

OperateExcel operateExcel = new OperateExcel();

XSSFWorkbook sb;

OutputStream out = null;

String path = App.class.getProtectionDomain().getCodeSource().getLocation().getPath() + File.separator+"excel" + File.separator;

try{

//合并后的结果写入到worbook对象中

sb = operateExcel.getWorkBook(convertList,labels,title);

//将workBook对象写入到字节数组中

out = new FileOutputStream(path + StringEx.newUUID() + ".xlsx");

sb.write(out);

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if(out != null){

out.flush();

out.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

推荐一个公众号

号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!

java poi 导出xlsx_java 使用poi存储Excel(.xlsx格式)相关推荐

  1. 使用POI导出百万级数据到excel的解决方案

    使用POI导出百万级数据到excel的解决方案 参考文章: (1)使用POI导出百万级数据到excel的解决方案 (2)https://www.cnblogs.com/hxun/p/11419006. ...

  2. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  3. JAVA使用POI导出Word文档和Excel文档

    导包 注意:POI包的版本,不同版本poi导出API会有差别!!!! <dependency><groupId>org.apache.poi</groupId>&l ...

  4. java mvc 导出excel_Java springMVC POI 导出 EXCEL

    思路 : 将需要导出的数据存放在一个List中 创建一个EXCEL表 注意 XSSFWorkbook 只能操作2007以上的版本,XSSFWorkbook 只能操作2003一下的版本,所以需要的时候可 ...

  5. java jxl读取xlsx_Java添加、读取Excel公式

    操作excel表格用公式来处理数据时,可通过创建公式来运算数据,或通过读取公式来获取数据信息来源.本文以通过Java代码来演示在Excel中创建及读取公式的方法.这里使用了Excel Java类库(F ...

  6. Python编程之读取Excel xlsx格式带合并单元格的文件

    1.文件内容 2.代码实现 import xlrd apply_dic = [] def get_excel():with xlrd.open_workbook(r'kecheng.xlsx') as ...

  7. Unity3D研究院之在MAC上脚本XlsxWriter写入Excel .xlsx格式

    原地址:http://www.xuanyusong.com/archives/3011 以前找了很久可以跨平台支持读写Excel的工具,我也试了很多种DLL.可在Windows上各个完美支持,可是在M ...

  8. java poi对excel xls和xlsx格式文件导入导出

    一)poi简介 Apache POI项目是用于基于Microsoft的OLE 2复合文档格式开发文件格式的纯Java端口的主项目. 官网POI API地址:https://poi.apache.org ...

  9. Java利用注解实现配置动态公式并结合POI导出Excel

    利用注解实现动态配置公式并结合POI导出Excel 实现思想 创建导出对象 创建使用注解类 创建封装导出对象属性类 创建测试类 创建ExcelUtil类 实现效果 实现思想 实施顾问提出导出Excel ...

最新文章

  1. pythonturtle是标准库_Python中turtle库的使用
  2. springboot新版本(2.0.0+)自定义ErrorController中使用ErrorAttributes
  3. 数据中心扩张和产能计划
  4. 多用途管理仪表板UI模板,把枯燥变得简单
  5. request一些常用方法
  6. 彼得定律与员工职业生涯规划(该提拔谁,职业规划,知人善用)
  7. 从template到DOM(Vue.js源码角度看内部运行机制)
  8. Spring @Autowired批注
  9. 使用 :after伪元素撑开 div
  10. Linux安装配置CI框架
  11. 文本自动校对技术研究综述
  12. html里获得农历时间,获取阴历(农历)和当前日期的js代码_javascript技巧
  13. 用acts_as_paranoid 做假删除
  14. 创建一个分布式网络爬虫的故事
  15. 程序员租女友被骗 揭秘“租友”市场背后那些坑
  16. 山东大学计算机科学与技术专业全国排名,全国计算机专业大学排名
  17. 2.11 循环赛日程表
  18. JSP开发模型与MVC设计模型
  19. 大型技术组织 DevOps 转型经验总结
  20. 氢燃料电池发动机性能测试

热门文章

  1. Redis Stream的消费者组介绍
  2. 基于自注意力的生成对抗归因网络的交通流缺失数据修复
  3. C#毕业设计——基于C#+asp.net+sqlserver药店进销存管理系统设计与实现(毕业论文+程序源码)——进销存管理系统
  4. APS排程软件与ERP、MES的集成方式
  5. 【图文并茂】教你在线一键重装正版Win10系统
  6. Angular2 之 单元测试
  7. 联想Miix5安装Linux后WIFI设备无法识别问题
  8. Java接受前端的base64,转换失败。base64转图片互相转换
  9. mysql中表联结_MySQL -- 表联结
  10. Keil插件使用方法汇总