网站开发风险协议/大数据查询

网站开发风险协议,大数据查询,wordpress关闭订阅,免费学编程的app场景 要求每行数据的每个字段的内容不能以 [2,3,33,22] 形式展示 要求独立成列形式如下 代码 maven 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>…

场景

要求每行数据的每个字段的内容不能以 [2,3,33,22] 形式展示 要求独立成列形式如下

代码

maven 依赖

        <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><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency>

 主代码类

package org.fri.controller;import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.fri.entity.ExportExample;
import org.fri.entity.MergeVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;@RequestMapping(value = "/excel")
@RestController
@Slf4j
public class ExcelController {@RequestMapping(value = "/export")public void exportExcel(HttpServletResponse response) throws NoSuchFieldException, IllegalAccessException, InstantiationException {ExportExample q = new ExportExample("漩涡鸣人", 20, "男", "火影,吊车尾,后宫之术创始人", "隐分身,仙术,螺旋丸");ExportExample y = new ExportExample("宇智波 佐助", 27, "男", "宇智波一族", "装B");ExportExample f = new ExportExample("千手扉间", 100, "男", "火影,禁术编写者", "水遁,黑暗术");LinkedHashMap<String, String> title = new LinkedHashMap<>();title.put("name","名称");title.put("age","年龄");title.put("sex","性别");title.put("roles","角色");title.put("technique","技能");List<ExportExample> list = Arrays.asList(q, y, f);exportExcel(list, ExportExample.class,title, response);}public <T> void exportExcel(List<T> list, Class<T> T,LinkedHashMap<String, String> title,HttpServletResponse response) throws NoSuchFieldException, IllegalAccessException, InstantiationException {T t = T.newInstance();LinkedHashMap<String, MergeVo> merged = new LinkedHashMap<>();Field[] fields = t.getClass().getDeclaredFields();//查询出所有列值for (Field field : fields) {field.setAccessible(true);merged.put(field.getName(), new MergeVo(field.getName(), 0, 1));}//计算所需要合并列的最大项for (T s : list) {for (String key : merged.keySet()) {Field field = t.getClass().getDeclaredField(key);field.setAccessible(true);String value = field.get(s).toString();if (merged.get(key).getTitleMaxColumNumber() < value.split(",").length) {merged.get(key).setTitleMaxColumNumber(value.split(",").length);}}}//计算没列的开始位置int j = 0;for (Map.Entry<String, MergeVo> et : merged.entrySet()) {et.getValue().setStartRowIndex(j);j = j + et.getValue().getTitleMaxColumNumber();}HSSFWorkbook workBook = null;OutputStream out = null;try {workBook = new HSSFWorkbook();HSSFSheet sheet = workBook.createSheet();HSSFRow titleRows = sheet.createRow(0);/*//设置表头样式CellStyle colorStyle = workBook.createCellStyle();colorStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());colorStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font font = workBook.createFont();font.setBold(true);font.setFontHeightInPoints((short) 16);// 设置字体大小为 16*/// 构建表头merged.forEach((key1, value) -> {merged(merged, sheet, titleRows, key1, title.get(key1));});// 构建数据int rowNumbers = 0;for (T e : list) {rowNumbers++;HSSFRow nextRow = sheet.createRow(rowNumbers);for (String key1 : merged.keySet()) {Field field = t.getClass().getDeclaredField(key1);field.setAccessible(true);String value = field.get(e).toString();merged(merged, sheet, nextRow, key1, value);}}DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");String dateNow = formatter.format(LocalDateTime.now());String fileName = dateNow + ".xls";response.setCharacterEncoding("UTF-8");response.setContentType("application/x-msdownload");response.addHeader("Content-Disposition", "attachment;filename=" + fileName);out = response.getOutputStream();workBook.write(out);} catch (IOException e) {log.error(e.getMessage());} finally {try {if (out != null) {out.close();}if (workBook != null) {workBook.close();}} catch (IOException e) {log.error(e.getMessage());}}}/*** 合并规则设定** @param mergeVoMap 表头配置信息* @param sheet      所属sheet* @param row        所属行* @param key        所属key* @param value      值*/private void merged(LinkedHashMap<String, MergeVo> mergeVoMap, HSSFSheet sheet, HSSFRow row, Stringkey, String value) {MergeVo mergeVo = mergeVoMap.get(key);String[] split = value.replace("[", "").replace("]", "").split(",");if (mergeVo.getTitleMaxColumNumber() > 1) {if (split.length > 1) {int length = split.length;List<int[]> ints = splitIntoSegments(mergeVo.getStartRowIndex(), mergeVo.getStartRowIndex() + mergeVo.getTitleMaxColumNumber(), length);for (int j = 0; j < ints.size(); j++) {int[] anInt = ints.get(j);row.createCell(anInt[0]).setCellValue(split[j]);if (anInt[1] - anInt[0] > 0) {sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), anInt[0], anInt[1]));}}} else {row.createCell(mergeVo.getStartRowIndex()).setCellValue(value);sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), mergeVo.getStartRowIndex(), mergeVo.getStartRowIndex() + mergeVo.getTitleMaxColumNumber() - 1));}} else {row.createCell(mergeVo.getStartRowIndex()).setCellValue(value);}}/*** 列合并分割分配** @param s* @param e* @param x* @return*/public static List<int[]> splitIntoSegments(int s, int e, int x) {int i = e - s;List<int[]> segments = new ArrayList<>();int baseLength = i / x; // 每段的基本长度int remainder = i % x;   // 剩余的数值int start = 0;          // 起始值for (int k = 1; k <= x; k++) {int length = baseLength; // 当前段的长度if (k <= remainder) {length += 1; // 分配剩余的数值}int end = start + length - 1; // 结束值segments.add(new int[]{start + s, end + s}); // 添加到结果列表start = end + 1; // 更新下一段的起始值}return segments;}
}

 合并项辅助类

package org.fri.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class MergeVo {private String key;private int startRowIndex;private int titleMaxColumNumber;
}

 导出测试类

package org.fri.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author Lenovo*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExportExample {private String name;private Integer age;private String sex;private String roles;private String technique;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue3】实现pdf在线预览的几种方式

今天一天对当前可用的pdf预览插件做了测试&#xff0c;主要需求是只能预览不能下载&#xff0c;但对于前端来说&#xff0c;没有绝对的禁止&#xff0c;这里只罗列实现方式。 目前采用vue3版本为&#xff1a;3.2.37 iframevue-officepdfjs-dist iframe 先说最简单的&#xf…

腿足机器人之一- 机械与电子组件概览

腿足机器人之一机械与电子组件概览 引言机械组件骨架材料关节设计关节机械组件轴承&#xff08;ings&#xff09;连杆&#xff08;Linkages&#xff09;齿轮&#xff08;Gears&#xff09; 电气组件电机控制器传感器 四足机器人设计双足机器人设计波士顿Atlas机器人 引言 腿足…

重读《Java面试题,10万字208道Java经典面试题总结(附答案)》

最近重读了这篇文章&#xff0c;对很多概念模糊的地方加了拓展和补充。 目录 1、JDK 和 JRE 有什么区别&#xff1f; 2、 和 equals 的区别是什么&#xff1f; 3、final 在 java 中有什么作用&#xff1f; 4、java 中的 Math.round(-1.5) 等于多少&#xff1f; 5、String…

浏览器打开Axure RP模型

1&#xff0c;直接使用chrome打开&#xff0c;提示下载插件 2&#xff0c;需要做一些操作 打开原型文件&#xff0c;找到resources\chrome\axure-chrome-extension.crx文件&#xff0c;这就是我们需要的Chrome插件。 将axure-chrome-extension.crx文件后缀名改为axure-chrome…

优雅的git log输出内容更加醒目

执行命令 git config --global alias.lg "log --graph --prettyformat:%C(red)%h%C(reset) - %C(yellow)%d%C(reset) %C(magenta)<%an>%C(reset) %C(cyan)(%ad)%C(reset) %C(green)%s%C(reset) (%cr) --abbrev-commit --dateformat:%Y-%m-%d %H:%M:%S"

平面与平面相交算法杂谈

1.前言 空间平面方程&#xff1a; 空间两平面如果不平行&#xff0c;那么一定相交于一条空间直线&#xff0c; 空间平面求交有多种方法&#xff0c;本文进行相关讨论。 2.讨论 可以联立方程组求解&#xff0c;共有3个变量&#xff0c;2个方程&#xff0c;而所求直线有1个变量…

链表 —— 常用技巧与操作总结详解

引言 链表作为一种动态数据结构&#xff0c;以其灵活的内存管理和高效的插入删除操作&#xff0c;在算法与工程实践中占据重要地位。然而&#xff0c;链表的指针操作复杂&#xff0c;容易引发内存泄漏和野指针问题。本文博主将从基础操作到高阶技巧&#xff0c;系统化解析链表的…

【LLM】13:大模型算法面试题库

一、Transformer篇 1. Transformer的结构是什么 Transformer 由 编码器&#xff08;Encoder&#xff09; 和 解码器&#xff08;Decoder&#xff09; 两部分组成&#xff0c;两部分都包含目标嵌入层、位置编码、多头注意力层、前馈网络&#xff0c;且有残差连接和层归一化&am…

语言大模型基础概念 一(先了解听说过的名词都是什么)

SFT&#xff08;监督微调&#xff09;和RLHF&#xff08;基于人类反馈的强化学习&#xff09;的区别 STF&#xff08;Supervised Fine-Tuning&#xff09;和RLHF&#xff08;Reinforcement Learning from Human Feedback&#xff09;是两种不同的模型训练方法&#xff0c;分别…

Linux-文件基本操作

1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标&#xff0c;键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…

【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用

一、场景描述 我想写一个轮播图的程序&#xff0c;只是把bootstrap里面的轮播图拉过来就用上感觉不是很合适&#xff0c;然后我就想自己写自动轮播&#xff0c;因此&#xff0c;这篇文章里面只是自动轮播的部分&#xff0c;没有按键跟自动轮播的衔接部分。 Ps: 本文用的是函数…

LabVIEW与USB设备开发

开发一台USB设备并使用LabVIEW进行上位机开发&#xff0c;涉及底层驱动的编写、USB通信协议的实现以及LabVIEW与设备的接口设计。本文将详细介绍如何开发USB设备驱动、实现LabVIEW与USB设备的通信以及优化数据传输&#xff0c;帮助用户顺利完成项目开发。下面是一个详细的说明&…

高通android WIFI debug

参考高通文档&#xff1a;80-76240-16_REV_AA_Wi-Fi_Debug_Techniques 大纲 一、 WLAN Debug Logs –logcat ■ Logcat log logcat is a command-line tool that dumps the log of system messages, ■ Including stack traces when the device throws an error. ■ Need t…

蓝桥杯之并查集

算法思想 并查集是一种树形的数据结构&#xff0c;主要用于解决一些元素分组问题。用于处理一些不相交集合的合并以及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的树根&#xff0c;就能确…

el-table封装一个自定义列配置表格组件(vue3开箱即用)

组件核心功能 拖拽排序&#xff08;使用 vuedraggable&#xff09; 显示/隐藏控制 列宽调整 列固定状态记忆 搜索过滤列 本地存储&#xff08;localStorage&#xff09;可改成接口保存 默认配置恢复 通过 searchText 动态过滤列。 安装拖拽依赖 npm install vuedragg…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与Redis集成及故障排查指南 禅道镜像版本&#xff1a;easysoft/zentao:21.4 Redis版本&#xff1a;redis:6.2.0 Mysql版本&#xff1a;mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与…

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…

如何借助NoETL指标平台实现数据分析、决策的提效?

通常&#xff0c;企业通过明确分析目标、定位所需分析的数据&#xff0c;再通过多渠道汇集销售数据、客户反馈、市场调研等信息&#xff0c;经过数据清洗、缺失值处理及格式标准化等手段&#xff0c;运用描述性统计、回归分析、聚类分析及关联规则挖掘等多样分析方法&#xff0…

hexo 魔改 | 修改卡片透明度

hexo 魔改 | 修改卡片透明度 ** 博客食物用更佳 博客地址 ** 这是笔者自己瞎倒腾的。作为前端菜鸡一枚&#xff0c;大佬们随便看看就好~ 我用的主题是 butterfly 4.12.0 分析 通过开发者工具可以看出来卡片的背景和 --card-bg 变量有关 再在 sources 下的 css 文件夹下的…

制造业物联网的十大用例

预计到 2026 年&#xff0c;物联网制造市场价值将达到 4000 亿美元。实时收集和分析来自联网物联网设备与传感器的数据&#xff0c;这一能力为制造商提供了对生产流程前所未有的深入洞察。物联网&#xff08;IoT&#xff09;有潜力彻底改变制造业&#xff0c;使工厂能够更高效地…