ホームページ >Java >&#&チュートリアル >Java easyExcel でマルチレベルヘッダーをインポートする方法
easyExcel がヘッダーを取得する方法を理解し、ナンセンスなことを言わずにコードを直接貼り付けます
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) { } }
このコードは、easyExcel が Excel を読み取るときにヘッダーをインターセプトするために使用されます。 table
自分でクラスを作成して AnalysisEventListener を継承し、その invokeHeadMap メソッドを書き換えて Excel の第 1 レベルのヘッダーを取得します。
//加载拦截器 作用于 获取表头 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();
これで、データとテーブル ヘッダーが完成しました。興味がある人もいるでしょう。あなたは第 1 レベルのヘッダーしか取得できていないのに、第 2 レベルのヘッダーはどうなるのでしょうか?心配しないで、ゆっくり聞いてください。
上記のコードブロック、2行目でExcelデータを取得します このデータは、第1階層のヘッダーを削除した後のデータです これに関しては、分かる人もいるかもしれませんが、まだ分からない人もいます理解できません。OK 続けましょう。コードの 3 行目は、インターセプターによってインターセプトされたテーブル ヘッダーのコレクションです。map によって受信されたマップのキーが整数型であることがわかります。偶然にも、データ リストには次の内容も含まれていますマップとマップ たまたまキーが整数型だったので、論理の得意な学生ならこのとき、この整数がランダムに書き込まれてソートされているのではなく、ヘッダーの位置がデータに対応していると思ったはずです。では、今回は簡単です、多段ヘッダーの開始位置を見つけるだけですので、下の写真を載せて回答します。
結果が複数レベルのヘッダーにマージされたことを確認してください。この時点で、取得したヘッダー セットでは、1 が名前に対応し、2 が電話番号に対応します。 , 3がスコアに相当 取得したデータのリストをlist.get(0)に記述する; 取得したデータは2次ヘッダのデータとなる このとき、別のマップを取得する 対応関係は 1=null 2 =null 3=英語 4=言語。このとき、誰かが私にもう一度尋ねました。「後でマルチレベルのヘッダーがある場合はどうすればよいですか?」ステッカー。
今回取得したヘッダーデータでは、評価結果から取得したリストデータの 1=名前 2=電話番号 3=スコア 4=null 5=となっており、 1=null 2=null 3=英語 4=中国語 5=英語 6=中国語
これで複数のヘッダーのインポートは終了します。データベースに保存する方法がまだわからない人もいるでしょう。最も愚かな方法は、エンティティ クラスに添字を忘れずに入力することです。この方法はお勧めできず、柔軟性に欠けます。最善の方法は、列挙を使用してテキストを照合し、次にフィールドを照合するか、エンティティ クラスに入力するか、テキストとフィールドを照合してエンティティ クラスを自動的に変換するメソッドを作成することです。
以上がJava easyExcel でマルチレベルヘッダーをインポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。