Convertir des .csv .xls en Java
Ce que quelqu'un ici sait de toute rapide, propre façon de convertir les fichiers csv en xls ou xlsx fichiers en java?
J'ai quelque chose à gérer les fichiers csv déjà en place et j'ai besoin de l'appoint de compatibilité pour d'autres programmes.
Exemple de code en plus de noms de paquets est toujours bien apprécié.
Merci beaucoup,
Justian
Voici mon code pour l'instant. J'ai besoin de supprimer les retours ("\n") des lignes. Certains de mes cellules contiennent plusieurs lignes d'informations (dans une liste), donc je peux l'utiliser "\n" dans le format csv pour indiquer plusieurs lignes à l'intérieur d'un cellule, mais xls traite ces que si je veux les mettre sur un nouveau ligne.
Le code est modifié à partir de l'internet et un peu salissant pour l'instant. Vous remarquerez peut-être quelques méthodes obsolètes, comme il a été écrit en 2004, et assurez-vous d'ignorer la terrible retour des déclarations. Je suis juste à l'aide de S. o.p à l'instant pour tester et je vais nettoyer plus tard.
package jab.jm.io;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class FileConverter {
public static String ConvertCSVToXLS(String file) throws IOException {
if (file.indexOf(".csv") < 0)
return "Error converting file: .csv file not given.";
String name = FileManager.getFileNameFromPath(file, false);
ArrayList<ArrayList<String>> arList = new ArrayList<ArrayList<String>>();
ArrayList<String> al = null;
String thisLine;
DataInputStream myInput = new DataInputStream(new FileInputStream(file));
while ((thisLine = myInput.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisLine.split(",");
for (int j = 0; j < strar.length; j++) {
//My Attempt (BELOW)
String edit = strar[j].replace('\n', ' ');
al.add(edit);
}
arList.add(al);
System.out.println();
}
try {
HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
for (int k = 0; k < arList.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arList.get(k);
HSSFRow row = sheet.createRow((short) 0 + k);
for (int p = 0; p < ardata.size(); p++) {
System.out.print(ardata.get(p));
HSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}
FileOutputStream fileOut = new FileOutputStream(
FileManager.getCleanPath() + "/converted files/" + name
+ ".xls");
hwb.write(fileOut);
fileOut.close();
System.out.println(name + ".xls has been generated");
} catch (Exception ex) {
}
return "";
}
}
OriginalL'auteur Justian Meyer | 2010-07-06
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si vous le savez déjà, mais:
.csv
fichiers directement, de sorte que toute conversion ne serait seulement une visite de courtoisie à votre moins "doués" des utilisateurs..csv
fichier qui va la rendre plus utile. En d'autres termes, CSV est un "bête" format et convertir.xls
sera (probablement) augmenter la taille du fichier, mais pas le format rendra pas plus intelligent.Curtis suggestion de PI est la première chose qui me vient à mon esprit aussi.
Si vous êtes en train de faire cette conversion sur une machine Windows, une autre alternative pourrait être Jacob, Java COM pont qui vous permettra effectivement de contrôle à distance Excel à partir d'un programme Java pour faire des choses comme ouvrir un fichier et l'enregistrer dans un format différent, peut-être même l'application de certaines modifications de mise en forme ou d'une telle.
Enfin, j'ai aussi eu un certain succès en faisant SQL
INSERT
s (via JDBC) dans une feuille de calcul Excel accessible via JDBC-ODBC bridge. c'est à dire ODBC peut faire un fichier Excel ressembler à une base de données. Ce n'est pas très souples, vous ne pouvez pas demander à la DB pour créer arbitrairement nommé.XLS
fichiers.EDIT:
Il me semble que
readLine()
est déjà de ne pas vous donner des lignes entières. Comment est-il de savoir que le retour chariot n'est pas un terminateur de ligne? Vous devriez être en mesure de vérifier cela auprès de débogage imprimer des relevés à droite après le readLine().Si cela est vrai, il serait sucer parce que la voie à suivre serait pour vous
Les deux alternatives sont le travail, vous n'étaient probablement pas à la recherche de l'avant.
Survolant votre code, je n'étais pas en mesure de déterminer quel problème que vous essayez de résoudre. Ces CRs au milieu des champs, ou à la fin des enregistrements? Si ils sont dans les champs, devraient-ils être remplacé par un vide? Votre code est ne pas réussir à faire cela?
Non, il n'est pas. Disons que j'ai de champs nom | animaux de compagnie | code postal. Si j'ai un multi-colonne de ligne dans le format csv, comme "john | chien (\n) cat | 10000", il apparaîtra en tant que "jean | chien" et (ligne suivante) "cat | zip". Il est difficile de montrer ce avec stackoverflow de l'auto-mise en forme. De ce que je vois, c' doit corriger cela, mais pas de chance jusqu'à présent.
Désolé de vous faire attendre. Je vais prendre un coup d'oeil à droite maintenant...
OriginalL'auteur Carl Smotricz
Si vous voulez lire ou écrire XLS ou XLSX fichiers en Java, Apache POI est un bon pari: http://poi.apache.org/
OriginalL'auteur Curtis
Copier coller le programme ci-dessous,j'ai couru le programme et il fonctionne très bien,Laissez-moi savoir si vous avez des questions sur ce programme.(Vous avez besoin d'Apache POI Jar pour exécuter ce programme)
OriginalL'auteur user3065934
Les outils dans Excel ne sont pas suffisantes pour que l'OP veut faire. Il est sur la bonne voie. Excel ne peut pas importer plusieurs fichiers CSV dans différentes feuilles de calcul dans le même fichier, ce qui est pourquoi vous voulez le faire dans le code. Ma suggestion est d'utiliser OpenCSV pour lire le fichier CSV, il peut corriger automatiquement les retours à la ligne dans les données et les colonnes manquantes, et il est gratuit et open source. C'est en fait très, très robuste et peut gérer tous les différents types de non-standard des fichiers CSV.
OriginalL'auteur ChopperCharles
Vous avez écrit:
Quels sont ces autres programmes? Sont-ils requis pour accéder à vos données dans des fichiers Excel, ou pourraient-ils travailler avec une connexion JDBC ou ODBC à une base de données? À l'aide d'une base de données de l'emplacement central, vous pouvez extraire les données dans des fichiers CSV ou en d'autres formats comme nécessaire.
OriginalL'auteur Alan Krueger
J'ai créé un petit logiciel appelé csv2xls. Il a besoin de Java.
Merci @Jaan. Maintenant, c'est ici.
OriginalL'auteur sixro