Analyser un fichier Excel sans Apache POI


Je sais que nous pouvons utiliser Apache POI pour analyser un fichier Excel et obtenir des données. Mais j'ai entendu parler d'une chose étrange que le fichier Excel puisse être transmis de la même manière que nous analysons CSV (comme il suffit de lire le fichier à partir du flux de fichiers et de séparer chaque valeur de colonne avec un séparateur "virgule"). Lorsque nous analysons Excel, nous devons utiliser tab comme délimiteur. Est-il possible? Si oui, alors pourquoi Apache a mis au point un cadre aussi compliqué. Je suis surpris. Quelqu'un peut-il m'aider?

Author: Michael Berry, 2012-04-20

4 answers

CSV est un format texte, il peut donc être analysé à l'aide des délimiteurs. Old Excel est un format binaire et propriétaire, il a donc besoin d'un décodage intelligent. Le nouveau format Excel est compressé XMLS, mais il faut aussi comprendre la structure de ce document avant qu'il ne puisse être transformé en quelque chose d'aussi simple que la lecture de cellules une par une. Donc, la réponse à votre question est non, vous devrez utiliser Apache POI, et aussi - il n'y a rien de mal à cela.

Comme une note de côté, sur le chemin de devenir un bon développeur vous devrez apprendre à faire un peu de vos propres recherches avant de chercher de l'aide. Se salir les mains est la meilleure façon d'apprendre des choses.

 4
Author: maksimov, 2012-04-20 15:19:27

Vous avez probablement confondu ce que vous avez entendu, ou la personne qui vous a dit était confuse.

Certaines parties des fichiers Excel peuvent être stockées (quelque peu) sous forme de fichiers CSV car la structure de données tabulaire s'intègre bien dans un format de fichier CSV. Cependant, si vous enregistrez au format CSV, vous obtenez simplement du texte brut dans chaque cellule - vous perdez toutes les informations de formatage, tous les graphiques, plusieurs feuilles de calcul, etc.

Le format excel XLS natif est ce que Apache POI fonctionne avec, et peut donc gérer tout dans Excel, pas seulement du texte brut restrictif dans certaines cellules. Les fichiers CSV ont leurs utilisations, mais ils ne sont certainement pas un remplacement direct pour les fichiers Excel normaux.

 2
Author: Michael Berry, 2012-04-20 15:14:29

J'ai essayé de lire/écrire un fichier Excel sans utiliser de JAR externe comme POI ou tout autre. Je suis capable d'écrire un fichier au format xls. Voici mon code

FileWriter fwriter = new FileWriter(file,true);
writer = new BufferedWriter(fwriter);
writer.newLine();
writer.write("a"    + "\t");
writer.write("b"    + "\t");
writer.write("c"    + "\t");
writer.write("d"    + "\t");
writer.write("e"    + "\t");
writer.write("f"    + "\t");

Lecture du fichier voici mon code pour lire

if(file != null) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new FileReader(file));
                String line;
                while((line = reader.readLine()) != null) {
                    String[] component = line.split("\\t");
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
 0
Author: Shahrukh A., 2014-05-03 21:32:18
InputStream is = new FileInputStream(new File(filepath));
        StreamingReader reader=null;
        try {
            reader = StreamingReader.builder()
                    .rowCacheSize(100)     
                    .bufferSize(4096)     
                    .sheetIndex(0)        
                    .read(is);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }finally{
            is.close();
        }
        //pass here to reader and itrate it 
          for (Row row : reader) {
            if (row.getRowNum()!=0){
                for (Cell cell : row) {
              // write ur logic to store ur value 
                }

            }
        }
 0
Author: Baisakha Chauhan, 2018-03-08 13:19:01