Java工具总结:将数据内容写入excel文件

文章目录

  • Java工具总结:将数据内容写入excel文件
    • 一、背景
    • 二、功能描述
    • 三、使用该工具类:Java代码演示
    • 四、分析代码
      • 4.1 几个重要的JavaBean:
      • 4.2 工具类的调用入口
    • 五、更多实用的工具类

一、背景

Java项目开发中,经常会遇到这样的需求:将数据内容写入excel文件。这里开发了一个将数据内容写入excel文件的工具类,直接调用工具方法即可实现这样的需求。

市面上也有其他类似的工具,但大多理解起来很困难,封装得太完美,很难基于它进行定制改造。

该工具类是基于org.apache.poi开发出来了,理解起来非常容易。该工具类做得也非常灵活,能够实现常见的需求,比如:设置列宽、对列合并单元格、设置背景颜色等等。

二、功能描述

使用该工具类将数据内容写入excel文件的过程中能够做下面这些事情:

  • 创建一个不存在的excel文件;
  • 在写入内容前,如果要写入的excel文件已经存在,会将该excel文件删除;
  • 可以创建出多个sheet页,并向这多个sheet页写入内容;
  • 每个sheet页,可以写入多个表格内容,每个表格之间会有一个空行;
  • 可以基于rgb(三原色)为单元格设置特定的颜色;
  • 可以设置表格列的宽度,设置的值,会被乘以256;
  • 可以设定值,代表前多少列,为前几列的每一列进行合并单元格;

例如:

优化:

2022年10月15日,对合并单元格功能进行了优化,通过指定要进行单元格合并的范围,就能进行灵活的单元格合并:

        // 指定要合并的单元格的范围// 某一个表格,  第1行到第2行, 第1列到5列。进行合并单元格tableContent.setRowRange(Range.<Integer>closed(1, 2));tableContent.setColRange(Range.<Integer>closed(1, 5));

效果图如下:

三、使用该工具类:Java代码演示

完整的演示代码:MyExcelUtilTest。

    /*** 将数据内容写入excel文件*/@Testpublic void createNewExcelWriteContentTest() {String excelFilePath = "/Users/lifei/Documents/opt/doc/demo01.xlsx";ExcelContent excelContent = new ExcelContent();List<ExcelSheetContent> sheetContentList = new ArrayList<>();// 添加第一个sheet页的内容sheetContentList.add(createFirstSheet());// 添加第二个sheet页内容sheetContentList.add(createSecondSheet());// 添加多个sheet页的内容excelContent.setSheetContentList(sheetContentList);MyExcelUtil.createNewExcelWriteContent(excelContent, excelFilePath);}/*** 创建第一个sheet* @return*/private ExcelSheetContent createFirstSheet() {// 第一个sheet页ExcelSheetContent firstSheetContent = new ExcelSheetContent();// 设置sheet页的名称firstSheetContent.setSheetName("第一个sheet页");List<TableContent> firstSheetTableList = new ArrayList<>();// 第一个sheet页里的第一个表格TableContent tableContent1 = createSheetFirstTable();// 第一个sheet页里的第二个表格TableContent tableContent2 = createSheetSecondTable();// 第三个单元格:合并复杂单元格TableContent tableContent3 = createSheetTable03();// 添加表格firstSheetTableList.add(tableContent1);firstSheetTableList.add(tableContent2);firstSheetTableList.add(tableContent3);// 往第一个sheet页中,添加多个表格firstSheetContent.setTableContentList(firstSheetTableList);return firstSheetContent;}/*** 创建第一个表格* @return*/private TableContent createSheetFirstTable() {TableContent tableContent = new TableContent();tableContent.setTitle("第一个sheet页的第一个表格");// 创建一个2行5列的表格int rowNum = 3, colNum = 5;CellContent[][] table = new CellContent[rowNum][colNum];table[0] = new CellContent[]{new CellContent.Builder().cellValue("用户").builder(),new CellContent.Builder().cellValue("性别").builder(),new CellContent.Builder().cellValue("得分").builder(),new CellContent.Builder().cellValue("评价").builder(),new CellContent.Builder().cellValue("状态").builder()};table[1] = new CellContent[]{new CellContent.Builder().cellValue("小a").builder(),new CellContent.Builder().cellValue("男").builder(),new CellContent.Builder().cellValue("21").builder(),new CellContent.Builder().cellValue("好").myCellBGColor(new MyCellColor(51, 204, 51)).builder(),new CellContent.Builder().cellValue("在职").builder()};table[2] = new CellContent[]{new CellContent.Builder().cellValue("小b").builder(),new CellContent.Builder().cellValue("男").builder(),new CellContent.Builder().cellValue("10").builder(),new CellContent.Builder().cellValue("差").myCellBGColor(new MyCellColor(255, 153, 102)).builder(),new CellContent.Builder().cellValue("在职").builder()};tableContent.setTable(table);// 添加标题颜色tableContent.setTitleBGColor(new MyCellColor(153, 255, 153));// 设置列宽tableContent.setColumnWidthsBase256(new int[]{20, 20, 20, 20, 20});// 设置标题居左tableContent.setTitleAlignment(HorizontalAlignment.LEFT);// 前两列的每一列,合并单元格tableContent.setMergeBeforeColNums(2);return tableContent;}/*** 创建第三个表格* @return*/private TableContent createSheetTable03() {TableContent tableContent = new TableContent();tableContent.setTitle("第三个表格:合并复杂的单元格");// 创建一个5行5列的表格int rowNum = 5, colNum = 5;CellContent[][] table = new CellContent[rowNum][colNum];table[0] = new CellContent[]{new CellContent.Builder().cellValue("用例").builder(),new CellContent.Builder().cellValue("产品1").builder(),new CellContent.Builder().cellValue("产品1").builder(),new CellContent.Builder().cellValue("产品2").builder(),new CellContent.Builder().cellValue("产品2").builder(),};table[1] = new CellContent[]{new CellContent.Builder().cellValue("用例").builder(),new CellContent.Builder().cellValue("版本").builder(),new CellContent.Builder().cellValue("数值").builder(),new CellContent.Builder().cellValue("版本").builder(),new CellContent.Builder().cellValue("数值").builder()};table[2] = new CellContent[]{new CellContent.Builder().cellValue("caseName-1").builder(),new CellContent.Builder().cellValue("v1.1").builder(),new CellContent.Builder().cellValue("200").builder(),new CellContent.Builder().cellValue("v1.2").builder(),new CellContent.Builder().cellValue("210").builder(),};table[3] = new CellContent[]{new CellContent.Builder().cellValue("caseName-2").builder(),new CellContent.Builder().cellValue("v0.1").builder(),new CellContent.Builder().cellValue("10").builder(),new CellContent.Builder().cellValue("v0.2").builder(),new CellContent.Builder().cellValue("11").builder(),};table[4] = new CellContent[]{new CellContent.Builder().cellValue("caseName-3").builder(),new CellContent.Builder().cellValue("v1.5").builder(),new CellContent.Builder().cellValue("0.3").builder(),new CellContent.Builder().cellValue("v1.5").builder(),new CellContent.Builder().cellValue("0.5").builder(),};tableContent.setTable(table);// 添加标题颜色tableContent.setTitleBGColor(new MyCellColor(153, 255, 153));// 设置列宽tableContent.setColumnWidthsBase256(new int[]{20, 20, 20, 20, 20});// 设置标题居左tableContent.setTitleAlignment(HorizontalAlignment.LEFT);// 指定要合并的单元格的范围// 某一个表格,  第1行到第2行, 第1列到5列。进行合并单元格tableContent.setRowRange(Range.<Integer>closed(1, 2));tableContent.setColRange(Range.<Integer>closed(1, 5));return tableContent;}

四、分析代码

完整的代码:mypoi-excel

4.1 几个重要的JavaBean:

  • ExcelContent:代表excel的所有内容数据,里面包含多有sheet页内容;
  • ExcelSheetContent :代表一个sheet页的内容,一个sheet页里面可以有多个不同“行数*列数”的二维表格;
  • TableContent:代表sheet页中,一个“行数*列数”的二维表格;
  • CellContent:单元格的内容;
  • MyCellColor:单元格的背景颜色,基于rgb三原色;

4.2 工具类的调用入口

工具类的调用入口为:MyExcelUtil.createNewExcelWriteContent(excelContent, excelFilePath)

传入两个参数:

  • excelContent:就是ExcelContent对象。
  • excelFilePath:要生成的excel文件路径。文件所在的文件夹路径必须存在。如果文件已经存在会被删除后重建。

五、更多实用的工具类

作者会不断总结出更多实用的Java开发工具类,可以在这里看到:Java开发中总结的非常实用的工具代码。

Java工具总结:将数据内容写入excel文件相关推荐

  1. 使用java在后台将数据导出为excel文件

    本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的. 例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件.需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sq ...

  2. 有选择读取word表格中的数据并写入excel文件中

    最近学院要举行科技报告会活动,许多同学积极参与,交了许多报名表到我这里,而我需要将这些信息进行汇总,整理出一个excel表格,看着一个个word文件放在我的工作文件夹中头发发麻,这一个个的整理好麻烦, ...

  3. 利用python将txt文件中的内容写入Excel文件中

    Python是一个强大的语言,解决这点问题非常简单. 首先我们先下载两个包,xlrd,xlwt分别可实现对excel文件的读和写操作. 接下来详见代码: 1.从txt里写入excel文件 # codi ...

  4. Python将Word文件中的内容写入Excel文件

    在日常办公中我们经常需要将word文件中的数据写入Excel中,如果是手动一个一个进行复制粘贴,那将会非常的耗时且繁琐! 遇到这种问题我们首先想到就是利用编程解决,今天我分享一个word转excel的 ...

  5. java 将整型数组内容写入txt文件_Java自学-I/O 字节流

    Java 字节流 InputStream OutputStream InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 步骤 1 : ASCII码 所 ...

  6. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

  7. Python将Excel文件内容写入Word文件

    在日常办公中我们经常需要将Excel文件中的数据写入Word中,如果是手动一个一个进行复制粘贴,那将会非常的耗时且繁琐! 遇到这种问题我们首先想到就是利用b编程解决,今天我分享一个excel转word ...

  8. xlsxwriter写行合并_使用xlsxwriter将pandas数据框写入excel并包含“write-rich”字符串格式...

    以下是可复制的,并产生所需的输出. import xlsxwriter, pandas as pd workbook = xlsxwriter.Workbook('pandas_with_rich_s ...

  9. python爬虫爬取彩票中奖数字,简单计算概率并写入Excel文件中

    一.爬取网页数据所使用到的库 1.获取网络请求requests.BeautifulSoup2.写入excel文件openpyxl.pprint.column_index_from_string注意co ...

最新文章

  1. WinForm界面开发之 启动界面
  2. 【错误记录】Groovy 函数拦截调用 invokeMethod 导致栈溢出 ( java.lang.StackOverflowError )
  3. 「网络流24题」 12. 软件补丁问题
  4. redis 失效时间单位是秒还是毫秒_Redis 事务与过期时间详细介绍
  5. Understanding Spring Web Application Architecture: The Classic Way--转载
  6. Python 程序开发90个注意事项
  7. Quartus II11.0安装教程
  8. 复制中含有非法字符导致的错误
  9. 用装饰器设计模式装饰
  10. android8.0学习(1)---Android Treble 概述
  11. matlab norm函数使用_「matlabnorm」matlab中norm函数的用法 - 金橙教程网
  12. Win10下ImageAI-gpu(tensorflow-gpu)环境安装(cuda及cuDNN自动安装)及实时对象检测
  13. 插值算法(数学建模学习)
  14. 分治法——最大子列和问题
  15. 什么是 MySQL 索引?
  16. jena mysql_使用Jena将本体存入MySQL
  17. 百度地图ModuleNotFoundError: No module named ‘aip‘
  18. 微信小程序实现打开并下载服务器上面的pdf文件到手机
  19. pmos低电平驱动_MOS管驱动电路总结
  20. 什么是信令?什么是信令网?(转)

热门文章

  1. unity3d插入android有米广告
  2. 生活痛点与不怕犯错--用精益思想塑造创新型组织
  3. 指南:在 linux 下的 Oracle Database 11g 中安装 Oracle Enterprise Manager 10g Grid Control 第 5 版
  4. CISSP认证流程1
  5. 游戏乱码解决软件 NTLEA
  6. 麦克风的计算机英语词汇,英语词汇,直播带货的行业术语,非常火!
  7. test STM32F407 ETH RMII
  8. Unity5.6.4f1 配置WebGL教程
  9. CAN-TP 网络层参数解析(N_Ar,N_As,STmin,BS等)
  10. 基于Android的游戏资讯APP设计