2014-05-22 2 views
0

XLSX 파일을 업로드하고 웹 사이트에서 읽을 수 있도록 코드를 편집하려고했습니다. 그러나 무수히 시도한 후에 XLSX 파일에 입력 한 데이터는 웹 사이트에서 캡처 할 수 없습니다. (예 : 웹 사이트에서 XLSX 템플릿을 다운로드 한 후 XLSX 파일에 원하는 내용을 입력 할 수 있고 다시 웹 사이트에 업로드 할 수 있으므로 "new"를 클릭하여 새 데이터를 계속 추가 할 필요가 없습니다. "매번 한 번에 XLSX 파일의 모든 내용을 입력하고 바로 업로드 할 수 있습니다.POI 용 해시 맵 사용 Java XLSX

나는 hashmap을 사용한다고 들었지만 작동 방식이 확실하지 않습니다. 내가 현재 가지고있는 코드는 웹 사이트가 헤더 제목을 캡처 할 수있게하고 jxl을 사용하지 않을 것입니다.
jxl이있는 코드를 제거하는 동안 일부 오류 (빨간색 밑줄)가 발생합니다.

public HashMap getConstructJXLList_xlsx(UploadedFile File, int Sheetindex) { 
    String _LOC = "[PageCodeBase: getConstructJXLList]"; 
    HashMap _m = new HashMap(); 

    InputStream _is = null; 
    try { 
     _is = File.getInputstream(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    XSSFWorkbook workbook; 
    XSSFSheet s; 

    try { 
     workbook = new XSSFWorkbook(_is); 
     s = workbook.getSheetAt(Sheetindex); 
    } catch (Exception e) { 
     System.out.println(_LOC + "1.0 " + " Test:"); 

     int _totalc = getColumns(); //getColumns is being underline in red 
     int _totalr = getRows(); //getRows is being underline in red 

     // Header r=0 
     String[] _st = new String[_totalc]; 
     //XSSFSheet sheet = null; 
     for (int _c = 0; _c < _totalc; _c++) { 
      _st[_c] = getCell(_c, 0); //getCell is being underline in red 

     } 

    _m.put("HEADER", _st); 
    System.out.println(_LOC + "1.0 " + " _m:" + _m); 

    // Data r=1 thereafter 
    List _l = new ArrayList(); 
    for (int _r = 1; _r < _totalr; _r++) { 
     Object[] _o = new Object[_totalc]; 
     String _s_r = null; 

     for (int _c = 0; _c < _totalc; _c++) { 
      _o[_c] = getCell(_c, _r); 
      String _cn = _o[_c].getClass().getName(); 
      String _s_c = null; 

      if (!isEmptyNull(_s_c)) { 
       _s_r = "record_available"; 
      } 
     } 

     if ((_o != null) && (_o.length != 0)) { 
      _l.add(_o); 

     } 
    } 
    _m.put("DATA", _l); 
    System.out.println(_LOC + "1.0 " + " _m:" + _m); 
    } 
    return _m; 
} 

이 문제를 해결할 수 있도록 도와 주시겠습니까? 웹 사이트에 캡처되는 데이터가없는 이유는 무엇입니까?
표시된 오류는 "메서드 getColumns/getCell/getRows가 PageCodeBase 유형에 대해 정의되지 않았습니다."입니다. 주어진 도움말/빠른 수정은 새로운 방법을 만드는 것입니다. 그러나 새 메서드를 만든 후에는 메서드에 추가 할 항목이 확실하지 않습니다. 다양한 예제 (http://snippetjournal.wordpress.com/2014/02/05/read-xlsx-using-poi/)를 시도했지만 나는 그것을 해결할 수없는 것 같습니다. 당신이

2) input.close();

은 행의 첫 번째 반복 한 후 호출을 사용하지 않는 한

+0

예외는 어디에서 발생합니까? –

답변

0

1)

+0

패키지에 콘텐츠 형식 부분이 있어야합니다. [M1.13] POIFSFileSystem을 제거한 후에 오류가 발생합니다. fs = new POIFSFileSystem (input); – Cassie

+0

wb = WorkbookFactory.create (InputStream input)' –

+0

wb를 사용하고 InputStream 입력은 빨간색 밑줄 – Cassie

2

내가 드 아파치 POI에서이 클래스를 사용하여 파일을 엑셀 관리 할 추천 POIFSFileSystem fs = new POIFSFileSystem(input); 제거 API를

org.apache.poi.ss.usermodel.Cell; 
org.apache.poi.ss.usermodel.Row; 
org.apache.poi.ss.usermodel.Sheet; 
org.apache.poi.ss.usermodel.Workbook; 
org.apache.poi.ss.usermodel.WorkbookFactory; 
대신 그 XSSFWorkbook, XSSFSheet의

...

그리고 또한 접근 파일 입력 스트림이 방법을 시도하십시오 :

FileInputStream input = new FileInputStream(new File("C:\\Users\\admin\\Desktop\\Load_AcctCntr_Template.xlsx")); 
Workbook workBook = WorkbookFactory.create(stream); 
workBook.getSheetAt(0); 
+0

안녕하세요. 왜 그런지 잘 모르겠지만 usermodel에 빨간 밑줄이 있습니다. 셀, 시트 및 워크 북. 또한 (스트림) 및 getSheetAt에 있습니다. 하지만 나는 .jar 파일을 모두 추가했습니다. – Cassie

1

이것을 사용하십시오.

FileInputStream input = new FileInputStream(new File("C:/Users/admin/Desktop/Load_AcctCntr_Template.xlsx")); 
Workbook wb = WorkbookFactory.create(input); 

사용자 3661357 답변에서 언급 한. XSSFWorkbook 대신 통합 문서를 사용하십시오. XSSFSheet 대신 시트. 등

또한 필요한 패키지를로드 넷빈즈이 Getting Exception(org.apache.poi.openxml4j.exception - no content type [M1.13]) when reading xlsx file using Apache POI?

* HINT> 사용 ALT + SHIFT + I를 읽는다.

동작하는 예제

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Iterator; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 

{

public static void test() { 

    try { 
     FileInputStream input = new FileInputStream(new File("C:/Users/kingslayer/Desktop/test/a.xlsx")); 
     Workbook wb = WorkbookFactory.create(input); 
     Sheet s = wb.getSheetAt(0); 

     Iterator<Row> rows = s.rowIterator(); 

     while (rows.hasNext()) { 
      Row row = rows.next(); 
      Iterator cells = row.cellIterator(); 
      while (cells.hasNext()) { 
       Cell cell = (Cell) cells.next(); 

       if (cell.getCellType() == Cell.CELL_TYPE_STRING) { 
        System.out.print(cell.getStringCellValue() + "t"); 
       } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { 
        System.out.print(cell.getNumericCellValue() + "t"); 
       } else if (cell.CELL_TYPE_BLANK == cell.getCellType()) { 
        System.out.print("BLANK "); 
       } else { 
        System.out.print("Unknown cell type"); 
       } 
      } 
      input.close(); 
     } 
    } catch (IOException | InvalidFormatException ex) { 
     Logger.getLogger(POITest.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 

public static void main(String[] args) { 
    test(); 
} 

}

프로젝트 경로에 필요한 모든 라이브러리 공용 클래스 POITest.
몬즈 코덱 1.5.jar, 가공 로깅-1.1.jar, DOM4J-1.6.1.jar, 의 JUnit-3.8.1.jar를, 의 log4j-1.2.13.jar, POI - 3.9 -20121203.단지, POI-excelant-3.9-20121203.jar, POI-OOXML-3.9-20121203.jar, POI-OOXML-스키마 - 3.9-20121203.jar, POI - 스크래-3.9-20121203.jar, STAX -api-1.0.1.jar, xmlbeans-2.3.0.jar,

+0

안녕하세요. 하지만 org.apache.poi.ss.usermodel.Cell을 추가 할 수 없습니다. 시트 및 워크 북. 빨간색 밑줄이됩니다. 이유는 모르겠지만 이미 .jar 파일을 모두 추가했습니다. – Cassie

+0

이것을 사용하는 것이 똑같습니까? 'org.apache.poi.ss.usermodel.Workbook wb = WorkbookFactory.create (입력); org.apache.poi.ss.usermodel.Sheet s = wb.getSheetAt (0); ' – Cassie

+0

'File'을 사용하고 있다면, 직접 입력을 열고,'InputStream'을 거치지 마십시오. 효율성이 훨씬 떨어집니다 ! 자세한 내용은 [Apache POI Docs on File vs Stream] (http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream)을 참조하십시오. – Gagravarr