简介

我们知道最简单的导出excel的方式其实是导出csv, 例如dbv的导出功能就是导出csv, 非常的傻瓜方便, 也不需要引入依赖, 但是当导出的文件内容中含有 "," (逗号)时, 文件的格式就乱了. 效果不好.

​Java 导出 Excel的轮子还是挺多的, 有些也非常简单易用, 下面就简单叙述下

Apache poi

Workbook wb = new XSSFWorkbook();

//Workbook wb = new XSSFWorkbook();

CreationHelper createHelper = wb.getCreationHelper();

Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.

Row row = sheet.createRow(0);

row.createCell(0).setCellValue(" \uD83D\uDE0E \uD83D\uDE00 ☺ \uD83D\uDC7D");

row.createCell(1).setCellValue(1.2);

// 创建一个富文本 ,设定一下颜色

RichTextString rx = createHelper.createRichTextString("特殊表情来了");

XSSFFont font = (XSSFFont) wb.createFont();

font.setColor(new XSSFColor(new java.awt.Color(0, 255, 0)));

//

rx.applyFont(font);

row.createCell(2).setCellValue(rx);

row.createCell(3).setCellValue(true);

// Write the output to a file

try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) {

wb.write(fileOut);

}

可以看到, 基本上是通过手撸代码的方式 , 颗粒度比较细, 但还是非常的繁琐, 每一行的创建都需要手撸, 样式什么的统统得用代码来控制, 量还是比较大的

测试的时候, 发现使用xlsx 格式导出的时候 ,如果使用emoji, 生成的excel中emoji会变成??, 而使用xls格式的时候就不会, 看了下源码, 应该是 HSSFRichTextString 这个类在转化的时候正确处理的emoji, 而生成xlsx的 XSSFRichTextString 没有正确处理

JXL (Java Excel API)

乍一看, 最近一次的更新也是2011年的时候了, 用法其实和上面的类似, 也是通过手撸代码, 并且不支持xlsx类型, 所以不推荐使用了, (既然要手撸代码, 为啥不选择poi呢?)

@Test

public void javaExcelTest() throws Exception {

// 类似, 构建一个xls文件

WritableWorkbook wworkbook = jxl.Workbook.createWorkbook(new File("output.xls"));

WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0);

// 在某个单元格创建, 下标从0开始

Label label = new Label(0, 2, "A label record"); // 即 单元格 A3

wsheet.addCell(label);

Number number = new Number(3, 4, 3.1459); //单元格 D5

wsheet.addCell(number);

wworkbook.write();

wworkbook.close();

jxl.Workbook workbook = jxl.Workbook.getWorkbook(new File("output.xls"));

jxl.Sheet sheet = workbook.getSheet(0);

Cell cell1 = sheet.getCell(0, 2);

System.out.println(cell1.getContents());

Cell cell2 = sheet.getCell(3, 4);

System.out.println(cell2.getContents());

workbook.close();

}

JXLS2

官网上JXLS的文档例子比较详细, 有时间的话可以读一下

如果不想看英文的, 可以看这个中文文档, 比较新

乍一看这个和上面那个很像, 但是可以说是非常不一样了, 同时JXLS2 和 JXLS1 使用方式还是有很大的区别, 这里就只讲述JXLS2的使用方式

JXLS2和上面的编码方式最大的不同就是可以使用模板, 废话少说, 直接步入正题

步骤

1.引入依赖

org.jxls

jxls-poi

1.0.15

org.jxls

jxls-reader

2.0.3

2.导入excel模板

这是一个样例模板

下载下来会发现, 里面有一些黄色的标记就是JXLS用来生成数据指令, 下面这段话比较关键

jx:area(lastCell="D4")

作用是从打上批注的这行单元格开始, 到 lastCell 所在的单元格区域, 是需要转化的矩形区域, 即我们的模板数据, 就必须写在这个区域内

下面这行数据使用了 jxls的 each指令

jx:each(items="employees" var="employee" lastCell="D4")

3. 编写代码

按照上面定义好模板后 ,生成的代码就非常简单, 可以看到

@Test

public void t() throws Exception {

//构造需要填充的数据

List employees = new ArrayList<>();

employees.add(new Employee().setName("jack").setBirthDate(new Date()).setPayment(BigDecimal.valueOf(System.currentTimeMillis())));

employees.add(new Employee().setName("wuli").setBirthDate(new Date()).setPayment(BigDecimal.valueOf(System.currentTimeMillis())));

employees.add(new Employee().setName("fiefei").setBirthDate(new Date().setPayment(BigDecimal.valueOf(System.currentTimeMillis())));

employees.add(new Employee().setName("keai").setBirthDate(new Date()).setPayment(BigDecimal.valueOf(System.currentTimeMillis())));

try (InputStream is = ExportExcelTest.class.getResourceAsStream("/object_collection_template.xls")) {

try (OutputStream os = new FileOutputStream("target/object_collection_output.xls")) {

Context context = new Context();

// 放入上下文

context.putVar("employees", employees);

JxlsHelper.getInstance().processTemplate(is, os, context);

}

}

}

其他的方式也有, 例如不需要写批注, 可以使用xml来编写,但是试了一下,发现有点繁琐,, 不如这种简便,

无一例外, 都需要事先准备好一个excel模板, 如果有复杂的生成要求, 可以下载对照官网例子来实现

java导出用什么_Java导出Excel相关推荐

  1. java 表格 列删除_Java 删除Excel表格中的空白行或列

    Java 删除Excel表格中的空白行和列 本文介绍在Java程序中如何来删除Excel表格中多余的空白行或者列. 使用工具:Free Spire.XLS for Java (免费版) Jar获取及导 ...

  2. java excil表格开发_JAVA导出Excel电子表格的方法

    JAVA导出Excel电子表格的方法 package com.qingruxu.excel; import java.io.File; import java.io.IOException; impo ...

  3. java循环合并行_java导出excel时合并同一列中相同内容的行

    public voidexpStatistics(String filePath,String campuscode) {try{ WritableWorkbook wwb= Workbook.cre ...

  4. java导出csv文件_java导出生成csv文件的方法

    本文实例为大家分享了java导出生成csv文件的具体代码,供大家参考,具体内容如下 首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分 ...

  5. java 导出word换行_Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  6. java 如何导出json文件_java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...

  7. java生成world文件_Java导出World文档(入门)

    第一步就是将World文档里面需要从数据库填充的部分用占位符替换 第二步:就是将此文档保存为Xml格式 第三步:将其放在resource目录下,并选中此文件,右键点击properties属性,将其编码 ...

  8. java批量导出pdf文件_java导出pdf文件

    项目中导出pdf文件,需要3个jar包iText-2.1.7.jar,iTextAsian.jar,ReportExprotPlug0.1.jar. ReportInfo info = new Rep ...

  9. java 生成sql脚本_java导出insert语句并生成sql脚本

    insertSQL = new ArrayList(); ResultSet rs = null; try { rs = getColumnNameAndColumeValue(sm, listSQL ...

最新文章

  1. 零基础学习UI设计有哪些简单有效的方法
  2. 升级在即,BU发布新版本并将Mempool未确认交易限制增加到500
  3. STM32的SPI驱动代码
  4. RequireJS首次加载偶尔失败
  5. 【Kafka】Consumer group 'console-consumer-28367' has no active members.
  6. python计算思维的概念_用Python学计算思维turtle详解
  7. Python如何安装模块
  8. 1660用哪个驱动稳定_安装驱动软件我认为哪个最好?
  9. 当我跑步时我在想什么读后感
  10. 处理器后面的字母含义_Intel处理器背盖上的字母含义
  11. 【OpenGrok代码搜索引擎】一、OpenGrok简介
  12. 什么是云计算机服务,云平台是什么意思 云服务平台有哪些【详细介绍】
  13. python大全-iwanna
  14. 索尼发布新款VR头盔与FB竞争,暂未公布定价
  15. icc校色文件使用教程_Win7系统色彩管理显示器ICC设置的操作方法
  16. 光敏传感器实验报告_光敏传感器光电特性测量实验分析报告.ppt
  17. ForkJoinPool介绍
  18. 十分担心外行人抢内行人的饭碗
  19. Huffman编码算法之Java实现
  20. 小红书 6.89.0.1版本 shield unidbg

热门文章

  1. Apache Spark 3.0 DStreams-Streaming编程指南
  2. TiCDC同步延迟问题处理
  3. 荣耀30青春版怎么样?到手后远超预期!
  4. 华尔街风雨飘摇 甲骨文却展翅翱翔
  5. 微软自动化神器playwright
  6. 使用vscode开发,使用插件记录
  7. Vue组件自调用/无限递归导航/element-ui导航封装
  8. 程序员做前端好还是做后台好?
  9. 新概念英语第二册61-96课(转)
  10. 奥塔哥大学计算机科学怎样,奥塔哥大学自然科学学院挂科率高吗?