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

【Java】ExcelWriter自适应宽度工具类(支持中文)

工具类

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** @author xiaoming* @date 2023/11/17 10:40*/
public class ExcelUtils {/*** 自适应宽度(支持中文)** @param sheet 表单* @param size  因为for循环从0开始,size值为 列数-1*/public static void setSizeColumn(Sheet sheet, int size) {for (int columnNum = 0; columnNum <= size; columnNum++) {int columnWidth = sheet.getColumnWidth(columnNum) / 256;for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {Row currentRow;// 当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(columnNum) != null) {Cell currentCell = currentRow.getCell(columnNum);if (currentCell.getCellType() == CellType.STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length) {columnWidth = length;}}}}sheet.setColumnWidth(columnNum, columnWidth * 256);}}
}

工具类使用方法

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.fastjson.JSONObject;
import com.xxx.utils.ExcelUtils;
import com.xxx.entity.Entity;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.web.bind.annotation.*;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.net.URLEncoder;/*** 文件接口** @author xiaoming* @date 2023/11/17 10:50*/
@RestController
@RequestMapping("/file")
public class FileController {@PostMapping("exportExcel")public void exportExcel(HttpServletResponse response) {// 假设这里有个List是要导出用的List<Entity> list = ...;ExcelWriter writer = ExcelUtil.getWriter(true);writer.addHeaderAlias("field1", "fieldValue1").addHeaderAlias("field2", "fieldValue2").addHeaderAlias("field3", "fieldValue3");if (CollUtil.isNotEmpty(list)) {writer.write(list, true);// 就只有下面两步操作,根据上面addHeaderAlias的个数减一就行,上面是三个,所以填二Sheet sheet = writer.getSheet();ExcelUtils.setSizeColumn(sheet, 2);ServletOutputStream out = nulltry {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("xxx.xlsx", "UTF-8"));out = response.getOutputStream();writer.flush(out, true);} catch (IOException e) {e.printStackTrace();} finally {writer.close();IoUtil.close(out);}}}
}

相关文章:

【Java】ExcelWriter自适应宽度工具类(支持中文)

工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

C++二分查找算法:132模式枚举3简洁版

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三枚…...

Map 和 WeakMap:JavaScript 中的键值对集合

JavaScript 是一种动态、弱类型的脚本语言&#xff0c;经常用于构建现代 Web 应用程序。在编写 JavaScript 代码时&#xff0c;我们经常需要使用各种数据结构来存储和管理数据。其中&#xff0c;Map 和 WeakMap 就是两个非常有用的数据结构&#xff0c;它们分别提供了用于存储键…...

linux rsyslog综合实战1

本次我们通过rsyslog服务将A节点服务器上的单个日志(Path:/var/log/245-1.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS Linux release 7.9.2009 (Core)rs…...

redis+python 建立免费http-ip代理池;验证+留接口

前言: 效果图: 对于网络上的一些免费代理ip,http的有效性还是不错的;但是,https的可谓是凤毛菱角; 正巧,有一个web可以用http访问,于是我就想到不如直接拿着免费的HTTP代理去做这个! 思路: 1.单页获取ipporttime (获取time主要是为了后面使用的时候,依照时效可以做文章) 2.整…...

虚幻C++ day5

角色状态的常见机制 创建角色状态设置到UI上 在MainPlayer.h中新建血量&#xff0c;最大血量&#xff0c;耐力&#xff0c;最大耐力&#xff0c;金币变量&#xff0c;作为角色的状态 //主角状态UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category "Playe Stats&…...

C#中的DateTime类

C# 中的 DateTime 类是用于表示日期和时间的结构。它提供了一系列属性和方法&#xff0c;用于处理日期和时间的各种操作和计算。下面是一些常用的 DateTime 类的用法和方法解释&#xff0c;以及相应的示例说明&#xff1a; 创建 DateTime 对象&#xff1a; 使用当前日期和时间创…...

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…...

数字IC前端学习笔记:时钟切换电路

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 有些时候我们需要在系统运行时切换系统时钟&#xff0c;最简单的方法就是使用一个MUX&#xff08;数据选择器&#xff09;选择输出的时钟&#xff0c;如下代码片所…...

.NET6使用MiniExcel根据数据源横向导出头部标题及数据

.NET6MiniExcel根据数据源横向导出头部标题 MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 特点: 低内存耗用&#xff0c;避免OOM、频繁 Full GC 情况 支持即时操作每行数据 兼具搭配 LINQ 延迟查询特性&#xff0c;能办到低消耗、快速分页等复杂查询 轻量…...

表内容的操作(增删查改)【MySQL】

文章目录 表的 CRUDCreate&#xff08;增加&#xff09;插入记录插入冲突则更新记录替换记录 Retrieve&#xff08;查找&#xff09;查找记录指定表达式的别名为结果去重WHERE 子句运算符条件查询区间查询模糊查询空值查询 对结果排序筛选分页结果 Update&#xff08;修改&…...

C++快速入门 - 2(几分钟让你快速入门C++)

C快速入门 - 2 1. 内联函数1.1 概念1.2 特性 2. auto关键字(C11)2.1 类型别名思考2.2 auto简介2.3 auto的使用细则2.4 auto不能推导的场景 3. 基于范围的for循环(C11)3.1 范围for的语法3.2 范围for的使用条件 1. 内联函数 1.1 概念 以inline修饰的函数叫做内联函数&#xff0c…...

Excel自定义函数提取超链接

通过自定义函数的方法&#xff0c;批量提取超链接 首选开启开发工具选项 文件-选项-自定义功能区-勾选开发工具选项-确认 AltF11或者直接点击跳转到开发工具-Visual Basic 在左上方VBA project空白处右键点击空白区域-插入-模块 在弹出的窗口中输入以下命令定义GetURL函数 F…...

计算矩阵边缘元素之和

Description 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 Input 第一行分别为矩阵的行数m和列数n&#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c;…...

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测 目录 回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测&#xff08;…...

Flutter笔记:目录与文件存储以及在Flutter中的使用(下)

Flutter笔记 目录与文件存储以及在Flutter中的使用&#xff08;下&#xff09; 文件读写与Flutter中文件管理 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;…...

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…...

系列二、Lock接口

一、多线程编程模板 线程 操作 资源类 高内聚 低耦合 二、实现步骤 1、创建资源类 2、资源类里创建同步方法、同步代码块 三、12306卖票程序 3.1、synchronized实现 3.1.1、Ticket /*** Author : 一叶浮萍归大海* Date: 2023/11/20 8:54* …...

JVM虚拟机:通过日志学习PS+PO垃圾回收器

我们刚才设置参数的时候看到了-XXPrintGCDetails表示输出详细的GC处理日志&#xff0c;那么我们如何理解这个日志呢&#xff1f;日志是有规则的&#xff0c;我们需要按照这个规则来理解日志中的内容&#xff0c;它有两个格式&#xff0c;一个格式是GC的格式&#xff08;新生代&…...

从0开始学习JavaScript--JavaScript使用Promise

JavaScript中的异步编程一直是开发中的重要话题。传统的回调函数带来了回调地狱和代码可读性的问题。为了解决这些问题&#xff0c;ES6引入了Promise&#xff0c;一种更现代、更灵活的异步编程解决方案。本文将深入探讨JavaScript中如何使用Promise&#xff0c;通过丰富的示例代…...

【STM32F407 DSP实战】矩阵运算基础:从初始化到加减法与求逆的嵌入式实现

1. 为什么要在STM32F407上实现矩阵运算 在嵌入式开发中&#xff0c;矩阵运算可以说是无处不在。从简单的PID控制到复杂的图像处理算法&#xff0c;都离不开矩阵这个基础数据结构。就拿我最近做的一个四轴飞行器项目来说&#xff0c;姿态解算部分就需要频繁地进行矩阵乘法、求逆…...

OpenClaw AI代理成本监控:离线日志解析与Token用量分析实战

1. 项目概述与核心价值如果你和我一样&#xff0c;在日常工作中重度依赖像 OpenClaw 这样的 AI 代理框架来处理各种自动化任务&#xff0c;那么一个绕不开的“甜蜜的烦恼”就是成本监控。我们享受着 AI 带来的效率提升&#xff0c;但每次看到账单时&#xff0c;心里总会咯噔一下…...

2026年AI大模型接口中转站排行榜新鲜出炉!五大平台硬核数据对比,为开发者提供权威选型指南

发布机构&#xff1a;中国产业信息研究院 TechInsight AI评测实验室 发布日期&#xff1a;2026年3月28日 数据来源&#xff1a;72小时连续压测、万级QPS仿真、10万 真实请求样本、服务商后台脱敏数据 2026年&#xff0c;AI工业化实现全面落地&#xff0c;全球AI大模型接口中…...

DecK工具介绍(Declarative Configuration for Kong网关的声明式配置工具,可同步配置,热更新运行中的网关)类似Terraform、导出Kong配置、导出配置

文章目录DecK 完全指南&#xff1a;Kong 网关的声明式配置工具一、什么是 decK&#xff1f;二、为什么需要 decK&#xff1f;三、decK 的核心思想四、decK 的工作原理五、decK 支持管理哪些对象&#xff1f;六、安装 decKLinux/macOSWindows验证安装七、连接 Kong八、导出 Kong…...

AI技能自进化系统:异步复盘与残差学习架构实践

1. 项目概述&#xff1a;一个让AI助手学会自我进化的“技能大脑”如果你也玩过各种AI助手&#xff0c;比如Claude、GPTs或者国内的一些大模型应用&#xff0c;你肯定遇到过这样的场景&#xff1a;你教了它一个处理Excel表格的“技能”&#xff0c;比如“把A列数据乘以1.1然后填…...

开发AI应用时如何借助Taotoken进行多模型选型与测试

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI应用时如何借助Taotoken进行多模型选型与测试 在开发一个具体的AI应用功能时&#xff0c;选择合适的模型是影响最终效果与成…...

中间件与依赖系统:构建高效 Web 后端的双重利器

文章目录一、 中间件&#xff08;Middleware&#xff09;&#xff1a;全局的“拦截器”1.1 核心概念1.2 执行原理1.3 代码实现1.4 多中间件执行顺序二、 依赖系统&#xff08;Dependency Injection&#xff09;&#xff1a;精细化的“业务注入”2.1 为什么要用依赖系统&#xf…...

【2025最新】基于SpringBoot+Vue的汽车资讯网站管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展&#xff0c;汽车行业的信息化需求日益增长&#xff0c;传统的汽车资讯获取方式已无法满足用户对实时性、交互性和个性化服务的需求。汽车资讯网站作为信息传播的重要平台&#xff0c;亟需一套高效、稳定且易于维护的管理系统&#xff0c;以提升用…...

GetQzonehistory:5分钟免费备份你的QQ空间青春回忆

GetQzonehistory&#xff1a;5分钟免费备份你的QQ空间青春回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心那些承载青春记忆的QQ空间说说会随着时间消失吗&#xff1f;GetQ…...

【C语言】16 位的值,通过几种不同的方式将其拆分为高 8 位和低 8 位

当我们想要将一个16位的 Register_Value 拆分成高8位和低8位&#xff0c;并存储到 Send_Data_Uart5 数组中时&#xff0c;有几种常见的方法可以实现。让我们逐一优化和详细分析每种方法&#xff1a;方法 1: 使用位移和位掩码&#xff08;常用方法&#xff09;代码语言&#xff…...