• 零基础直接上手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的代码为:

    1. package com.example.demo;
    2. import javafx.application.Platform;
    3. import javafx.fxml.FXML;
    4. import javafx.scene.control.Alert;
    5. import javafx.scene.control.Label;
    6. import javafx.stage.FileChooser;
    7. import javafx.stage.Stage;
    8. import java.io.File;
    9. import java.io.FileInputStream;
    10. import java.io.IOException;
    11. import org.apache.poi.ss.usermodel.*;
    12. import java.io.File;
    13. import java.time.Duration;
    14. import java.time.Instant;
    15. public class HelloController {
    16. @FXML
    17. private Label welcomeText;
    18. @FXML
    19. protected void openclick1()
    20. {
    21. FileChooser fileChooser = new FileChooser();
    22. fileChooser.setTitle("文件打开对话框");
    23. fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("电子表格", "*.xlsx", "*.xls", "*.ods", "*.txt", "*.csv"));
    24. // 设置文件选择框的初始目录(可选)
    25. //fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
    26. // 显示文件选择框并获取所选文件
    27. File selectedFile = fileChooser.showOpenDialog(new Stage());
    28. if (selectedFile != null)
    29. {
    30. String fileName = selectedFile.getName();
    31. try {
    32. Instant startTime = Instant.now(); // 记录操作开始时间
    33. Workbook workbook = WorkbookFactory.create(selectedFile);
    34. Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个工作表
    35. int irowcount = 0;
    36. int iCellcount = 0;
    37. // 遍历工作表内容并处理数据
    38. for (Row row : sheet) {
    39. for (Cell cell : row) {
    40. iCellcount++;
    41. }
    42. irowcount++;
    43. }
    44. Instant endTime = Instant.now(); // 记录操作结束时间
    45. Duration timeElapsed = Duration.between(startTime, endTime); // 计算耗时
    46. // 使用提示框显示单元格计数
    47. final int finalirowcount = irowcount;
    48. final int finaliCellcount = iCellcount;
    49. javafx.application.Platform.runLater(() -> {
    50. javafx.scene.control.Alert alert = new javafx.scene.control.Alert(javafx.scene.control.Alert.AlertType.INFORMATION);
    51. alert.setTitle("单元格计数");
    52. alert.setHeaderText(null);
    53. alert.setContentText(sheet.getSheetName() + "行总数为:" + finalirowcount + " 单元格总数为:" + finaliCellcount +
    54. "\n耗时: " + timeElapsed.toHours() + "小时 " + timeElapsed.toMinutesPart() + "分钟 " +
    55. timeElapsed.toSecondsPart() + "秒 " + timeElapsed.toMillisPart() + "毫秒");
    56. alert.showAndWait();
    57. });
    58. workbook.close();
    59. } catch (IOException e) {
    60. e.printStackTrace();
    61. }
    62. }
    63. }
    64. }

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

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

  • 相关阅读:
    神经网络建模的基本思想,神经网络建模实验总结
    工业元宇宙的价值和发展
    表露真诚。
    【0139】【libpq】postmaster收到startup packet启动数据包,并向libpq发送一个ACK(9)
    【考研】操作系统——处理机调度算法1
    Spire.office for Java 7.8.0
    清大科越冲刺科创板:年营收2亿 拟募资7.5亿
    shell脚本,获取所在目录的绝对路径,绝对路径
    [机缘参悟-66]:深度思考-廉价的情绪抚慰
    linux中程序打开文件句柄和创建进程限制
  • 原文地址:https://blog.csdn.net/mrdzhu/article/details/139565567