Ошибка записи файла Excel xlsx.с Apache Poi - PullRequest
0 голосов
/ 15 июня 2011

Я открываю и пишу в файл Excel xlsx, и кажется, что все работает нормально, но когда я открываю файл, чтобы увидеть результат, столбцы не содержат информацию, которую я ожидал.

Только первые 2 столбца имеют информацию.и 2-й второй столбец имеет соответствующее значение.

Не могли бы вы сказать, где моя ошибка?

Есть ли ошибка в POI?

Вот мой код.


String exceloutp = "filename.xlsx"; //File name where to write the values.
             File fileop = new File(exceloutp);
         FileInputStream fs = new FileInputStream(exceloutp);  
         XSSFWorkbook wb = new XSSFWorkbook( fs );

             // get a reference to the worksheet
         XSSFSheet sheet = wb.getSheetAt(0);

             Iterator it = dataResultados.iterator();
             BeanResultadosPaginaFormato27 b = null;
             XSSFCell cell = null;

//Create style for the cells

             XSSFCellStyle normalFormat = wb.createCellStyle();              
             normalFormat.setBorderBottom(CellStyle.BORDER_THIN);
             normalFormat.setBorderTop(CellStyle.BORDER_THIN);
             normalFormat.setBorderLeft(CellStyle.BORDER_THIN);
             normalFormat.setBorderRight(CellStyle.BORDER_THIN);
             normalFormat.setAlignment( CellStyle.ALIGN_LEFT );

             XSSFFont normalFont = wb.createFont();
             normalFont.setFontHeightInPoints((short) 8 );
             normalFont.setFontName("Arial");

             normalFormat.setFont(normalFont);

//end create a style for the cells.                             


//Start filling the cells in every row  width data.
//starting from line 26.

             fila = 26;
             columna = 0;
             while( (fila < 47) &&  ( it.hasNext() ) )
             {
                 columna = 0;
                 b = (BeanResultadosPaginaFormato27) it.next();
                 cell = null;

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getParametro() );//String 1st column

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getUnidad() );//String 2nd column

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getMetodologia() );//String 3rd column

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getUsuario() );//String

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getConcentracion() );//String

                 cell = sheet.getRow(fila).createCell(columna++);
                 cell.setCellType( Cell.CELL_TYPE_STRING );
                 cell.setCellStyle( normalFormat );
                 cell.setCellValue( b.getLimites() ); //String

                 fila++; //Next row.

             }                           

//------End filling cells with data.

//Save the file and open.

             OutputStream out = response.getOutputStream();              
             response.setHeader("Pragma", "no-cache");
             response.setContentType("application/vnd.ms-excel");          
             response.setHeader("Content-Disposition", "attachment; filename=\""+  fileop.getName() +"\"");

             wb.write(out);
             out.flush();
             out.close();    

Вы видите ошибку?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 июня 2011

Я обнаружил, в чем проблема.

Я не понял, что на результат влияют объединенные столбцы.

Поэтому вместо

cell = sheet.getRow(fila).createCell(columna++);

Я изменил его, например,

cell = sheet.getRow(fila).createCell( 7 );

Где 7 - реальный номер столбца, с которого начинается столбец.

...