2011-06-28 28 views

Respuesta

23

le sugiero que utilice el Apache POI framework (específicamente el HSSF/XSSF API) para escribir el archivo XLS.

Para leer un archivo CSV, sugiero que use OpenCSV, ya que se ocupará de los caracteres escapados, etc. para usted.

Juntar el ejemplo de PDI de here y el ejemplo OpenCSV de here le da esto:

import java.io.*; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.*; 
import au.com.bytecode.opencsv.CSVReader; 

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("data.csv")); 
     String[] line; 
     int r = 0; 
     while ((line = reader.readNext()) != null) { 
      Row row = sheet.createRow((short) r++); 

      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(); 
    } 
} 

enter image description hereenter image description here

+0

Será método terriblemente lento cuando su csv cuenta con más de 100 mil líneas – whd

6

Apache POI es una biblioteca que puede manejar todo tipo de documentos de Microsoft Office, incluido MS Excel. Puede leer el contenido del archivo csv con código Java simple y usar esa biblioteca para crear y guardar un documento de MS Excel.

0

Usando maravilloso, me gustaría hacerlo de esta manera:

// groovy to generate large csv file 
def GROOVY_HOME = new File(System.getenv('GROOVY_HOME')) 
if (!GROOVY_HOME.canRead()) { 
    println("Missing environment variable GROOVY_HOME: '${GROOVY_HOME}'") 
    System.exit(0) 
} 

File file = new File("csv.csv") 
if (file.exists()) { 
    assert file.delete() 
    assert file.createNewFile() 
} 

boolean append = true 
FileWriter fileWriter = new FileWriter(file, append) 
BufferedWriter buffWriter = new BufferedWriter(fileWriter) 

buffWriter.write "sdiType=ReferenceValue,,,\n" 
buffWriter.write "ListName,ListStartDate,Value,ValueStartDate\n" 
println("Writing to file 'csv.csv'") 

def y = 5000 
while (y-- > 0) { 
    buffWriter.write "test" + y + ",1/1/2001,2008,1/1/2001\n" 
} 

buffWriter.flush() 
buffWriter.close() 
Cuestiones relacionadas