2011-06-28 5 views

Répondre

23

Je vous suggère d'utiliser le Apache POI framework (en particulier le HSSF/XSSF API) pour écrire le fichier XLS.

Pour lire un fichier CSV, je vous suggère d'utiliser OpenCSV car il prendra soin des caractères d'échappement, etc. pour vous.

Mettre sur pied l'exemple POI à partir here et l'exemple OpenCSV de here vous donne ceci:

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

il sera terriblement lent méthode lorsque votre csv a plus de 100k lignes – whd

6

Apache POI est une bibliothèque qui peut gérer tous les types de documents Microsoft Office, y compris MS Excel. Vous pouvez lire le contenu du fichier csv avec un code java simple et utiliser cette bibliothèque pour créer et enregistrer un document MS Excel.

0

Vous pouvez essayer Aspose.Cells for Java. Vous pouvez utiliser ce composant pour open a CSV file et save it as XLS file en utilisant Java. Il vous aide également à travailler avec différentes versions de fichiers Excel.

Divulgation: Je travaille comme développeur évangéliste chez Aspose.

0

En utilisant Groovy, je le ferais de cette façon:

// 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() 
Questions connexes