[Java] Analyser les fichiers Excel (non limités à divers) avec Apathce Tika [Kotlin]

Chose que tu veux faire

Analysez le fichier xlsx. Cette fois, nous analyserons en utilisant Apache Tika.

Contenu à analyser

Cette fois, nous analyserons les fichiers avec le contenu suivant.

En remarque, le fichier que j'ai utilisé pour la confirmation lors de la rédaction de cet article a été généré à l'aide d'une feuille de calcul Google Docs, je n'ai donc pas été en mesure de confirmer qu'il fonctionnera correctement même s'il est généré à partir d'un logiciel authentique / tiers. En outre, dans le fichier réel, les polices ont été modifiées séparément, mais le résultat de l'analyse n'a pas été affecté.

Feuille 1
hoge Fuga Piyo
fizz Mauvais fizzBuzz

Comment faire

Vous pouvez le faire en installant une bibliothèque et en analysant. Cette fois, je vais essayer deux méthodes, l'une consiste à analyser uniquement les fichiers de type xml (y compris xlsx), et l'autre consiste à demander à Tika de détecter le type de fichier et de l'analyser automatiquement.

Présentation des analyseurs Apache Tika

Introduit de Maven. J'ai utilisé «1.21» pour la vérification.

Comment analyser uniquement les données système xml

Il peut être analysé en utilisant ʻOOXML Parser. Le résultat analysé est stocké dans «ContentHandler» (cette fois «BodyContentHandler»). Je n'ai trouvé aucun moyen d'obtenir des informations de BodyContentHandler autre que toString`.

L'exemple de code est le suivant. Analysez les fichiers xml dans src / main / resources. En guise de mise en garde, si vous insérez un fichier qui n'est pas de type xml (= ʻOOXMLParser` ne peut pas être analysé), il sera supprimé.

Le résultat de l'exécution est le même que la méthode permettant à Tika de détecter le type de fichier et de l'analyser automatiquement, je vais donc l'omettre.

import org.apache.tika.parser.ParseContext
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser
import org.apache.tika.sax.BodyContentHandler
import org.apache.tika.metadata.Metadata as TikaMetadata
import java.io.File
import java.io.FileInputStream

fun main() {
    val parser = OOXMLParser() //Analyseur de données XML
    val metaData = TikaMetadata()
    val context = ParseContext()
    val handler = BodyContentHandler() //Gestionnaire de stockage des résultats d'analyse

    File(System.getProperty("user.dir") + "/src/main/resources").listFiles().forEach {
        parser.parse(FileInputStream(it), handler, metaData, context)
        println(handler.toString())
    }
}

Comment faire détecter le type de fichier par Tika et l'analyser automatiquement

Cela peut être réalisé en remplaçant l'analyseur par ʻAutoDetectParser` à partir de l'exemple de code ci-dessus.

import org.apache.tika.parser.AutoDetectParser
import org.apache.tika.parser.ParseContext
import org.apache.tika.sax.BodyContentHandler
import org.apache.tika.metadata.Metadata as TikaMetadata
import java.io.File
import java.io.FileInputStream

fun main() {
    val parser = AutoDetectParser() //Analyseur qui détecte automatiquement les types de fichiers
    val metaData = TikaMetadata()
    val context = ParseContext()
    val handler = BodyContentHandler() //Gestionnaire de stockage des résultats d'analyse

    File(System.getProperty("user.dir") + "/src/main/resources").listFiles().forEach {
        println("-------------")
        println(it.name)

        parser.parse(FileInputStream(it), handler, metaData, context)
        println(handler.toString())
        println("-------------")
    }
}

Résultat d'exécution

J'ai essayé tous les formats de fichiers autres que zip qui peuvent être déposés dans la feuille de calcul.

-------------
xls_for_test.xlsx
Feuille 1
hoge Fuga Piyo
fizz Buzz fizzBuzz



-------------
-------------
xls_for_test -Feuille 1.csv
Feuille 1
hoge Fuga Piyo
fizz Buzz fizzBuzz


hoge,Fuga,Piyo
fizz,Mauvais,fizzBuzz

-------------
-------------
xls_for_test.ods
Feuille 1
hoge Fuga Piyo
fizz Buzz fizzBuzz


hoge,Fuga,Piyo
fizz,Mauvais,fizzBuzz
	hoge
Fuga
Piyo
	
	fizz
Mauvais
	fizzBuzz
	
	
	

???
Page 
??? (???)
00/00/0000, 00:00:00
Page  / 

-------------
-------------
xls_for_test -Feuille 1.pdf
Feuille 1
hoge Fuga Piyo
fizz Buzz fizzBuzz


hoge,Fuga,Piyo
fizz,Mauvais,fizzBuzz
	hoge
Fuga
Piyo
	
	fizz
Mauvais
	fizzBuzz
	
	
	

???
Page 
??? (???)
00/00/0000, 00:00:00
Page  / 

hoge Fuga Piyo

fizz Buzz fizzBuzz



-------------
-------------
xls_for_test -Feuille 1.tsv
Feuille 1
hoge Fuga Piyo
fizz Buzz fizzBuzz


hoge,Fuga,Piyo
fizz,Mauvais,fizzBuzz
	hoge
Fuga
Piyo
	
	fizz
Mauvais
	fizzBuzz
	
	
	

???
Page 
??? (???)
00/00/0000, 00:00:00
Page  / 

hoge Fuga Piyo

fizz Buzz fizzBuzz


hoge Fuga Piyo
fizz Buzz fizzBuzz

-------------

Impressions

Pour le moment, je suis heureux de pouvoir analyser des fichiers dans différents formats, pas seulement xlsx. Cependant, la sortie du résultat analysé est douloureuse si elle est au format BodyContentHandler, donc je vais chercher quelque chose qui correspond mieux à mon objectif.

Recommended Posts

[Java] Analyser les fichiers Excel (non limités à divers) avec Apathce Tika [Kotlin]
[Java] Obtenez des métadonnées à partir de fichiers avec Apathce Tika, et obtenez la largeur et la hauteur des images / vidéos à partir des métadonnées [Kotlin]
[Java] Obtenir le jeu de caractères avec Apathce Tika / Initialiser la chaîne à partir du jeu de caractères [Kotlin]
Je veux implémenter diverses fonctions avec kotlin et java!
[Java] Gérer les fichiers Excel avec Apache POI
[Kotlin] Supprimer les fichiers en double [Java]
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Premiers pas avec Kotlin à envoyer aux développeurs Java
Je veux faire des transitions d'écran avec kotlin et java!
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Java pour jouer avec Function
Exploitons Excel avec Java! !!
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Je veux revenir à l'écran précédent avec kotlin et java!
Android: Comment gérer "Impossible de déterminer la version Java à partir de '10 .0.1 '"
Project facet Java version 13 n'est pas pris en charge. Comment faire avec