2012-12-14 7 views
8

के साथ xlsx फ़ाइल पढ़ें मैं पीओआई के साथ बड़ी xlsx फ़ाइल पढ़ने के अपने पहले परीक्षण करने की कोशिश कर रहा हूं, लेकिन एक छोटी फ़ाइल के साथ एक सरल परीक्षण करने के लिए मैं एक सेल के मूल्य को दिखाने में विफल रहता हूं।पीओआई (एसएक्सएसएसएफ वर्कबुक)

कोई मुझे बता सकता है कि मेरी गलती क्या है। सभी सुझावों का स्वागत है। धन्यवाद।

Test.java:

import java.io.File; 
import java.io.FileInputStream; 

import org.apache.poi.openxml4j.opc.OPCPackage; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.xssf.streaming.SXSSFWorkbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class Test { 

    public static void main(String[] args) throws Throwable { 
     File file = new File("/tmp/test.xlsx"); 
     OPCPackage pkg = OPCPackage.open(new FileInputStream(file.getAbsolutePath())); 
     XSSFWorkbook xssfwb = new XSSFWorkbook(pkg); 

     SXSSFWorkbook wb = new SXSSFWorkbook(xssfwb, 100); 
     Sheet sh = wb.getSheet("Hola"); 

     System.out.println("Name: "+sh.getSheetName()); // Line 19 
     System.out.println("Val: "+sh.getRow(1).getCell(1).getStringCellValue()); // Line 20 
    } 
} 

परिणाम:

Name: Hola 
Exception in thread "main" java.lang.NullPointerException 
    at Test.main(Test.java:20) 

test.xlsx:

enter image description here

उत्तर

21

कृपया परामर्श लें: similar question SXSSFWorkBook केवल लिखना है, यह पढ़ने का समर्थन नहीं करता है।

.xlsx फ़ाइलों की कम स्मृति पढ़ने के लिए, आप XSSF and SAX EventModel documentation पर गौर करना चाहिए: Gagravarr

स्मृति एक मुद्दा आप एक XSSFSheet बजाय उदा इस्तेमाल कर सकते हैं नहीं होगा तो

File file = new File("D:/temp/test.xlsx"); 
    FileInputStream fis = new FileInputStream(file); 
    XSSFWorkbook wb = new XSSFWorkbook(fis); 

    XSSFSheet sh = wb.getSheet("Hola"); 
    System.out.println(sh.getLastRowNum()); 
    System.out.println("Name: "+sh.getSheetName()); 
    Row row = sh.getRow(1); 

    System.out.println(row.getRowNum()); 

    System.out.println("Val: "+sh.getRow(1).getCell(1).getStringCellValue()); 
+0

धन्यवाद, लेकिन मुझे SXSSFWorkbook की आवश्यकता है ताकि स्मृति त्रुटि को फेंक दिए बिना बड़ी फ़ाइल को संसाधित किया जा सके। – alditis

+1

कृपया परामर्श लें: [वही प्रश्न] (http://stackoverflow.com/questions/12513981/reading-data-from-xlsx-sxssfsheet-with-apache-poi-java) SXSSFWorkBook केवल लिखता है, यह पढ़ने का समर्थन नहीं करता है – IDKFA

+0

एसएक्सएसएसएफ वर्कबुक का उपयोग करके हम स्मृति अपवाद से बाहर निकलने से बच सकते हैं। और हम लाखों रिकॉर्ड से अधिक लिख सकते हैं। लेकिन यह केवल .xlsx प्रारूप की अनुमति देता है। – swamy

-1

मैं भी यह OOM का एक ही मुद्दा का सामना करना पड़ा xlsx फ़ाइल पार्स करते समय ... संघर्ष के दो दिनों के बाद, मैं अंत में नीचे दिए गए कोड है कि वास्तव में सही था पता चला;

यह कोड sjxlsx पर आधारित है। यह एक एचएसएसएफ शीट में xlsx और स्टोर पढ़ता है।

  // read the xlsx file 
     SimpleXLSXWorkbook = new SimpleXLSXWorkbook(new File("C:/test.xlsx")); 

     HSSFWorkbook hsfWorkbook = new HSSFWorkbook(); 

     org.apache.poi.ss.usermodel.Sheet hsfSheet = hsfWorkbook.createSheet(); 

     Sheet sheetToRead = workbook.getSheet(0, false); 

     SheetRowReader reader = sheetToRead.newReader(); 
     Cell[] row; 
     int rowPos = 0; 
     while ((row = reader.readRow()) != null) { 
      org.apache.poi.ss.usermodel.Row hfsRow = hsfSheet.createRow(rowPos); 
      int cellPos = 0; 
      for (Cell cell : row) { 
       if(cell != null){ 
        org.apache.poi.ss.usermodel.Cell hfsCell = hfsRow.createCell(cellPos); 
        hfsCell.setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING); 
        hfsCell.setCellValue(cell.getValue()); 
       } 
       cellPos++; 
      } 
      rowPos++; 
     } 
     return hsfSheet; 
+0

यह XSSF फ़ाइलों के लिए कैसे मदद करता है? आपका कोड केवल एचएसएसएफ है ... – Gagravarr

संबंधित मुद्दे