广告位联系
返回顶部
分享到

Java实现解析.xlsb文件的教程

java 来源:互联网 作者:秩名 发布时间:2023-01-31 20:24:24 人浏览
摘要

Java解析.Xlsb文件 pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dependency groupIdorg.apache.poi/groupId artifactIdpoi/artifactId version3.17/version /dependency dependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId vers

Java解析.Xlsb文件

pom.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<dependency>

            <groupId>org.apache.poi</groupId>

            <artifactId>poi</artifactId>

            <version>3.17</version>

        </dependency>

        <dependency>

            <groupId>org.apache.poi</groupId>

            <artifactId>poi-ooxml</artifactId>

            <version>3.17</version>

        </dependency>

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <version>1.16.10</version>

        </dependency>

读取XLSB文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

package com.example.demo.utils;

 

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import org.apache.poi.openxml4j.exceptions.OpenXML4JException;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.ss.usermodel.DataFormatter;

import org.apache.poi.xssf.binary.XSSFBSharedStringsTable;

import org.apache.poi.xssf.binary.XSSFBSheetHandler;

import org.apache.poi.xssf.binary.XSSFBStylesTable;

import org.apache.poi.xssf.eventusermodel.XSSFBReader;

import org.xml.sax.SAXException;

 

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.Objects;

 

/**

 * @author xinlan

 * @version 1.0

 * @date 2023/1/29 21:15

 */

public class ExcelXlsbFileUtils {

 

    private static final String filePath = "D:\\Documents\\WeChat Files\\wxid_cnm3kxiloquj21\\FileStorage\\File\\2023-01\\CLARKSONS WAF VLCC POSITION UPDATED 05 JAN 2023.xlsb";

 

    public static void main(String[] args) {

        callXLToList(filePath);

    }

    static void callXLToList(String xlsbFileName){

        OPCPackage pkg;

        try {

            pkg = OPCPackage.open(xlsbFileName);

            XSSFBReader r = new XSSFBReader(pkg);

            XSSFBSharedStringsTable sst = new XSSFBSharedStringsTable(pkg);

            XSSFBStylesTable xssfbStylesTable = r.getXSSFBStylesTable();

            XSSFBReader.SheetIterator it = (XSSFBReader.SheetIterator) r.getSheetsData();

 

            List<XLSB2Lists> workBookAsList = new ArrayList<>();

            int sheetNr = 1;

            XLSB2Lists testSheetHandler = new XLSB2Lists();

            while (it.hasNext()) {

                InputStream is = it.next();

                String name = it.getSheetName();

                XSSFBSheetHandler sheetHandler = new XSSFBSheetHandler(is,

                        xssfbStylesTable,

                        it.getXSSFBSheetComments(),

                        sst, testSheetHandler,

                        new DataFormatter(),

                        false);

                sheetHandler.parse();

                sheetNr++;

                // Add parsed sheet to workbook list

                workBookAsList.add(testSheetHandler);

            }

            List<Book> list = testSheetHandler.list;

            System.out.println("========================");

            for (Book book : list) {

                if(!Objects.isNull(book)) {

                    System.out.println("book.toString() = " + book.toString());

                }

            }

        } catch (InvalidFormatException e) {

            // TODO Please do your catch hier

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Please do your catch hier

            e.printStackTrace();

        } catch (OpenXML4JException e) {

            // TODO Please do your catch hier

            e.printStackTrace();

        } catch (SAXException e) {

            // TODO Please do your catch hier

            e.printStackTrace();

        }

    }

}

解析具体单元格

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

package com.example.demo.utils;

 

import lombok.Data;

import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;

import org.apache.poi.xssf.usermodel.XSSFComment;

 

import java.util.ArrayList;

import java.util.List;

 

/**

 * @author xinlan

 * @version 1.0

 * @date 2023/1/29 21:42

 */

@Data

public class XLSB2Lists implements XSSFSheetXMLHandler.SheetContentsHandler {

 

    public List<Book> list = new ArrayList<>();

    private Book vo = null;

 

    /**

     * 开始解析某一行的时候,自动进行调用

     * 参数 : 行索引

     */

    public void startRow(int i) {

        if(i>=2) {

            vo = new Book();

        }

    }

 

    /**

     * 完成解析某一行的时候,自动进行调用

     * 参数:行索引

     * 目的:在解析完成某一行的时候,完成业务逻辑

     */

    @Override

    public void endRow(int i) {

        System.out.println("解析完成第"+i+"行数据:"+vo);

    }

 

    /**

     * 开始行中每一个单元格到时候,自动调用的方法

     *      cellname : 单元格名称(A3,H23,B2)

     *      cellvalue :单元格数据

     *

     */

    @Override

    public void cell(String cellname, String cellvalue, XSSFComment xssfComment) {

 

        if(vo != null) {

            cellname = cellname.substring(0,1);

            if("C".equals(cellname)) {

                vo.setETA(cellvalue);

            }else if("D".equals(cellname)) {

                vo.setVESSEL(cellvalue);

            }else if("E".equals(cellname)) {

                vo.setDWT(cellvalue);

            }else if("F".equals(cellname)) {

                vo.setBLT(cellvalue);

            }else if("G".equals(cellname)) {

                vo.setSCR(cellvalue);

            }else if("H".equals(cellname)) {

                vo.setDRAFT(cellvalue);

            }else if("I".equals(cellname)) {

                vo.setPOSITION(cellvalue);

            }else if("J".equals(cellname)) {

                vo.setOPEN(cellvalue);

            }else if("K".equals(cellname)) {

                vo.setOWNER(cellvalue);

            }else if("L".equals(cellname)) {

                vo.setCOMMENTS(cellvalue);

            }

        }

        list.add(vo);

    }

 

    @Override

    public void headerFooter(String s, boolean b, String s1) {

 

    }

}

实体类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package com.example.demo.utils;

 

import lombok.Data;

 

/**

 * @author xinlan

 * @version 1.0

 * @date 2023/1/29 22:19

 */

@Data

public class Book {

 

    private String ETA;

    private String VESSEL;

    private String  DWT;

    private String  BLT;

    private String  SCR;

    private String  DRAFT;

    private String  POSITION;

    private String  OPEN;

    private String  OWNER;

    private String  COMMENTS;

}

结果


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/Dean_xin_lan/article/details/128795364
相关文章
  • Java中List集合数据修改方式

    Java中List集合数据修改方式
    Java中List集合数据修改 先说写这篇文章的原因 我被提供了一个需求,Excel表格数据导入数据库,按照常理而言是很简单的,但是这个需求不
  • Java实现解析.xlsb文件的教程

    Java实现解析.xlsb文件的教程
    Java解析.Xlsb文件 pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dependency groupIdorg.apache.poi/groupId artifactIdpoi/artifactId version3.17/version /dependency dependency groupI
  • Java实现国产加密算法SM4的介绍

    Java实现国产加密算法SM4的介绍
    国产SM4加密解密算法概念 SMS4算法是在国内广泛使用的WAPI无线网络标准中使用的加密算法,是一种32轮的迭代非平衡Feistel结构的分组加密算
  • java多线程实现同步锁卖票实战项目

    java多线程实现同步锁卖票实战项目
    同步概念与方法: 窗口类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Ticket implements Runnable{ int tickets=20;//总共20张票 @Override public
  • Elasticsearch percolate 查询示例介绍
    我们将文档索引到 Elasticsearch 中并对其运行查询以获得满足提供的搜索条件的文档。 我们构造一个匹配或术语查询作为输入,匹配查询的文
  • Java类的构造方法介绍

    Java类的构造方法介绍
    Java语言中,类的构造方法是一种很特殊的方法。关于构造方法要记忆和理解的知识点其实挺多的,下面我们就来详细的讲讲构造方法,相信
  • 基于EasyExcel实现百万级数据导入导出

    基于EasyExcel实现百万级数据导入导出
    在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。 大数据的
  • Java使用Zxing二维码生成的代码
    1、二维码简介 二维条形码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编
  • Java经典面试题最全汇总208道(六)

    Java经典面试题最全汇总208道(六)
    短时间提升自己最快的手段就是背面试题,最近总结了Java常用的面试题,分享给大家,希望大家都能圆梦大厂,加油,我命由我不由天。
  • Spring中Bean注入源码介绍

    Spring中Bean注入源码介绍
    BeanDefinition和Bean 在Spring中Bean的注入涉及两部分: BeanDefinition Bean 两个对象存在先后顺序,先注入BeanDefinition之后才执行Bean对象的注入。 那
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计