Exception reading XLSB File Apache POI java.io.CharConversionException

前端 未结 3 1408
北荒
北荒 2020-12-03 19:34

Im developing a Java aplication that reads an excel xlsb file using Apache POI, but I got an exception while reading it, my code is as follows:

import java.i         


        
3条回答
  •  囚心锁ツ
    2020-12-03 19:36

    I have tried reading XLSB file using Apache POI and it is successful. Below is the code snippet I have used.

    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;
    
    public class ApachePoiXLSB {
    
        public static void main (String [] args){
    
            String xlsbFileName = "test.xlsb";
    
            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 sheetTexts = new ArrayList<>();
                while (it.hasNext()) {
                    InputStream is = it.next();
                    String name = it.getSheetName();
                    TestSheetHandler testSheetHandler = new TestSheetHandler();
                    testSheetHandler.startSheet(name);
                    XSSFBSheetHandler sheetHandler = new XSSFBSheetHandler(is,
                            xssfbStylesTable,
                            it.getXSSFBSheetComments(),
                            sst, testSheetHandler,
                            new DataFormatter(),
                            false);
                    sheetHandler.parse();
                    testSheetHandler.endSheet();
                    sheetTexts.add(testSheetHandler.toString());
                }
                System.out.println("output text:"+sheetTexts);
    
            } catch (InvalidFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OpenXML4JException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
    import org.apache.poi.xssf.usermodel.XSSFComment;
    
    class TestSheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {
    
            private final StringBuilder sb = new StringBuilder();
    
            public void startSheet(String sheetName) {
                sb.append("");
            }
    
            public void endSheet() {
                sb.append("");
            }
    
            @Override
            public void startRow(int rowNum) {
                sb.append("\n");
            }
    
            @Override
            public void endRow(int rowNum) {
                sb.append("\n");
            }
    
            @Override
            public void cell(String cellReference, String formattedValue, XSSFComment comment) {
                formattedValue = (formattedValue == null) ? "" : formattedValue;
                if (comment == null) {
                    sb.append("\n\t").append(formattedValue).append("");
                } else {
                    sb.append("\n\t")
                            .append(formattedValue)
                            .append("")
                            .append(comment.getString().toString().trim()).append("")
                            .append("");
                }
            }
    
            @Override
            public void headerFooter(String text, boolean isHeader, String tagName) {
                if (isHeader) {
                    sb.append("
    ").append(text).append("
    "); } else { sb.append("
    ").append(text).append("
    "); } } @Override public String toString() { return sb.toString(); } }

提交回复
热议问题