Java實(shí)現(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; /** * 開(kāi)始解析某一行的時(shí)候,自動(dòng)進(jìn)行調(diào)用 * 參數(shù) : 行索引 */ public void startRow(int i) { if(i>=2) { vo = new Book(); } } /** * 完成解析某一行的時(shí)候,自動(dòng)進(jìn)行調(diào)用 * 參數(shù):行索引 * 目的:在解析完成某一行的時(shí)候,完成業(yè)務(wù)邏輯 */ @Override public void endRow(int i) { System.out.println("解析完成第"+i+"行數(shù)據(jù):"+vo); } /** * 開(kāi)始行中每一個(gè)單元格到時(shí)候,自動(dòng)調(diào)用的方法 * cellname : 單元格名稱(A3,H23,B2) * cellvalue :?jiǎn)卧駭?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) { } }
實(shí)體類
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實(shí)現(xiàn)解析.xlsb文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java解析.xlsb文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Intellij IDEA實(shí)現(xiàn)springboot熱部署過(guò)程解析
這篇文章主要介紹了Intellij IDEA實(shí)現(xiàn)springboot熱部署過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08java并發(fā)中DelayQueue延遲隊(duì)列原理剖析
DelayQueue隊(duì)列是一個(gè)延遲隊(duì)列,本文將結(jié)合實(shí)例代碼,詳細(xì)的介紹DelayQueue延遲隊(duì)列的源碼分析,感興趣的小伙伴們可以參考一下2021-06-06Java多線程面試題之交替輸出問(wèn)題的實(shí)現(xiàn)
本文主要介紹了Java多線程面試題之交替輸出問(wèn)題的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01java實(shí)現(xiàn)的導(dǎo)出Excel工具類實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的導(dǎo)出Excel工具類,結(jié)合具體實(shí)例形式分析了java導(dǎo)出Excel導(dǎo)出并生成Excel表格相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-10-10MapStruct處理Java中實(shí)體與模型間不匹配屬性轉(zhuǎn)換的方法
今天小編就為大家分享一篇關(guān)于MapStruct處理Java中實(shí)體與模型間不匹配屬性轉(zhuǎn)換的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03idea中開(kāi)啟Run Dashboard 和 快速?gòu)?fù)制項(xiàng)目并改變端口的方法
這篇文章主要介紹了idea中開(kāi)啟Run Dashboard 和 快速?gòu)?fù)制項(xiàng)目并改變端口的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08