Get excel sheet names for large excel files using Apache POI

前端 未结 1 449
自闭症患者
自闭症患者 2020-12-12 01:03

I have the following code that I use to get the sheet names of an excel file(.xlsx)

    XSSFWorkbook workBookXlsx = new XSSFWorkbook(new FileInputStream(path         


        
相关标签:
1条回答
  • 2020-12-12 01:11

    To show what @Gagravarr probably meant with his comment:

    The XSSFReader contains a method XSSFReader.getSheetsData which "Returns an Iterator which will let you get at all the different Sheets in turn. Each sheet's InputStream is only opened when fetched from the Iterator. It's up to you to close the InputStreams when done with each one.". But as often this is not the whole truth. In truth it returns a XSSFReader.SheetIterator which has a method XSSFReader.SheetIterator.getSheetName to get the sheet names.

    Example:

    import java.io.InputStream;
    import java.io.FileInputStream;
    
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.xssf.eventusermodel.XSSFReader;
    
    import java.util.Iterator;
    
    public class ExcelXSSFGetSheetNamesXSSFReader {
    
     public static void main(String[] args) throws Exception {
    
      OPCPackage pkg = OPCPackage.open(new FileInputStream("Example.xlsx"));
      XSSFReader r = new XSSFReader( pkg );
      Iterator<InputStream> sheets = r.getSheetsData();
    
      if (sheets instanceof XSSFReader.SheetIterator) {
       XSSFReader.SheetIterator sheetiterator = (XSSFReader.SheetIterator)sheets;
    
       while (sheetiterator.hasNext()) {
        InputStream dummy = sheetiterator.next();
    
        System.out.println(sheetiterator.getSheetName());
    
        dummy.close();
       }
      }
    
      pkg.close();
     }
    }
    

    Conclusion: Currently you cannot work with apache poi only by trusting the API documentation. Instead you must always have a look at the source code.

    0 讨论(0)
提交回复
热议问题