2010-05-27 5 views
15

일부 통계 분석을 수행하려면 Excel 시트 열에서 값을 추출해야합니다. 저는 Apache POI 패키지를 사용하여 Excel 파일을 읽었으며 행을 반복 할 필요가있을 때 제대로 작동합니다. 그러나 API (link text) 나 Google 검색을 통해 열을 가져 오는 것에 대해서는 아무 것도 찾을 수 없습니다.을 사용하면 Apache POI를 사용하여 Excel 파일에서 열을 가져올 수 있습니까?

서로 다른 열의 최대 값과 최소값을 가져와이 값을 사용하여 난수를 생성해야하므로 개별 열을 선택하지 않고 행과 열을 반복하여 값을 얻고 하나, 그 시간 효율적인 모든 소리하지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

감사합니다,

답변

17

Excel 파일이 아니라 기반 열보다 기반 행, 그래서 열의 모든 값을 얻을 수있는 유일한 방법은 차례로 각 행 보는 것입니다. 열의 셀은 함께 저장되지 않기 때문에 열을 빨리 가져올 방법이 없습니다.

List<Double> values = new ArrayList<Double>(); 
for(Row r : sheet) { 
    Cell c = r.getCell(columnNumber); 
    if(c != null) { 
     if(c.getCellType() == Cell.CELL_TYPE_NUMERIC) { 
     valuesadd(c.getNumericCellValue()); 
     } else if(c.getCellType() == Cell.CELL_TYPE_FORMULA && c.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) { 
     valuesadd(c.getNumericCellValue()); 
     } 
    } 
} 

그 다음 당신에게 해당 열의 모든 숫자 셀 값을주지 :

코드는 아마 같은 것이되고 싶어.

0

나는 그것이 오래된 문제라는 것을 알고 있지만, 나는 제시된 것과 같은 문제를 안고 다르게 해결해야했다.

내 코드를 쉽게 적용 할 수 없으며 불필요한 복잡성을 많이 겪었을 것입니다. (http://www.howtogeek.com/howto/12366/)

또한 VBA하여 반전 수 등이 여기에 표시 : 여기에서 설명하는 것처럼 그래서 나는 열과 행을 inversing에 의해 대신 엑셀 시트를 변경하기로 결정

Convert row with columns of data into column with multiple rows in Excel 2007

는 희망이 사람을 도와줍니다 거기에

0

파일에 헤더가 있고 열 인덱스에 대해 확실하지 않지만 특정 헤더 (열 이름)에서 열을 선택하려는 경우 다음과 같이 시도하십시오.

for(Row r : datatypeSheet) 
      { 
       Iterator<Cell> headerIterator = r.cellIterator(); 
       Cell header = null; 
       // table header row 
       if(r.getRowNum() == 0) 
       { 
        // getting specific column's index 

        while(headerIterator.hasNext()) 
        { 
         header = headerIterator.next(); 
         if(header.getStringCellValue().equalsIgnoreCase("column1Index")) 
         { 
          column1Index = header.getColumnIndex(); 
         } 
        } 
       } 
       else 
       { 
        Cell column1Cells = r.getCell(column1); 

        if(column1Cells != null) 
        { 
         if(column1Cells.getCellType() == Cell.CELL_TYPE_NUMERIC) 
         { 
// adding to a list 
          column1Data.add(column1Cells.getNumericCellValue()); 
         } 
         else if(column1Cells.getCellType() == Cell.CELL_TYPE_FORMULA && column1Cells.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) 
         { 
// adding to a list 
          column1Data.add(column1Cells.getNumericCellValue()); 
         } 
        } 

       }  
      } 
관련 문제