• 项目中常用工具包


    一、excel读取的两种方式-【jxl 读取和poi 读取】

    1.1 jxl 和 poi 的区别和选择

    ① jxl 只能解析 xls 文件不能 解析 xlsx 文件; poi 则是可以同时兼容xls 和xlsx两种文件类型,这是要注意的第一个点;

    ② 这两个方法的读取方式不一样,jxl 读取的是 先读列 然后循环获取的该列每行的信息。poi 读取是 先读行,再循环获取每列的信息。如下图:

    那我们应该怎么去做选择呢?如果只需要xls的解析,可以使用 jxl (因为poi蛮容易出异常的jar冲突之类的,而且读取的方式不太舒服,如果读取完还要做判断操作写入数据库,就会写的比较复杂),如果需要兼容就选择poi方式读取。

    二、jxl 的使用

    1. net.sourceforge.jexcelapi
    2. jxl
    3. 2.6.12

    1. package com.olio;
    2. import jxl.Sheet;
    3. import jxl.Workbook;
    4. import jxl.read.biff.BiffException;
    5. import java.io.File;
    6. import java.io.IOException;
    7. import java.io.InputStream;
    8. import java.net.HttpURLConnection;
    9. import java.net.URL;
    10. import java.net.URLConnection;
    11. import java.net.URLDecoder;
    12. public class TestDemo {
    13. public void readExcel(String path,String strURL) {
    14. try {
    15. /*// 如果需要通过URL获取资源的加上以下的代码,不需要的省略就行
    16. URL url = new URL(strURL);
    17. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    18. // 设置超时间为3秒
    19. conn.setConnectTimeout(3*1000);
    20. // 防止屏蔽程序抓取而返回403错误
    21. conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    22. // 获取输入流
    23. InputStream inputStream = conn.getInputStream();
    24. Workbook workbook = Workbook.getWorkbook(inputStream);
    25. ......*/
    26. // 解析路径的file文件
    27. Workbook workbook = Workbook.getWorkbook(new File(path));
    28. // 获取第一张工作表
    29. Sheet sheet = workbook.getSheet(0);
    30. // 循环获取每一行数据 因为默认第一行为标题行,我们可以从 1 开始循环,如果需要读取标题行,从 0 开始
    31. // sheet.getRows() 获取总行数
    32. for (int i = 1; i < sheet.getRows(); i++) {
    33. // 获取第一列的第 i 行信息 sheet.getCell(列,行),下标从0开始
    34. String id = sheet.getCell(0, i).getContents();
    35. // 获取第二列的第 i 行信息
    36. String name = sheet.getCell(1,i).getContents();
    37. // 获取第三列的第 i 行信息
    38. String sex = sheet.getCell(2, i).getContents();
    39. // 获取第四列的第 i 行信息
    40. String grade = sheet.getCell(3, i).getContents();
    41. // 存入本地或者是存入对象等根据给人需求自己定就行,创建对象存储,然后加入集合中
    42. // ......
    43. }
    44. } catch (IOException e) {
    45. e.printStackTrace();
    46. } catch (BiffException e) {
    47. e.printStackTrace();
    48. }
    49. }
    50. }

    三、poi 的使用

    1. org.apache.poi
    2. poi
    3. 3.17
    4. org.apache.poi
    5. poi-ooxml
    6. 3.17

    1. package com.olio;
    2. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    3. import org.apache.poi.ss.usermodel.*;
    4. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    5. import java.io.FileInputStream;
    6. import java.io.InputStream;
    7. import java.net.HttpURLConnection;
    8. import java.net.URL;
    9. import java.net.URLConnection;
    10. import java.net.URLDecoder;
    11. public class TestDemo {
    12. public void readExcel(String path,String strURL) {
    13. try {
    14. /*// 如果需要通过URL获取资源的加上以下的代码,不需要的省略就行
    15. URL url = new URL(strURL);
    16. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    17. // 设置超时间为3秒
    18. conn.setConnectTimeout(3*1000);
    19. // 防止屏蔽程序抓取而返回403错误
    20. conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    21. // 获取输入流
    22. InputStream inputStream = conn.getInputStream();
    23. ......*/
    24. // 获取文件输入流
    25. InputStream inputStream = new FileInputStream(path);
    26. // 定义一个org.apache.poi.ss.usermodel.Workbook的变量
    27. Workbook workbook = null;
    28. // 截取路径名 . 后面的后缀名,判断是xls还是xlsx
    29. // 如果这个判断不对,就把equals换成 equalsIgnoreCase()
    30. if (path.substring(path.lastIndexOf("." + 1)).equals("xls")){
    31. workbook = new HSSFWorkbook(inputStream);
    32. }else if (path.substring(path.lastIndexOf(" . " + 1)).equals("xlsx")){
    33. workbook = new XSSFWorkbook(inputStream);
    34. }
    35. // 获取第一张表
    36. Sheet sheet = workbook.getSheetAt(0);
    37. // sheet.getPhysicalNumberOfRows()获取总的行数
    38. // 循环读取每一行
    39. for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
    40. // 循环读取每一个格
    41. Row row = sheet.getRow(i);
    42. // row.getPhysicalNumberOfCells()获取总的列数
    43. for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {
    44. // 获取数据,但是我们获取的cell类型
    45. //代码上的内容自己根据实际需要自己调整就可以,这里只是展示一个样式···~
    46. Cell cell = row.getCell(index);
    47. // 转换为字符串类型
    48. cell.setCellType(CellType.STRING);
    49. // 获取得到字符串
    50. String id = cellId.getStringCellValue();
    51. }
    52. }
    53. } catch (Exception e) {
    54. e.printStackTrace();
    55. }
    56. }
    57. }

    Java读取excel的方式,一篇文章看懂(详细)_java读取excel文件_OliO_CHEN的博客-CSDN博客

    Java读写Excel_java读写excel文件_落英神剑碧海潮生的博客-CSDN博客 

    java的Excel读写_java读取和写入excel_凯尔萨厮的博客-CSDN博客 

  • 相关阅读:
    OpenHarmony 使用 ArkUI Inspector 分析布局
    RK356X/RK3588构建Ubuntu20.04根文件系统
    一分钟了解乐观锁、悲观锁、共享锁、排它锁、行锁、表锁以及使用场景
    echarts折线图的symbol自定义样式
    【云原生】项目上云最佳实践
    Failed to restart networking.service: Unit networking.service not found.
    蓝桥杯2023年第十四届省赛真题-买瓜--C语言题解
    【Linux操作系统】——安装CentOS系统
    数据管理能力成熟度评估模型_企业如何实施DCMM
    C/C++ 11 thread_local 注意事项
  • 原文地址:https://blog.csdn.net/jiang2360/article/details/132885228