J'ai un code pour lire les valeurs d'un fichier Excel en utilisant Apache POI, le contenu de ce fichier Excel est une grande table avec plusieurs colonnes et de nombreuses lignes et il existe de nombreux fichiers Excel avec la même structure (nombre de colonnes) , et parfois peuvent avoir un nom de colonne différent et des valeurs de colonne différentes.
L'une de mes exigences est d'ingérer toutes les données dans deux types de données différents, l'un est les données numériques qui sont de type Float, et l'autre est la valeur de texte sous forme de chaîne.
Question 1: Comment passer cette logique dans un fichier de propriétés, de cette façon chaque fois que j'ai besoin d'analyser un fichier Excel, il peut prendre le fichier externe avec le bon ensemble de type de données pour chaque colonne?
Question 2: Dans mon approche ci-dessous, j'ai défini la position de la colonne comme une clé pour identifier la position, mais je pense que c'est beaucoup mieux au lieu d'avoir une valeur numérique, avoir le nom de la colonne comme clé, dans ce cas est plus rapide pour lire le fichier de propriétés et définir la valeur du type de données en fonction du nom de la colonne.
Actuellement, je suis venu avec la logique ci-dessous pour corriger la position de la colonne avec son type de données String ou Float, et c'est bien pour un fichier Excel particulier.
Properties mappingFile = new Properties(); mappingFile.load(newFile); mappingFile.load(newFile); List = mappingFile.getProperties().list(System.out); static NavigableMap<List> columnTypeMap = null; // map is used to identify the column
Donc mon idée est d'avoir un fichier de propriétés comme:
Column0=String Column1=String Column2=Float Column3=String Column4=Float Column5=Float Column6=String ...
Et puis de le choisir en appelant le fichier de propriétés:
FileInputStream newFile = new FileInputStream ("dataType.properties");
String filePath; String fileProcessingType; Map<Integer, List<MergeCellRange>> mergeCellMap = new HashMap<>(); Map<Integer, String> columnHeaderMap = new HashMap<>();); static NavigableMap<Integer, String> columnTypeMap = null; // map is used to identify the column // types of each parameter static { columnTypeMap = new TreeMap<Integer, String>(); columnTypeMap.put(0, "String"); columnTypeMap.put(1, "String"); // 1 TimeStamp as String columnTypeMap.put(2, "String"); // 2-66 String columnTypeMap.put(66, "String"); // 66 String columnTypeMap.put(67, "Float"); // 67-88 String columnTypeMap.put(89, "String"); // 89-90 String columnTypeMap.put(113, "String"); // 114.... }
3 Réponses :
columnTypeMap.put(Integer.parseInt((String)c),(String)t);
Jetez un œil à Apache PropertiesConfiguration . Il résout toujours les bases pour vous: ouvrez et analysez le fichier de propriétés et fournissez son contenu par clé. Des exemples peuvent être trouvés dans la documentation.
Tout d'abord, vous pouvez vérifier Documentation de POI sur l'obtention du type de données d'une cellule .
Si cela ne fonctionne pas pour vous, je vous recommande de consulter Classe Propriétés Java . Vous pouvez obtenir une liste de toutes les propriétés disponibles dans le fichier par clé ou par (clé, valeur) . Après avoir connu le type de données attendu, le traitement de la cellule est simple: comme chaîne , en double .