Déterminer le type de fichier MS Excel avec POI Apache
Est-il un moyen de déterminer MS Office Excel type de fichier dans Apache POI? J'ai besoin de savoir quel est le format du fichier Excel: Excel '97(-2007) (.xls) ou Excel 2007 OOXML (.xlsx).
Je suppose que je pourrais faire quelque chose comme ceci:
int type = PoiTypeHelper.getType(file);
switch (type) {
case PoiType.EXCEL_1997_2007:
...
break;
case PoiType.EXCEL_2007:
...
break;
default:
...
}
Grâce.
source d'informationauteur Alexey Berezkin
Vous devez vous connecter pour publier un commentaire.
La promotion d'un commentaire à une réponse...
Si vous allez faire quelque chose de spécial avec les fichiers, puis rjokelai réponse est la façon de le faire.
Toutefois, si vous êtes simplement à l'aide de la HSSF /XSSF /Commune de la SS usermodel, alors c'est beaucoup plus simple d'avoir PVE de le faire pour vous, et l'utilisation WorkbookFactory pour avoir le type détecté et ouvert pour vous. Vous feriez quelque chose comme:
ou
Alors si vous avez besoin de faire quelque chose de spécial, tester si c'est un
HSSFWorkbook
ouXSSFWorkbook
. Lors de l'ouverture du fichier, utiliser un Fichier plutôt qu'un InputStream si possible pour accélérer les choses et d'économiser de la mémoire.Si vous ne savez pas ce que votre fichier est au tous les, utiliser Apache Tika de faire de la détection - il peut détecter un grand nombre de formats de fichiers différents pour vous.
Vous pouvez utiliser:
Ce sont essentiellement les méthodes que le
WorkbookFactory#create(InputStream)
utilise pour déterminer le typeVeuillez noter, que la méthode prend uniquement en charge les flux de soutien de "marque" (ou PushBackInputStream), si simple FileInputStream n'est pas pris en charge. Utilisation BufferedInputStream comme un wrapper. Pour cette raison, après la détection, vous pouvez simplement réutiliser les flux, car il sera réinitialisée au point de départ.
Basé sur la lib de mise en œuvre de
org.apache.poi.ss.usermodel.WorkbookFactory#create(java.io.InputStream)
On peut imiter les
WorkbookFactory
's de la logique, de supprimer sans pertinence bits et retour type de fichier à la place.Cela peut être fait à l'aide de la FileMagic classe. Voir ci-dessous JavaDoc -
https://poi.apache.org/apidocs/org/apache/poi/poifs/filesystem/FileMagic.html
Échantillon extrait de code:
FileMagic.valueOf(inputStream).equals(FileMagic.OOXML) //XLSX