JAVA POI Excel 使用数组公式 FREQUENCY

平台及依赖

  1. JAVA 17
  2. POI版本
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version></dependency>

正文

说明

有时候我们希望导出的excel能够包含一些基本公式,普通的单个公式如 SUM, COUNT等直接在cell单元格设置即可,如下代码

XSSFCell cell3 = row.createCell(0);
cell3.setCellFormula("SUM($A$2:$A$1000)");

但对于一些特殊公式如FREQUENCY这样需要一组公式共同完成结果集的,需要额外设置才能获取对应结果。
看下面的例子:

源码

package org.lionzhou.example.excel.formula.array;import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.List;/*** @author liangcheng.zhou@microtechmd.com* @version 1.0* @date 2024/4/8*/
public class EvaluateFormulaFrequency {// test datastatic final List<String> TEST_DATA = Arrays.asList("6.364", "6.44", "6.693", "6.508", "6.895", "6.41", "6.758", "6.364", "6.39", "6.663", "6.538", "6.431", "6.658", "6.51", "6.164", "6.613", "6.475", "6.121", "0", "5.884", "6.721", "6.345", "6.346", "6.504", "6.406", "6.993", "6.909", "7.071", "6.255", "6.938", "6.831", "7.058", "6.708", "0", "6.17", "6.716", "6.624", "7.113", "6.913", "6.769", "6.297", "6.554", "6.756", "7.073", "6.518", "7.725", "6.599", "6.795", "7.208", "6.349", "6.069", "6.391", "7.108", "6.888", "6.589", "6.7", "6.964", "7.061", "6.408", "6.864", "6.01", "6.441", "6.633", "6.18", "6.245", "6.589", "6.266", "6.865", "6.481", "7.06", "7.118", "6.516", "7.136", "6.672", "6.635", "6.796", "6.355", "7.356", "6.385", "6.693", "6.354", "6.515", "6.581", "7.248", "8.03", "6.836", "6.926", "6.311", "6.155", "6.656", "6.318", "6.938", "6.07", "6.331", "6.348", "6.538", "6.773", "6.203", "6.21", "6.344");public void export(File file) throws Exception {// 声明一个工作薄XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("sheet-1");// column title startXSSFRow headerRow = sheet.createRow(0);XSSFCell cell = headerRow.createCell(0);cell.setCellValue("data");// cell width, 一个字符默认情况下是256个单位sheet.setColumnWidth(0, 256 * 8);XSSFCell cell1 = headerRow.createCell(2);cell1.setCellValue("scale");sheet.setColumnWidth(2, 256 * 6);XSSFCell cell2 = headerRow.createCell(3);cell2.setCellValue("数量");sheet.setColumnWidth(3, 256 * 6);// column title end// set test datafor (int i = 0; i < TEST_DATA.size(); i++) {XSSFRow row = sheet.createRow(i + 1);XSSFCell rowCell = row.createCell(0);// warning 类型会影响数据公式结果rowCell.setCellValue(Double.parseDouble(TEST_DATA.get(i)));}// set scalefor (int i = 0; i < 11; i++) {XSSFRow row = sheet.getRow(i + 1);XSSFCell rowCell = row.createCell(2);rowCell.setCellValue(i);}// 关键 start// a array formula  前面是数据公式,后面是参与公式的一组单元格范围sheet.setArrayFormula("FREQUENCY($A$2:$A$10000,$C$2:$C$12)", new CellRangeAddress(1, 11, 3, 3));// execute formulaworkbook.setForceFormulaRecalculation(true);workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();// 关键 endworkbook.write(new FileOutputStream(file));}public static void main(String[] args) throws Exception {EvaluateFormulaFrequency evaluateFormula = new EvaluateFormulaFrequency();File file = new File(String.format("%s/data/%s.xls", System.getProperty("user.dir"), evaluateFormula.getClass().getSimpleName()));if (file.exists()) {file.delete();} else {file.getParentFile().mkdirs();}evaluateFormula.export(file);}
}

上面的例子可以直接下载
源码链接

效果

在这里插入图片描述

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

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

相关文章

2024-04-08(CSS,JS)

1.标准流 指的是标签在页面中默认的排布规则&#xff0c;例如块元素独占一行&#xff0c;行内元素可以一行显示多个。 2.Flex布局 也称弹性布局&#xff0c;是浏览器提倡的布局模型&#xff0c;适合结构化布局&#xff0c;并且不会产生浮动布局中脱标的现象。 浮动布局&…

1006 换个格式输出整数

让我们用字母 B 来表示“百”、字母 S 表示“十”&#xff0c;用 12...n 来表示不为零的个位数字 n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234&#xff0c;因为它有 2 个“百”、3 个“十”、以及个…

前端潮流速递:从 Electron 到 Tauri —— 构建高性能跨平台桌面应用的新选择

前端潮流速递&#xff1a;从 Electron 到 Tauri —— 构建高性能跨平台桌面应用的新选择 在现代前端开发领域中&#xff0c;Electron 以其便捷的 Web 技术集成和跨平台能力赢得了广泛的认可。然而&#xff0c;随着应用体积不断增大和资源占用问题凸显&#xff0c;寻找更为精简…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(四)- 配置和设置指令(vsetvli/vsetivli/vsetvl)

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

蓝桥杯模拟赛练习题—— 燃烧你的卡路里

目标 请在 js/index.js 和 index.html 文件中补全代码&#xff0c;完成以下目标&#xff1a; 点击“定制方案”按钮后&#xff0c;弹出侧滑页面&#xff0c;所使用的组件为 el-drawer&#xff0c;相关属性如下&#xff1a; 参数说明类型默认值v-model是否显示 Drawerboolean…

nginx访问路径映射资源目录

Nginx映射资源目录是指在Nginx配置文件中设定规则&#xff0c;使得当客户端向Nginx服务器发送请求访问某个URL时&#xff0c;Nginx能够将该URL映射到服务器本地的实际文件目录&#xff0c;从而正确地提供该目录下的静态资源&#xff08;如HTML、CSS、JavaScript、图片、视频等文…

短视频技术课程在哪学?来这几个资源网站看看,是你需要的

做短视频&#xff0c;有时候就像是做饭&#xff0c;素材好比是食材&#xff0c;没了好食材&#xff0c;怎么做都是不是味儿。今天&#xff0c;我得跟大家好好聊聊&#xff0c;作为一个剪辑界的“老油条”&#xff0c;我是怎样在这个素材的海洋里捞到宝贝的。九才素材网&#xf…

新手养猫必备!福派斯三文鱼益生菌猫粮,让猫咪更健康

亲爱的朋友们&#xff0c;我知道你们中的许多人可能正在考虑养猫&#xff0c;或者刚刚成为了一位猫奴。对于新手来说&#xff0c;选择合适的猫粮可能是一个令人困惑的问题。今天&#xff0c;我想向大家推荐一款非常适合新人的猫粮——福派斯三文鱼益生菌猫粮。 &#x1f43e; 首…

船气废弃锅炉三维仿真vr交互展示降低培训门槛

火化炉是殡葬行业的核心设备&#xff0c;其操作技艺对于专业人才的培养至关重要。然而&#xff0c;传统实践教学受限于时间、场地、设备损耗等多重因素&#xff0c;难以给予学生充分的实操机会。面对这一挑战&#xff0c;我们创新推出了火化炉vr三维仿真培训软件&#xff0c;以…

程序员的赚钱认知觉醒(下)

13、什么样的事情才值得长久的做&#xff1f;​ ​ 满足以下三个原则的事情才值得我们长久且终身为之奋斗&#xff1a;​ 从自己的专业领域入手​做有积累的事​在鱼多的地方钓鱼​ ​ 在鱼多的地方钓鱼&#xff0c;换句话说是选择一个足够大的赛道&#xff0c;即项目的天花板…

如何在Unity中使用设计模式

在 Unity 环境中,设计模式是游戏开发人员遇到的常见问题的通用解决方案。将它们视为解决游戏开发中特定挑战的经过验证的模板或蓝图。以下是一些简单易懂的设计模式: 1. 单例=> 单例模式确保一个类只有一个实例,并提供对该实例的全局访问点。在 Unity 中,可以使用单例模…

数据挖掘|序列模式挖掘及其算法的python实现

数据挖掘|序列模式挖掘及其算法的python实现 1. 序列模式挖掘2. 基本概念3. 序列模式挖掘实例4. 类Apriori算法&#xff08;GSP算法&#xff09;4.1 算法思想4.2 算法步骤4.3 基于Python的算法实现 1. 序列模式挖掘 序列(sequence)模式挖掘也称为序列分析。 序列模式发现&…

中颖51芯片学习3. 定时器

中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明&#xff08;1&#xff09;时钟&#xff08;2&#xff09;工作模式 2. 寄存器&#xff08;1&#xff09;控制寄存器 T2CON&#xff08;2&#xff09;定时器2模式控制寄存器 T2MOD …

[大模型]Baichuan2-7B-chat FastApi 部署调用

Baichuan2 介绍 Baichuan 2 是百川智能推出的新一代开源大语言模型&#xff0c;采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。 环境准备 在autodl平台中租一个3090等24G显存的显卡机器&#xff0c;…

并行超算云计算使用步骤完整流程详情

本文目录 一、将项目传入并运云。二、创建项目的虚拟环境三、编辑run.sh脚本四、提交作业五、查看作业输出六、查看提交的作业号七、结束作业 一、将项目传入并运云。 二、创建项目的虚拟环境 打开终端 使用conda创建&#xff1a;conda create -n 环境名 python3.8查看conda下…

怎么搜索夸克网盘分享出来的文件

当您需要对大量的夸克网盘上的分享文件进行搜索时,您可以考虑以下五种优秀的网盘搜索工具: 6miu易搜 如果您正在寻找一个轻用且高效的网盘搜索工具,这里有一款非常优秀的工具可以帮助您。6miu易搜是一款十分方便于使用、易于操作的网盘搜索工具,使用该工具可以提高您对网盘搜索…

Java面试必问题29:MySQL篇(重点必问)

数据库的ACID特性 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务中的操作要么全部成功&#xff0c;要么全部失败。事务是一个不可分割的单元&#xff0c;要么全部执行&#xff0c;要么全部回滚。如果事务中的任何操作失败&#xff0c;所有操作都将被回滚到事务开始…

计算机网络:数据链路层 - CSMA/CD协议

计算机网络&#xff1a;数据链路层 - CSMA/CD协议 媒体接入控制CSMA/CD协议截断二进制指数退避算法帧长与帧间间隔信道利用率 媒体接入控制 如图所示&#xff0c;这是一根同轴电缆&#xff0c;有多台主机连接到这根同轴电缆上&#xff0c;他们共享这根传输媒体&#xff0c;形成…

【随笔】Git 高级篇 -- 整理提交记录(下)rebase(十六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

蓝桥杯刷题-15-异或和之和-拆位+贡献法⭐⭐(⊙o⊙)

蓝桥杯2023年第十四届省赛真题-异或和之和 题目描述 给定一个数组 Ai&#xff0c;分别求其每个子段的异或和&#xff0c;并求出它们的和。或者说&#xff0c;对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R &#xff0c;求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到…