Java實現(xiàn)解析.xlsb文件的示例代碼
更新時間:2023年01月30日 15:21:39 作者:Dean_xin_lan
這篇文章主要為大家詳細介紹了Java實現(xiàn)解析.xlsb文件的相關方法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
Java解析.Xlsb文件
pom.xml
<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文件
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();
}
}
}解析具體單元格
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;
/**
* 開始解析某一行的時候,自動進行調(diào)用
* 參數(shù) : 行索引
*/
public void startRow(int i) {
if(i>=2) {
vo = new Book();
}
}
/**
* 完成解析某一行的時候,自動進行調(diào)用
* 參數(shù):行索引
* 目的:在解析完成某一行的時候,完成業(yè)務邏輯
*/
@Override
public void endRow(int i) {
System.out.println("解析完成第"+i+"行數(shù)據(jù):"+vo);
}
/**
* 開始行中每一個單元格到時候,自動調(diào)用的方法
* cellname : 單元格名稱(A3,H23,B2)
* cellvalue :單元格數(shù)據(jù)
*
*/
@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) {
}
}實體類
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;
}結(jié)果

以上就是Java實現(xiàn)解析.xlsb文件的示例代碼的詳細內(nèi)容,更多關于Java解析.xlsb文件的資料請關注腳本之家其它相關文章!
相關文章
Intellij IDEA實現(xiàn)springboot熱部署過程解析
這篇文章主要介紹了Intellij IDEA實現(xiàn)springboot熱部署過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
MapStruct處理Java中實體與模型間不匹配屬性轉(zhuǎn)換的方法
今天小編就為大家分享一篇關于MapStruct處理Java中實體與模型間不匹配屬性轉(zhuǎn)換的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
idea中開啟Run Dashboard 和 快速復制項目并改變端口的方法
這篇文章主要介紹了idea中開啟Run Dashboard 和 快速復制項目并改變端口的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

