2017-12-07 27 views
0

java를 사용하여 Excel 및 그래프 그래프에서 데이터를 읽으려고합니다.데이터를 Excel에서 읽는 방법 및 Java 또는 Groovy를 사용하여 그래프 만들기

나는 아래의 오류가 계속 :

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

Exception in thread "main" java.lang.NoClassDefFoundError: org/jfree/util/PublicCloneable

내 코드 :

import java.io.*; 
import java.util.*; 
import org.jfree.data.*; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.plot.PlotOrientation; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.jfree.data.category.DefaultCategoryDataset; 

    public class ReadExcel{ 
     public static void main(String[]args){ 
    short a=0; 
    short b=1; 
    int i=0; 
    ArrayList<Integer> list1=new ArrayList<Integer>(); 
    ArrayList<Integer> list2=new ArrayList<Integer>(); 
     int x=0, y=0; 
     String filename ="C:\\Chart.xlsx";  
     if(filename != null && !filename.equals("")){ 
     try{  
     FileInputStream fs =new FileInputStream(filename);  
     HSSFWorkbook wb = new HSSFWorkbook(fs); 
     for(int k = 0; k < wb.getNumberOfSheets(); k++){  
     int j=i+1;  
     HSSFSheet sheet = wb.getSheetAt(k);  
     int rows = sheet.getPhysicalNumberOfRows();  
     for(int r =  1; r < rows; r++){  
     HSSFRow row = sheet.getRow(r);  
     int cells = row.getPhysicalNumberOfCells();  
      HSSFCell cell1 = row.getCell(a);  
      x =(int) cell1.getNumericCellValue();  
      HSSFCell cell2 = row.getCell(b);  
      y =(int) cell2.getNumericCellValue();  

      list1.add(new Integer(x)); 
      list2.add(new Integer(y)); 
      }  
      i++; 
     }  
}catch(Exception e){ 
    System.out.println(e); 

} 

} 
DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
    for(int j=0;j<list1.size();j++){ 
     dataset.setValue((double)list2.get(j), "Marks", list1.get(j).toString()); 
    } 
     JFreeChart chart = ChartFactory.createBarChart("BarChart using JFreeChart","ID", "Marks", dataset, 
     PlotOrientation.VERTICAL, false,true, false); 
       try { 
       ChartUtilities.saveChartAsJPEG(new File("C:\\chart.jpg"), chart,400, 300); 
       } catch (IOException e) { 
       System.out.println("Problem in creating chart."); 
    } 
} 
} 

샘플 엑셀 :

Response Time Transaction Name Runid 
25     Home   1 
56     Login   2 
23     Order   3 

내가 XSSF 아파치 POI하지만 행운을 사용하려고했습니다.

차트의 이미지를 로컬 어딘가에 저장하고 싶었습니다.

답변

0

NoClassDefFoundError은 코드에서 사용중인 클래스를 JVM이 찾을 수 없다는 것을 의미합니다. 일반적인 방법으로 클래스 경로에 의존하지 않는다는 뜻입니다. 이 종속성을 프로젝트에 추가해보십시오. https://mvnrepository.com/artifact/org.jfree/jcommon

+0

나는 이것을 시도했습니다. 계속 동일한 오류가 발생합니다. org.apache.poi.poifs.filesystem.OfficeXmlFileException : 제공된 데이터가 Office 2007 이상의 XML에있는 것 같습니다. OLE2 Office Documents를 다루는 POI 부분을 호출하고 있습니다. 이 데이터를 처리하려면 POI의 다른 부분 (예 : HSSF 대신 XSSF) – syndy1989

+0

@ syndy1989를 호출해야합니다.이 오류는 명확합니다. 아파치 포이는 엑셀 파일 (xls와 xlsx)을 다루기 위해 2 가지 다른 라이브러리 (HSSF 과 XSSF)를 가지고있다. 엑셀 버전이> 2007이면 XSSF를 사용해야합니다. "HSSF는 POI 프로젝트의 순수 Java 구현 인 Excel '97 (-2007) 파일 형식입니다 .XSSF는 POI 프로젝트의 순수 Java 구현 인 Excel 2007 OOXML (.xlsx) 파일 형식입니다." –