2017-06-15 2 views
0

Ich lese lesen und Excel-Dateien mit Java schreiben. Ich habe Code geschrieben, um das Balkendiagramm aus dem Excel-Blatt zu erstellen, und ich habe den Fehler angezeigt, dass "NUMERIC Wert von einer STRING-Zelle nicht abgerufen werden kann". Ich verstehe nicht, wie man das Problem löst. Kann jemand mir helfen, das Problem zu lösen.Numerischen Wert von String-Zelle in Java

Hier ist Code.

> 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; import 
> org.apache.poi.ss.usermodel.Cell; 
> 
> 
> public class BARCHART{ public static void main(String[]args){ short 
> a=0; short b=1; int i=0; ArrayList<String> list1=new 
> ArrayList<String>(); ArrayList<Integer> list2=new 
> ArrayList<Integer>(); 
> 
> String x; int y=0; String filename ="Student Grading Report.xls"; 
> 
> 
> 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 =(String) cell1.getStringCellValue(); HSSFCell cell2 = 
> row.getCell(b); y =(int) cell2.getNumericCellValue(); 
> 
> list1.add(new String(x)); list2.add(new Integer(y)); } i++; } 
> }catch(Exception e){ System.out.println(e); 
> 
> } 
> 
> } DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
> for(int j=0;j<list2.size();j++){ 
> dataset.setValue((double)list2.get(j), "Marks", 
> list1.get(j).toString()); } JFreeChart chart = 
> ChartFactory.createBarChart("BarChart","Marks", "St_Id", dataset, 
> PlotOrientation.VERTICAL, false,true, false); try { 
> ChartUtilities.saveChartAsJPEG(new File("chart.jpg"), chart,400, 300); 
> } catch (IOException e) { System.out.println("Problem in creating 
> chart."); } } } 

jemand, der mir bei der Lösung eines solchen Problems helfen kann? Danke :)

+1

Reformierte Ihren Code, um es lesbar zuerst;) – HieuHT

Antwort

0

Wenn Sie versuchen, eine Zeichenkette in eine doppelte oder ganze Zahl in Java zu speichern, wird dies abgelehnt, da es eine stark typisierte Sprache ist. Sie können stattdessen die Codezeilen verwenden

Integer.parseInt(*desiredVariable*) 

oder

Double.parseDouble(*desiredVariable*) 

diese Zeichenfolgen in den richtigen Datentyp zu ändern.

+0

Es funktioniert nicht, weil Methode Parse nicht für die Arraylist ist .. andere Vorschläge ?? –

+0

Können Sie auf die spezifische Zeile in der Frage hinweisen, die den Fehler verursacht? Es sollte dir in deiner Konsole sagen. – JoshKopen

+0

Wenn ich die Parse-Methode verwendet, zeigt es einen Fehler an, der nicht für die String-Array-Liste analysiert werden kann, um die list1 als Array-Liste beim Start des Programms zu deklarieren. und wenn ich die Deklaration der Array-Liste Zeichenfolge in einfache Array geändert hat, zeigt es Fehler in Zeile 46,47 und 48, dass Add-Methode nicht für einfache Zeichenfolgen anwendbar ist .. Kann nicht helfen .. –

0
HSSFCell yourCell = sheet.getRow(row).getCell(column); 
    yourCell.setCellType(Cell.CELL_TYPE_STRING); 
    String data = yourCell.getStringCellValue(); 
+0

anzeigt Wie benutze ich das in meinem Code? weil ich es nicht verstehe. wenn Sie den Code freundlicherweise bearbeiten? Danke –

Verwandte Themen