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

零基础直接上手java跨平台桌面程序,使用javafx(四)用Apache POI读取excel文件。

        Apache POI这个库,可能是JAVA平台最好操作excel文件的库了。怎么才能使用呢?

1、下载Apache POI,本来是个很简单的事情,但是也有坑。这也就是我一直不敢用java的原因之一,这些莫名其妙的坑,总是让人烦躁。我们打开官网,发现他已经不发编译好的包了,发的是源代码。我只是搞个简单的应用,哪有功夫去研究大项目的源代码。

亏好我眼尖,在最下方,有5.23的老版,可以用一下。也没多老,还能接受。

我们下载好,解压到"D:\java\jdk\poi-bin-5.2.3"

打开项目,点文件|项目结构|模块|依赖|1从JAR或目录,选中"D:\java\jdk\poi-bin-5.2.3"包括子目录的全部JAR文件,并且把前面的勾打上,点应用和确定。我是嫌麻烦,把子目录的全拷到上面了,所以显示的是46个文件。这里面有个文件会提示错误,把它排除掉就可以了。

我们在module-info.java加上

requires org.apache.poi.poi;
requires org.apache.poi.ooxml;

我们修改HelloController.java的代码为:

package com.example.demo;import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.time.Duration;
import java.time.Instant;public class HelloController {@FXMLprivate Label welcomeText;@FXMLprotected void openclick1(){FileChooser fileChooser = new FileChooser();fileChooser.setTitle("文件打开对话框");fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("电子表格", "*.xlsx", "*.xls", "*.ods", "*.txt", "*.csv"));// 设置文件选择框的初始目录(可选)//fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));// 显示文件选择框并获取所选文件File selectedFile = fileChooser.showOpenDialog(new Stage());if (selectedFile != null){String fileName = selectedFile.getName();try {Instant startTime = Instant.now(); // 记录操作开始时间Workbook workbook = WorkbookFactory.create(selectedFile);Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个工作表int irowcount = 0;int iCellcount = 0;// 遍历工作表内容并处理数据for (Row row : sheet) {for (Cell cell : row) {iCellcount++;}irowcount++;}Instant endTime = Instant.now(); // 记录操作结束时间Duration timeElapsed = Duration.between(startTime, endTime); // 计算耗时// 使用提示框显示单元格计数final int finalirowcount = irowcount;final int finaliCellcount = iCellcount;javafx.application.Platform.runLater(() -> {javafx.scene.control.Alert alert = new javafx.scene.control.Alert(javafx.scene.control.Alert.AlertType.INFORMATION);alert.setTitle("单元格计数");alert.setHeaderText(null);alert.setContentText(sheet.getSheetName() + "行总数为:" + finalirowcount + "  单元格总数为:" + finaliCellcount +"\n耗时: " + timeElapsed.toHours() + "小时 " + timeElapsed.toMinutesPart() + "分钟 " +timeElapsed.toSecondsPart() + "秒 " + timeElapsed.toMillisPart() + "毫秒");alert.showAndWait();});workbook.close();} catch (IOException e) {e.printStackTrace();}}}
}

好我们运行程序,选择一下excel文件,系统就读取了它的行数和单元格数量并提示:

这里啰嗦一句,这个办法只能处理小型电子表格。如果是超过50MB这种表,得另外处理了。

相关文章:

  • 【Jenkins+K8s】持续集成与交付 (二十):K8s集群通过Deployment方式部署安装Jenkins
  • 三高系统的架构设计方案:高并发、高可用、高性能
  • WebSphere面试题精选和参考答案(3万字长文)
  • 1789. 员工的直属部门
  • 「前端+鸿蒙」鸿蒙应用开发-TS接口-语法多态
  • 生成式人工智能重置:从初期热潮到战略扩展
  • STM32 ST-LINK Utility的下载安装使用说明如下:
  • 【ai】pycharm远程ssh开发
  • 步态控制之足旋转点(Foot Rotation Indicator, FRI)
  • FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
  • 实验五、IPv4地址的子网划分,第1部分《计算机网络》
  • 在AWS上运行的EKS Elastic Kubernetes Service 创建集群Cluster,Node group, Nodes
  • php 混合xml js,html 代码报错 ,结束标签关闭, short_open_tag 的作用,php关闭文件结束判断
  • 操作系统真象还原:内存管理系统
  • 计算机毕业设计hadoop+spark+hive舆情分析系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 微博大数据 微博推荐系统 微博预测系统
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【RocksDB】TransactionDB源码分析
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker下部署自己的LNMP工作环境
  • express如何解决request entity too large问题
  • iOS 颜色设置看我就够了
  • Js基础知识(四) - js运行原理与机制
  • leetcode46 Permutation 排列组合
  • magento2项目上线注意事项
  • php的插入排序,通过双层for循环
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 前端
  • 前端工程化(Gulp、Webpack)-webpack
  • 微服务核心架构梳理
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 从如何停掉 Promise 链说起
  • #HarmonyOS:Web组件的使用
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (Qt) 默认QtWidget应用包含什么?
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (贪心) LeetCode 45. 跳跃游戏 II
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 使用 XPath 来读写 XML 文件
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET成年了,然后呢?
  • .NET开发人员必知的八个网站
  • .project文件
  • /var/lib/dpkg/lock 锁定问题
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @ModelAttribute 注解