Maison  >  Article  >  Java  >  Comment importer des en-têtes multi-niveaux dans Java easyExcel

Comment importer des en-têtes multi-niveaux dans Java easyExcel

WBOY
WBOYavant
2023-05-07 13:18:123416parcourir

Tout d'abord, vous devez comprendre

Comment easyExcel obtient l'en-tête du tableau et collez le code directement sans aucune bêtise

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Data;

import java.util.*;

@Data
public class AnalysisEventMonitor extends AnalysisEventListener<Map<Integer, String>> {
    /**
     * 存储Key
     */
    Map<Integer, String> key = new HashMap<>();
    /**
     * keuList
     */
    List<String> keyList=new ArrayList<>();

    public AnalysisEventMonitor() {
    }
    /**
     * 重写invokeHeadMap方法,获去表头,如果有需要获取第一行表头就重写这个方法,不需要则不需要重写
     *
     * @param headMap Excel每行解析的数据为Map<Integer, String>类型,Integer是Excel的列索引,String为Excel的单元格值
     * @param context context能获取一些东西,比如context.readRowHolder().getRowIndex()为Excel的行索引,表头的行索引为0,0之后的都解析成数据
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        Set<Integer> integerSet = headMap.keySet();
        for (Integer integer : integerSet) {
            keyList.add(headMap.get(integer));
        }
        key.putAll(headMap);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }

    @Override
    public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {

    }
}

Ce code est utilisé pour intercepter l'en-tête du tableau lorsque easyExcel lit le tableau Excel

La classe peut être créée par lui-même et hérite de AnalysisEventListener, puis réécrit-le. La méthode InvoqueHeadMap peut obtenir l'en-tête de premier niveau d'Excel.

Le code pour importer le fichier ci-dessous

//加载拦截器 作用于 获取表头
            AnalysisEventMonitor analysisEventMonitor = new AnalysisEventMonitor ();
            //读取导入的excel 这个地方容易报错 0✖什么的 这个时候就去把excel的文件用高级版本的excel重新导出 因为版本过低的问题
            List<Map<Integer,Object>> list = EasyExcel.read(file.getInputStream(),analysisEventMonitor ).sheet(0).doReadSync();
            //获取拦截器拦截到的 表头的Map集合
            Map<Integer, String> key = analysisEventMonitor .getKey();

Nous avons maintenant les données et l'en-tête. Certaines personnes seront curieuses, vous n'avez que l'en-tête de premier niveau, qu'en est-il de mon en-tête de deuxième niveau ? Ne vous inquiétez pas. Écoutez-moi lentement.

Le bloc de code ci-dessus, la deuxième ligne obtient les données Excel. Ces données sont les données après avoir supprimé l'en-tête de premier niveau. Certaines personnes peuvent comprendre cela, et certaines personnes ne comprennent toujours pas. OK, continuons, la troisième. La ligne de code est une collection d'en-têtes de table interceptée par notre intercepteur. On peut voir que la clé de la carte reçue par map est de type Integer. Par coïncidence, notre liste de données contient également une carte et la clé de la carte se trouve être. De type entier, à cette époque, les étudiants bons en logique ont dû penser que cet entier n'est pas écrit et trié au hasard, mais que la position de l'en-tête du tableau fait écho aux données. Ensuite, c'est facile pour le moment. Il suffit de trouver la position de départ de l'en-tête à plusieurs niveaux. Je posterai l'image ci-dessous et y répondrai.

Comment importer des en-têtes multi-niveaux dans Java easyExcel

Vérifiez que les résultats sont désormais des en-têtes multi-niveaux fusionnés. À ce stade, 1 dans l'ensemble d'en-têtes que nous avons obtenu correspond au nom, 2 correspond au numéro de téléphone et 3 correspond aux résultats. nous avons obtenu, le code est list.get (0); Les données obtenues sont les données de l'en-tête secondaire. À ce moment, une autre carte est obtenue. Les relations correspondantes sont 1=null 2=null 3=anglais 4=chinois. À ce moment-là, quelqu'un m'a demandé à nouveau : et si j'avais un en-tête à plusieurs niveaux plus tard ? autocollants.

Comment importer des en-têtes multi-niveaux dans Java easyExcel

À ce moment, dans les données d'en-tête que nous avons obtenues, 1=nom 2=numéro de téléphone 3=score 4=null 5=dans la liste des données obtenues à partir des résultats de l'évaluation, 1=null 2=null 3=anglais 4=Chinois 5 =Anglais 6=Chinois
C'est la fin de l'import de plusieurs en-têtes. Certaines personnes ne savent toujours pas comment les enregistrer dans la base de données, il faut donc y penser. Le plus stupide est de s'en souvenir. pour remplir les indices dans les entités. Dans cette catégorie, cette méthode n'est pas recommandée et est peu flexible ! La meilleure façon est d'utiliser une énumération pour faire correspondre le texte, puis de faire correspondre le champ, de remplir la classe d'entité ou d'écrire une méthode pour faire correspondre le texte avec le champ et convertir automatiquement la classe d'entité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer