2011-06-30 17 views
5

Estoy creando un archivo de Excel en base al archivo CSV. Para leer el archivo CSV, estoy usando la API de Opencsv y Apache POI.En mi csv contiene 65537 filas.¿Existe alguna limitación para usar la API de Opencsv o Apache Poi Api?

class Test { 
public static void main(String[] args) throws IOException { 
    Workbook wb = new HSSFWorkbook(); 
    CreationHelper helper = wb.getCreationHelper(); 
    Sheet sheet = wb.createSheet("new sheet"); 

    CSVReader reader = new CSVReader(new FileReader("SampleData.csv")); 
    String[] line; 
    int r = 0;int count=0; 
    while ((line = reader.readNext()) != null) { 
     Row row = sheet.createRow((short) r++); 
     count=count+1; 
     System.out.println("count-"+count); 
     for (int i = 0; i < line.length; i++) 
      row.createCell(i) 
       .setCellValue(helper.createRichTextString(line[i])); 
    } 

    // Write the output to a file 
    FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
    wb.write(fileOut); 
    fileOut.close(); 
}} 

cuando ejecuto este programa me da error siguiente:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid row number (-32768) outside allowable range (0..65535)at org.apache.poi.hssf.usermodel.HSSFRow.setRowNum(HSSFRow.java:232) 
    at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:86) 
    at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:70) 
    at org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:205) 
    at org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:71) 
    at com.arosys.utilityclasses.Test.main(Test.java:23)Java Result: 1 

Traté de rastrear la cantidad de filas que apoyan lo encontré solo soporta 32768 y también trató con menos número de fila, se funciona bien y crea archivos de Excel.

ayúdame a solucionar este problema, si mi csv contiene 65536 filas, entonces cómo estoy listo para escribir el archivo de Excel (Xls).

Gracias

Respuesta

8

¿Por qué se fundición de la fila num a corto en la siguiente línea

Row row = sheet.createRow((short) r++); 

dejarlo como int

+0

Thanks.i tiene una pregunta más para usted si el número de filas aumenta 65536 puede escribir archivos (XLS), en el otro lado para XLXS, la cantidad de filas que puedo escribir usando esta API. –

+1

Bueno, no estoy seguro. solo tendrás que probarlo y ver. En cuanto a las versiones de Excel, creo que las versiones anteriores de Excel (antes de 2007) estaban limitadas a 65536 filas. Sin embargo, la versión más nueva tiene un límite muy grande. 1,048,576 es lo que puedo ver aquí http://www.contextures.com/xlfaqapp.html#MoreRows. Pruebe el archivo de salida para ver si la versión de excel puede manejarlo – aldrin

+1

Si desea usar más de 65536 filas, Tendré que cambiar al formato .xlsx, lo que significa cambiar de HSSF a XSSF – Gagravarr

2

parece que es su valor a corto. el valor máximo en un corto es 32767 e intenta acceder a uno más que eso.

Cuestiones relacionadas