当前位置: 首页 > news >正文

Java实习记录 8 ——使用 XSSFWorkbook 实现复杂表格下载(背景色、对齐方式、单元格合并等操作)

Java实习记录 8 ——使用 XSSFWorkbook 实现复杂表格下载(背景色、对齐方式、单元格合并等操作)

  • 引言
  • 正文
  • 收获

引言

要求实现对课程数据进行 Excel 表格下载。生成课程时有三种不同的阶段,所有有三种 Excel 表格下载。使用到 XSSFWorkbook 解决。表格主要包含三部分,第一行为课程名称等信息;第二行为课程单元信息的表头;第三行及之后为主要的课程单元信息,包括单元名称、单元描述等等。

正文

  1. 依赖引入
        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>
  1. 请求体设置
    主要有需要两个参数,课程 id 以及 课程类型。这里使用到了枚举,列出三种要下载的表格类型
  2. service 层具体实现
    1)进行请求参数不为空校验
    2)通过课程 id 获取课程信息
    主要通过编写 sql 进行多表查询这里不详细展开
    3)设置表格样式
    课程单元信息部分列要求背景色在四个颜色中循环
        XSSFWorkbook workbook = new XSSFWorkbook();// 设置字体XSSFFont font = workbook.createFont();font.setFontName("Arial"); // 设置字体为Arialfont.setFontHeightInPoints((short) 10); // 设置字体大小为10// 创建一个单元格样式并启用换行XSSFCellStyle autoHeightStyle = workbook.createCellStyle();// 启用自动换行autoHeightStyle.setWrapText(true);// 自动换行均需要顶端对齐autoHeightStyle.setVerticalAlignment(VerticalAlignment.TOP);autoHeightStyle.setFont(font);// 设置垂直居中XSSFCellStyle verticalCenterStyle = workbook.createCellStyle();verticalCenterStyle.setWrapText(true); // 均需自动换行verticalCenterStyle.setVerticalAlignment(VerticalAlignment.CENTER);verticalCenterStyle.setFont(font);// 设置字体加粗XSSFFont boldFont = workbook.createFont();boldFont.setBold(true);boldFont.setFontName("Arial");boldFont.setFontHeightInPoints((short) 10);int rowIndex = 0;XSSFSheet sheet;// 表头背景色,将#FAFAFA转换为RGBXSSFColor color = new XSSFColor(new Color(239, 239, 239), null);XSSFColor colorOne = new XSSFColor(new Color(239, 249, 231), null);XSSFColor colorTwo = new XSSFColor(new Color(222, 241, 245), null);XSSFColor colorThree = new XSSFColor(new Color(244, 244, 237), null);XSSFColor colorFour = new XSSFColor(new Color(231, 230, 251), null);// 创建单元格样式并设置背景色XSSFCellStyle tableHeadStyle = workbook.createCellStyle();tableHeadStyle.setFillForegroundColor(color);tableHeadStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 该背景色为表头,字体加粗,水平居中,垂直居中tableHeadStyle.setFont(boldFont);tableHeadStyle.setVerticalAlignment(VerticalAlignment.CENTER);tableHeadStyle.setAlignment(HorizontalAlignment.CENTER);XSSFCellStyle styleOne = workbook.createCellStyle();styleOne.setFillForegroundColor(colorOne);styleOne.setFillPattern(FillPatternType.SOLID_FOREGROUND);styleOne.setFont(boldFont); // 有背景色的加粗styleOne.setVerticalAlignment(VerticalAlignment.CENTER); // 有背景色的垂直居中styleOne.setAlignment(HorizontalAlignment.CENTER); // 有背景色水平居中styleOne.setWrapText(true);XSSFCellStyle styleTwo = workbook.createCellStyle();styleTwo.setFillForegroundColor(colorTwo);styleTwo.setFillPattern(FillPatternType.SOLID_FOREGROUND);styleTwo.setFont(boldFont);styleTwo.setVerticalAlignment(VerticalAlignment.CENTER);styleTwo.setAlignment(HorizontalAlignment.CENTER);styleTwo.setWrapText(true);XSSFCellStyle styleThree = workbook.createCellStyle();styleThree.setFillForegroundColor(colorThree);styleThree.setFillPattern(FillPatternType.SOLID_FOREGROUND);styleThree.setFont(boldFont);styleThree.setVerticalAlignment(VerticalAlignment.CENTER);styleThree.setAlignment(HorizontalAlignment.CENTER);styleThree.setWrapText(true);XSSFCellStyle styleFour = workbook.createCellStyle();styleFour.setFillForegroundColor(colorFour);styleFour.setFillPattern(FillPatternType.SOLID_FOREGROUND);styleFour.setFont(boldFont);styleFour.setVerticalAlignment(VerticalAlignment.CENTER);styleFour.setAlignment(HorizontalAlignment.CENTER);styleFour.setWrapText(true);List<XSSFCellStyle> colorList = new ArrayList<>();colorList.add(0, styleOne);colorList.add(1, styleTwo);colorList.add(2, styleThree);colorList.add(3, styleFour);

4)根据数据依次设置每行数据

 // 创建sheet
sheet = workbook.createSheet("Pacing Guide");
// 设置前两行固定
sheet.createFreezePane(0, 2);
// 设置列宽
sheet.setColumnWidth(0, 6000); // 第1列,宽度为6000
sheet.setColumnWidth(1, 8000); // 第2列,宽度为15000
.
.
.
//合并第一行第一二列单元格
sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));

根据需要给对应单元格设置样式即可,这类给出一些示例

XSSFRow unitRow = sheet.createRow(rowIndex);
// 设置行高
unitRow.setHeightInPoints(100);
// 设置每个单元格内容
XSSFCell unitTitleCell = unitRow.createCell(0);
unitTitleCell.setCellValue("Unit "+ unit.getNumber() + ":" +unit.getTitle());
// 设置单元格样式
unitTitleCell.setCellStyle(colorList.get(unit.getNumber()-1 % colorList.size()));
XSSFCell descriptionCell = unitRow.createCell(1);
descriptionCell.setCellValue(unit.getDescription());
// 设置文本自动换行
descriptionCell.setCellStyle(autoHeightStyle);
XSSFCell weekCell = unitRow.createCell(2);
weekCell.setCellValue(unit.getWeeks() != null? unit.getWeeks() : 0);
// 设置背景色
weekCell.setCellStyle(colorList.get(unit.getNumber()-1 % colorList.size()));
  1. dao 层具体实现
    为对课程表、课程单元表、单元活动表三个表的联表查询,不具体展开。

收获

学会了一种下载 Excel 的方法,加强了对复杂 SQL 语句的编写能力,了解了企业开发的代码规范重要性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《机器学习by周志华》学习笔记-决策树-03连续值与缺失值
  • CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models
  • 蓝盆花:神秘而迷人的自然之美
  • speech语音audio音频
  • Maven坐标
  • 十四、OpenCVSharp视频处理
  • 抽象代数精解【13】
  • 《向量数据库指南》——AI应用部署落地与权限安全差别
  • Qt/QML学习-SwipeView
  • 机器学习课程学习周报八
  • 基于华为atlas下的yolov5+BoT-SORT/ByteTrack煤矿箕斗状态识别大探索
  • ES6 (一)——ES6 简介及环境搭建
  • 大模型学习微调资源
  • django之BaseSerializer
  • Go语言基础--数据类型(布尔、字符串)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Asm.js的简单介绍
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java多态
  • JS+CSS实现数字滚动
  • k个最大的数及变种小结
  • mysql_config not found
  • Redis学习笔记 - pipline(流水线、管道)
  • 第2章 网络文档
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 工程优化暨babel升级小记
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 那些年我们用过的显示性能指标
  • 如何解决微信端直接跳WAP端
  • 数据可视化之 Sankey 桑基图的实现
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我的业余项目总结
  • 在weex里面使用chart图表
  • 如何用纯 CSS 创作一个货车 loader
  • ​渐进式Web应用PWA的未来
  • ​什么是bug?bug的源头在哪里?
  • ​业务双活的数据切换思路设计(下)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (3)llvm ir转换过程
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Python第六天)文件处理
  • (二十三)Flask之高频面试点
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)Honghu Cloud云架构一定时调度平台
  • (十六)Flask之蓝图
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .NET Core 成都线下面基会拉开序幕
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net Remoting常用部署结构
  • .NET 服务 ServiceController