Почему это происходит при написании Excel на Java - PullRequest
1 голос
/ 12 октября 2011

Хорошо, я пытаюсь написать 3 столбца и N строк одновременно во время итерации. Проблема в том, что 2 из 3 столбцов записываются со значениями ... даже если они отображаются в System.out.println (), они не записываются в Excel. Вот код:

for(int i = 0; i < versionsToGraph.length; i++) {           
                    List<WsCallEntry> wfCalls = allCalls.get(i);
                    int cant = -1;
                    if(!wfCalls.isEmpty()) {                            
                        for (WsCallEntry wsCallEntry : wfCalls) {   
                            String x = wsCallEntry.getKey();
                            int y = wsCallEntry.getValue();
                            cant++;
                            if(versionsToGraph[i].equals("15.6")) {
                                System.out.println(x + " " + y + " will be added.");
                                XSSFSheet sheet = (XSSFSheet) wb.getSheetAt(0);     
                                XSSFRow row = sheet.createRow(27+cant);                                 

                                XSSFCell celly = row.createCell(10); 

                                celly.setCellValue(y);
                            }else{
                                if(versionsToGraph[i].equals("15.9")) {

                                    System.out.println(x + " " + y + " will be added.");
                                    XSSFSheet sheet = (XSSFSheet) wb.getSheetAt(0);     
                                    XSSFRow row = sheet.createRow(27+cant);                                 

                                    XSSFCell celly = row.createCell(11); 

                                    celly.setCellValue(y);
                                }
                            }                       


                            xValues.add(x); 


                        }                           


                        Collections.sort(xValues, new StringComparator());

                }                           
                }                       
                ArrayList<String> newList = eliminarRepetidos(xValues); 
                int cant = 0;
                for (String newlist : newList) {
                    String x = newlist;
                    XSSFSheet sheet = (XSSFSheet) wb.getSheetAt(0);         
                    XSSFRow row = sheet.createRow(27+cant);                                 
                    XSSFCell cellx = row.createCell(9); 
                    cellx.setCellValue(x);
                    cant++;
                }               
            }

Итак, он должен добавить в эту часть кода значения 15,6, 15,9 Y и в последнем foreach записать значения X в Excel. То, что я получаю, это X значения и 15,9 Y значения. Что я не получаю 15,6? (

(из комментария) Я использую эти

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet;

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вы создаете одну и ту же строку на каждой итерации versionsToGraph, вы стираете то, что было добавлено ранее.

XSSFRow row = sheet.createRow(27+cant);

Вы должны делать

sheet.getRow(27+cant);

после первой итерации.

1 голос
/ 12 октября 2011

Итак, сколько экземпляров wfCalls существует? И сколько из этих случаев versionToGraph равно 15,6 или 15,9? Если cant увеличивается многократно из-за несоответствия версий, ваши строки на листе, вероятно, будут вставлены в первые видимые строки в Excel. Я бы дважды проверил номера строк, в которые вы пишете.

...