EasyExcel写数据

本地文件写数据

package com.qiangesoft.easyexcel.write;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.*;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.qiangesoft.easyexcel.util.ResourceFileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** excel写工具类** @author qiangesoft* @date 2024-04-10*/
@Slf4j
public class ExcelWrite {/*** 写数据-传递方法** @param fileName* @throws IOException*/public static void write(String fileName) throws IOException {EasyExcel.write(fileName, WriteData.class).sheet("模板")
//                .head(head()) // 动态表头.doWrite(() -> {// todo 传入真实数据return data();});}/*** 写数据-传递数据** @param fileName* @throws IOException*/public static void write1(String fileName) throws IOException {EasyExcel.write(fileName, WriteData.class).sheet("模板").doWrite(data());}/*** 写数据** @param fileName* @throws IOException*/public static void write2(String fileName) throws IOException {try (ExcelWriter excelWriter = EasyExcel.write(fileName, WriteData.class).build()) {WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();excelWriter.write(data(), writeSheet);}}/*** 写数据-重复写** @param fileName* @throws IOException*/public static void writeRepeat(String fileName) throws IOException {try (ExcelWriter excelWriter = EasyExcel.write(fileName, WriteData.class).build()) {WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();for (int i = 0; i < 5; i++) {List<WriteData> data = data();excelWriter.write(data, writeSheet);}}}/*** 写数据-多个相同sheet** @param fileName* @throws IOException*/public static void writeSameSheet(String fileName) throws IOException {try (ExcelWriter excelWriter = EasyExcel.write(fileName, WriteData.class).build()) {for (int i = 0; i < 5; i++) {WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build();List<WriteData> data = data();excelWriter.write(data, writeSheet);}}}/*** 写数据-多个sheet** @param fileName* @throws IOException*/public static void writeManySheet(String fileName) throws IOException {try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) {for (int i = 0; i < 5; i++) {WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(WriteData.class).build();List<WriteData> data = data();excelWriter.write(data, writeSheet);}}}/*** 写数据-图** @param fileName* @throws IOException*/public static void writeWithImage(String fileName) throws IOException {String imagePath = ResourceFileUtil.getClassPathByClassLoader() + "demo/img.jpg";try (InputStream inputStream = ResourceFileUtil.getResourceByClassPathResource("demo/img.jpg")) {List<ImageWriteData> list = ListUtils.newArrayList();ImageWriteData imageWriteData = new ImageWriteData();File file = new File(imagePath);imageWriteData.setFile(file);imageWriteData.setUrl(new URL("https://www.oicfx.cn/img/logo.49129107.png"));imageWriteData.setByteArray(FileUtils.readFileToByteArray(file));imageWriteData.setString(imagePath);imageWriteData.setInputStream(inputStream);WriteCellData<Void> writeCellData = new WriteCellData<>();writeCellData.setType(CellDataTypeEnum.STRING);writeCellData.setStringValue("额外的放一些文字");List<ImageData> imageDataList = new ArrayList<>();ImageData imageData = new ImageData();imageData.setImage(FileUtils.readFileToByteArray(file));imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_JPEG);imageDataList.add(imageData);writeCellData.setImageDataList(imageDataList);imageWriteData.setWriteCellDataFile(writeCellData);list.add(imageWriteData);// 写入数据EasyExcel.write(fileName, ImageWriteData.class).sheet().doWrite(list);}}/*** 写数据-根据模板** @param fileName* @param templateName* @throws IOException*/public static void writeWithTemplate(String fileName, String templateName) throws IOException {String path = ResourceFileUtil.getClassPathByClassLoader() + templateName;EasyExcel.write(fileName, WriteData.class).withTemplate(path).sheet().doWrite(data());}/*** 写数据-单元格样式** @param fileName*/public static void writeCellData(String fileName) {ExcelWriteCellData excelWriteCellData = new ExcelWriteCellData();// 设置超链接WriteCellData<String> hyperlink = new WriteCellData<>("官方网站");excelWriteCellData.setHyperlink(hyperlink);HyperlinkData hyperlinkData = new HyperlinkData();hyperlink.setHyperlinkData(hyperlinkData);hyperlinkData.setAddress("https://github.com/alibaba/easyexcel");hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);// 设置备注WriteCellData<String> comment = new WriteCellData<>("备注的单元格信息");excelWriteCellData.setCommentData(comment);CommentData commentData = new CommentData();comment.setCommentData(commentData);commentData.setAuthor("Jiaju Zhuang");commentData.setRichTextStringData(new RichTextStringData("这是一个备注"));// 备注的默认大小是按照单元格的大小 这里想调整到4个单元格那么大 所以向后 向下 各额外占用了一个单元格commentData.setRelativeLastColumnIndex(1);commentData.setRelativeLastRowIndex(1);// 设置公式WriteCellData<String> formula = new WriteCellData<>();excelWriteCellData.setFormulaData(formula);FormulaData formulaData = new FormulaData();formula.setFormulaData(formulaData);// 将 123456789 中的第一个数字替换成 2// 这里只是例子 如果真的涉及到公式 能内存算好尽量内存算好 公式能不用尽量不用formulaData.setFormulaValue("REPLACE(123456789,1,1,2)");// 设置单个单元格的样式 当然样式 很多的话 也可以用注解等方式。WriteCellData<String> writeCellStyle = new WriteCellData<>("单元格样式");writeCellStyle.setType(CellDataTypeEnum.STRING);excelWriteCellData.setWriteCellStyle(writeCellStyle);WriteCellStyle writeCellStyleData = new WriteCellStyle();writeCellStyle.setWriteCellStyle(writeCellStyleData);// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 背景绿色writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex());// 设置单个单元格多种样式// 这里需要设置 inMomery=true 不然会导致无法展示单个单元格多种样式,所以慎用WriteCellData<String> richTest = new WriteCellData<>();richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING);excelWriteCellData.setRichText(richTest);RichTextStringData richTextStringData = new RichTextStringData();richTest.setRichTextStringDataValue(richTextStringData);richTextStringData.setTextString("红色绿色默认");// 前2个字红色WriteFont writeFont = new WriteFont();writeFont.setColor(IndexedColors.RED.getIndex());richTextStringData.applyFont(0, 2, writeFont);// 接下来2个字绿色writeFont = new WriteFont();writeFont.setColor(IndexedColors.GREEN.getIndex());richTextStringData.applyFont(2, 4, writeFont);List<ExcelWriteCellData> data = new ArrayList<>();data.add(excelWriteCellData);EasyExcel.write(fileName, ExcelWriteCellData.class).inMemory(true).sheet("模板").doWrite(data);}/*** 写数据** @param fileName*/public static void writeTable(String fileName) {try (ExcelWriter excelWriter = EasyExcel.write(fileName, WriteData.class).build()) {// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build();// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build();WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build();// 第一次写入会创建头excelWriter.write(data(), writeSheet, writeTable0);// 第二次写如也会创建头,然后在第一次的后面写入数据excelWriter.write(data(), writeSheet, writeTable1);}}/*** 写数据-带批注** @param fileName*/public static void writeComment(String fileName) {EasyExcel.write(fileName, WriteData.class).inMemory(Boolean.TRUE).registerWriteHandler(new CommentWriteHandler()).sheet("模板").doWrite(data());}/*** 构造数据** @return*/private static List<WriteData> data() {List<WriteData> list = ListUtils.newArrayList();for (int i = 0; i < 10; i++) {WriteData data = new WriteData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}}

导出文件

@GetMapping("/write")public void write() throws IOException {ExcelWrite.write("D:/excel/write.xlsx");ExcelWrite.write1("D:/excel/write1.xlsx");ExcelWrite.write2("D:/excel/write2.xlsx");ExcelWrite.writeRepeat("D:/excel/writeRepeat.xlsx");ExcelWrite.writeSameSheet("D:/excel/writeSameSheet.xlsx");ExcelWrite.writeManySheet("D:/excel/writeManySheet.xlsx");ExcelWrite.writeWithImage("D:/excel/writeWithImage.xlsx");ExcelWrite.writeCellData("D:/excel/writeCellData.xlsx");ExcelWrite.writeWithTemplate("D:/excel/writeWithTemplate.xlsx", "demo/demo.xlsx");ExcelWrite.writeTable("D:/excel/writeTable.xlsx");ExcelWrite.writeComment("D:/excel/writeComment.xlsx");}
@GetMapping("/download")public void download(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("测试", StandardCharsets.UTF_8).replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), WriteData.class).sheet("模板").doWrite(data());}private List<WriteData> data() {List<WriteData> list = ListUtils.newArrayList();for (int i = 0; i < 10; i++) {WriteData data = new WriteData();data.setString("字符串" + 0);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}

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

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

相关文章

【51媒体网】企业商业宣传用媒体官方直播的优势有哪些

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 企业宣传使用媒体官方直播的优势可能体现在以下几个方面&#xff1a; 提升品牌知名度&#xff1a;通过官方媒体的直播平台&#xff0c;企业可以向更广泛的受众展示自己的品牌和产品&…

Shell 输入输出:从 Read 到管道的奇妙旅程

在计算机世界中&#xff0c;Shell 是一种强大的工具&#xff0c;它允许我们与操作系统进行交互。Shell 提供了一种简单而强大的方式来处理输入和输出&#xff0c;使得我们可以在命令行中执行各种任务。本文将带你领略 Shell 输入输出的奇妙之旅&#xff0c;从 Read 到管道的探索…

如何监控容器或K8s中的OpenSearch

概述 当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 简介…

Linux:sprintf、snprintf、vsprintf、asprintf、vasprintf比较

这些函数都在stdio.h里&#xff0c;不过不同系统不同库&#xff0c;有些函数不一定提供。 1. sprintf 函数原型&#xff1a; int sprintf (char *str, const char *format, ...); extern int sprintf (char *__restrict __s, const char *__restrict __format, ...); 功能是将…

2017NOIP普及组真题 4. 跳房子

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1417\ 核心思想 首先、本题中提到 “ 至少 要花多少金币改造机器人&#xff0c;能获得 至少 k分 ”。看到这样的话语&#xff0c;基本可以考虑要使用 二分答案。 那么&#xff0c;本题中…

SQL注入攻击和防御

声明&#xff1a;本文仅限于技术讨论与分享&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负&#xff0c;与本号及原作者无关。 # 概述 SQL注入是一种网络安全攻击&#xff0c;它利用了Web应用程序对用户输入的验证不足&#xff0c;从而在后台数据…

用vue3写一个AI聊天室

效果图如下&#xff1a; 1、页面布局&#xff1a; <template><div class"body" style"background-color: rgb(244, 245, 248); height: 730px"><div class"container"><div class"right"><div class"…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络&#xff0c;可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例&#xff0c;它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络&#xff1a; 首先&#xff0c;确保你已经安装了 Node.js 和 Electron。 然后&am…

数据结构——线性表(链式存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

利用python构建Dockerfile 文件

使用 Python 脚本来创建 Dockerfile 可以带来多方面的好处&#xff0c;尤其是当你需要自动化构建过程、管理复杂的构建步骤或者需要根据不同的环境条件生成不同的 Docker 镜像时。以下是使用 Python 创建 Dockerfile 的一些主要优点&#xff1a; 自动化和可重复性&#xff1a; …

蓝桥杯刷题 二分-[2145]求阶乘(C++)

问题描述 满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1。 输入格式 一个整数 K。 输出格式 一个整数代表答案。 样例输入 2 样例输出 10 评测用例规模与约定 对于 30% 的数据&#xff0c;1 ≤ K ≤ 10的6次方 对于 100% 的数据&…

【MATLAB 分类算法教程】_2粒子群算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例2:粒子群算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2. 读取数据代码3.数据预处理代码4.利用粒子群算法PSO求解最佳的SVM参数c和g代码5.根据最佳的参数进行SVM模型训练代码6.SVM模型预测代码7.准确率分析以及分类结果对比作图代码本文以红酒数…

结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发布到InsCode

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

lisp学习历程

学习Lisp是一项有趣且具有挑战性的过程&#xff0c;它是一种古老的编程语言&#xff0c;但在人工智能和函数式编程领域仍然有很高的影响力。下面是一个可能的Lisp学习历程&#xff1a; 了解Lisp的历史和基本概念&#xff1a; 了解Lisp的起源、发展历程和影响。理解Lisp的基本概…

uniapp:聊天消息列表(好友列表+私人单聊)支持App、H5、小程序

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 文章简介&#xff08;效果图展示&#xff…

2024-04-10 Linux gzip 和 gunzip 命令,gzip 压缩的文件通常比原始文件小得多。

一、gzip 是 Linux 系统中用于压缩文件的命令&#xff0c;它通常用于将单个文件压缩成 .gz 格式的文件。gzip 压缩的文件通常比原始文件小得多&#xff0c;因此它在节省磁盘空间和减少文件传输时间方面非常有用。 gzip 命令的基本语法如下&#xff1a; gzip [选项] [文件]复制…

asp.net dropdownlist二级联动

asp.net dropdownlist二级联动 asp.net dropdownllist绑定数据库 怎么根据dropdownlist1选择的二级联动dropdownlist2 AutoPostBack"True"后 重新获取的dropdownlist1 为空了 在 ASP.NET 中使用 DropDownList 绑定数据库的步骤如下&#xff1a;创建一个 DropDownL…

Vue3学习01 Vue3核心语法

Vue3学习 1. Vue3新的特性 2. 创建Vue3工程2.1 基于 vue-cli 创建项目文件说明 2.2 基于 vite 创建具体操作项目文件说明 2.3 简单案例(vite) 3. Vue3核心语法3.1 OptionsAPI 与 CompositionAPIOptions API 弊端Composition API 优势 ⭐3.2 setup小案例setup返回值setup 与 Opt…

ssm038汽车养护管理系统+jsp

汽车养护管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本汽车养护管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

保姆级教程带你实现HarmonyOS手语猜一猜元服务(二)

由于文章篇幅较长&#xff0c;共分为了三篇发布&#xff1a; 保姆级教程带你实现HarmonyOS手语猜一猜元服务&#xff08;一&#xff09; 保姆级教程带你实现HarmonyOS手语猜一猜元服务&#xff08;二&#xff09; 保姆级教程带你实现HarmonyOS手语猜一猜元服务&#xff08;三&…