java工作记录

文章目录

  • esayExcel
    • 导出
      • 依赖
      • 后端代码
        • controller
        • service
        • 单元格宽度配置类
        • util
      • 前端代码
  • 若依
    • 配置多数据源

esayExcel

导出

依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.4</version>
</dependency>

后端代码

controller
@RequestMapping("/exportDemo")
public void exportDemo(@RequestBody Map<String, String> params,HttpServletResponse response) {testService.exportDemo(params, response);
}
service
public void exportDemo(Map<String, String> params,HttpServletResponse response) {List<Map<String, Object>> dataList = getDataList(params);try {response.reset();response.setHeader("Content-type", "application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode("表名称-" +DateUtils.format(new Date(),"yyyyMMddHHmmss") + ".xls", "utf-8"));// 表内容样式WriteCellStyle writeCellStyleContent = new WriteCellStyle();//垂直居中,水平居中writeCellStyleContent .setVerticalAlignment(VerticalAlignment.CENTER);writeCellStyleContent .setHorizontalAlignment(HorizontalAlignment.CENTER);writeCellStyleContent .setBorderLeft(BorderStyle.THIN);writeCellStyleContent .setBorderTop(BorderStyle.THIN);writeCellStyleContent .setBorderRight(BorderStyle.THIN);writeCellStyleContent .setBorderBottom(BorderStyle.THIN);//设置 自动换行writeCellStyleContent .setWrapped(true);WriteFont writeFont = new WriteFont();writeFont.setFontHeightInPoints((short) 12);writeFont.setFontName("宋体");writeCellStyleContent.setWriteFont(writeFont);//表头样式WriteCellStyle writeCellStyleHead = new WriteCellStyle();writeFont = new WriteFont();writeFont.setFontHeightInPoints((short) 12);writeFont.setBold(true);writeFont.setFontName("宋体");writeCellStyleHead.setWriteFont(writeFont);ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build();List<List<String>> head = new ArrayList<List<String>>() {{add(new ArrayList<String>() {{add("单位单位单位");}});add(new ArrayList<String>() {{add("语文");add("已");}});add(new ArrayList<String>() {{add("数学");add("未");}});add(new ArrayList<String>() {{add("时间");}});}};WriteSheet ajSheet1 = EasyExcel.writerSheet(0, "sheetName").head(head).registerWriteHandler(new ExcelWidthStyleStrategy()).registerWriteHandler(new HorizontalCellStyleStrategy(writeCellStyleHead,writeCellStyleContent)).build();writer.write(getData(dataList), ajSheet1);writer.finish();} catch (IOException e) {e.printStackTrace();}
}
单元格宽度配置类
package com.utils;import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.springframework.util.CollectionUtils;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {private Map<Integer, Map<Integer,Integer>> CACHE = new HashMap<>();@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder,List<CellData> list, Cell cell, Head head,Integer integer, Boolean aBoolean) {boolean needSetWidth = aBoolean || !CollectionUtils.isEmpty(list);int columnIndex = cell.getColumnIndex();if (needSetWidth) {Map<Integer, Integer> maxColumnWidthMap= CACHE.get(writeSheetHolder.getSheetNo());if (maxColumnWidthMap == null) {maxColumnWidthMap = new HashMap<>();CACHE.put(writeSheetHolder.getSheetNo(),maxColumnWidthMap);}Integer columnWidth = dataLength(list, cell, aBoolean);if (columnWidth >=0) {if (columnWidth > 150) {columnWidth = 150;}Integer maxColumnWidth = maxColumnWidthMap.get(columnIndex);if (maxColumnWidth == null || columnWidth > maxColumnWidth) {maxColumnWidthMap.put(columnIndex,columnWidth);writeSheetHolder.getSheet().setColumnWidth(columnIndex,columnWidth * 500);}}}}private Integer dataLength (List<CellData> cellDataList,Cell cell,Boolean isHead) {if (isHead) {int bytesLength = cell.getStringCellValue().getBytes().length;if (bytesLength < 10) {return bytesLength;} else {int stringLength = cell.getStringCellValue().length();Double v = (bytesLength + stringLength) * 0.5;return v.intValue();}} else {CellData cellData = cellDataList.get(0);CellDataTypeEnum type = cellData.getType();if (type == null) {return -1;} else {switch (type) {case STRING:int bytesLength = cellData.getStringValue().getBytes().length;if (bytesLength < 10) {return bytesLength;} else {int stringLength = cellData.getStringValue().length();Double v = (bytesLength + stringLength) * 0.3;return v.intValue();}case BOOLEAN:return cellData.getBooleanValue().toString().getBytes().length;case NUMBER:return cellData.getNumberValue().toString().getBytes().length;default:return -1;}}}}
}
util
private List<Map<String, Object>>getDataList(Map<String, String> params) {List<Map<String, Object>> reuslt = new ArrayList<>();Map<String, Object> map = new HashMap<>();map.put("dw","测试单位");map.put("y","10");map.put("w","800");map.put("sj","2023-07-01 12:12:00");reuslt.add(map);return reuslt;
}private List<List<String>>getData(List<Map<String, Object>> dataList) {List<List<String>> result = new ArrayList<>();for (Map<String, Object> map : dataList) {List<String> list = new ArrayList<>();list.add(map.get("dw").toString());list.add(map.get("y").toString());list.add(map.get("w").toString());list.add(map.get("sj").toString());result.add(list);}return result;
}

前端代码

exportXlsx () {this.$axios({method: 'post',url: '/test/exportDemo',responseType: 'blob',data: {...this.params}}).then(response => {let filename = response.headers['content-disposition']const blob = new Blob([response.data])var downloadElement = document.createElement('a')var href = window.URL.createObjectURL(blob)downloadElement.href = hrefdownloadElement.download = decodeURIComponent(filename.split('filename=')[1])document.body.appendChild(downloadElement)downloadElement.click()document.body.removeChild(downloadElement)window.URL.revokeObjectURL(href)}).catch(reject => {})
}

若依

配置多数据源

若依配置多数据源,分别为不同数据库时示例

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

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

相关文章

基于SpringBoot+Vue+Mysql的图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

为什么 C/C++ 的库很喜欢缩写?

一、正如很多回答已经提到的&#xff0c;早期的有效标识符长度有限制&#xff0c;所以缩写用得比较多。也主要是在 C 里&#xff08;Unix 的传统&#xff09;。C 里的标识符用缩写的不多。如 C98&#xff08;毕竟比 C89 晚了 9 年么&#xff09;里我们就已经有了很多挺长的名字…

21 条MySQL 开发规范,太详细了,建议收藏!

数据库对象命名规范 1、数据库对象 数据库对象是数据库的组成部分&#xff0c;常见的有以下几种&#xff1a;表&#xff08;Table &#xff09;、索引&#xff08;Index&#xff09;、视图&#xff08;View&#xff09;、图表&#xff08;Diagram&#xff09;、缺省值&#x…

亚马逊电子产品审核?需要提交UL测试报告?

亚马逊要求销售的电子产品&#xff0c;必须经过检测符合标准才可以上架。 要办理亚马逊美国站UL测试报告&#xff0c;你需要联系国内的第三方检测机构&#xff0c;当然必须是由符合ISO17025/ILAC ISO 17025标准的实验室出具的合格报告&#xff0c;ISO 17025标准是国际上广泛认…

使用flex布局写6种骰子

使用flex布局写6种骰子&#x1f3b2; 效果图 概述说明 不使用position定位&#xff0c;完全靠flex进行分配位置。 在线查看 点击查看 完整代码 <template><div class"content"><ul class"list"><li class"item" v-fo…

视频图像的两种表示方式YUV与RGB(1)

了解过计算机图形图像学的该知道&#xff0c;可用RGB和YUV两种方式表示图像像素&#xff0c;视频由一帧一帧的图像组成&#xff0c;每一张图片是一个一个的像素点组成&#xff0c;既然有两种表示像素的方法&#xff0c;那就一起解一下两种表示方式的异同及优缺点。 RGB像素 这…

声明结构体变量时,是否一定要加struct关键字?

在C语言中&#xff0c;当你声明一个结构体变量时&#xff0c;是否需要使用struct关键字取决于你是否已经为结构体类型定义了一个别名。 如果你没有使用typedef为结构体定义别名&#xff0c;那么在声明结构体变量时&#xff0c;你确实需要使用struct关键字来指明变量所属的类型。…

OpenAI推出GPTBot网络爬虫:提升AI模型同时引发道德法律争议

文章目录 一、GPTBot 简介二、功能特点三、技术细节3.1、用户代理标识3.2、数据采集规则3.3、数据使用目的3.4、网站屏蔽方法3.5、数据过滤 四、GPTBot 的道德和法律问题五、GPTBot 的使用方法和限制六、总结 一、GPTBot 简介 OpenAI 推出的网络爬虫GPTBot旨在通过从互联网上收…

进制转换(0123456789ABCDEF)

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {//将十进制数M转化为N进制数Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();StringBuffer sb new StringBuffer();//1String s "0123456789…

从零开始学Python(五)面向对象

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Python的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.类的定义 二.魔法方法 1.概念 2.常…

Javascript进阶内容

1. 作用域 1.1 局部作用域 局部作用域分为函数作用域 和 块级作用域 块级作用域就是用 {} 包起来的&#xff0c;let、const声明的变量就是产生块作用域&#xff0c;var不会&#xff1b;不同代码块之间的变量无法互相访问&#xff0c;里面的变量外部无法访问 1.2 全局作用域…

【C/C++面试必备】声明和定义的区别

本文来介绍一下声明和定义的区别&#xff0c;本文中的程序以 C/C 为例进行说明。 一、变量的声明和定义 1.1 声明 声明是用来告诉编译器变量的名称和类型&#xff0c;而不分配内存。 例如&#xff1a; extern int var; // 声明extern int ble 10; // 定义typedef int INT;…

2024HW --->反序列化漏洞!

对于反序列化&#xff0c;这个漏洞也是常用的&#xff0c;不过涉及到的方面非常非常广&#xff0c;比其他漏洞也难很多 于是本篇文章就分成PHP和JAVA的反序列化来讲讲 1.反序列化 想要理解反序列化&#xff0c;首先就要理解序列化 序列化&#xff1a;把对象转换为字节序列的过…

默克尔(Merkle)树 - 原理及用途

默克尔&#xff08;Merkle&#xff09;树的原理以及用途 引言 在当今数字化时代&#xff0c;确保数据的完整性是至关重要的。默克尔树作为一种高效的数据结构&#xff0c;被广泛应用于网络安全、分布式系统以及加密货币等领域&#xff0c;用于验证大量数据的完整性和一致性 数…

【HTB】 OpenSource

OpenSource 靶机地址&#xff1a;https://app.hackthebox.com/machines/471 信息收集 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST Nmap scan report f…

GPIO口工作原理的超详细解释

一、GPIO基本结构 每个GPIO内部都有这样的一个电路结构&#xff0c;这个结构在本文下面会具体介绍。 这边的电路图稍微提一下&#xff1a; 保护二极管&#xff1a; IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时&#xff0c;上方的二…

Altair® (澳汰尔)Inspire™ Print3D 打造高效的增材制造设计

Altair &#xff08;澳汰尔&#xff09;Inspire™ Print3D 打造高效的增材制造设计 借助 Inspire Print3D&#xff0c;可加速创新、结构高效的 3D 打印部件的创建、优化和研究&#xff0c;提供快速准确的工具集&#xff0c;可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿…

Bilstm双向长短期神经网络多输入单输出回归分析

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络的多输入单输出回归分析,基于bilstm的多输入单输出回归分析 完整代码:Bilstm双向长短期神经网络多输入单输出回归分析.zip资源-CSDN文库 https://download.csdn.net/download/abc9918351…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

背包问题四种类型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、01背包二、完全背包1.引入库 三.多重背包优化&#xff1a; 四.分组背包总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&…