EasyExcelアリオープンソースexcelインポートエクスポート
6026 ワード
一、なぜeasyexcelを使うのか
Java解析、Excel生成で有名なフレームワークはApache poi、jxlです.しかし、彼らには深刻な問題があります.非常にメモリを消費しています.poiにはSAXモードのAPIがあり、メモリオーバーフローの問題をある程度解決することができますが、POIにはいくつかの欠陥があります.例えば、07版Excelの解凍や解凍後のストレージはメモリの中で完成しており、メモリの消費は依然として大きいです.easyexcelはpoiの07版Excelに対する解析を書き換え、本来1つの3 Mのexcel用POI saxは依然として100 M程度のメモリをKBレベルに下げる必要があり、さらに大きなexcelではメモリオーバーフローは発生せず、03版ではPOIに依存するsaxモードである.上層部にモデル変換のパッケージを作り,利用者をより簡単に便利にした.
二、依存
三、簡単に使う
1.ExcelUtilツールクラスは、そのツールクラスを直接呼び出す方法でExcelの読み取りまたは書き込みを完了することができます.ExcelListenerリスニングクラスは、必要に応じて自分の状況に応じて、取得したデータをカスタマイズして処理することができます.ここでは簡単にリストにデータを追加するだけです.
3.ExcelWriterFactroy複数のsheetをエクスポートするためのExcelで、複数のsheetを複数のwriteメソッドで書き込む
4.ExcelException関連Exceptionの取得
Excelの読み込み
Excelを読み込むときはExcelUtilを呼び出すだけです.readExcel()メソッド
マッピングエンティティクラスとして、@ExcelProperty注記とindex変数を使用すると、メンバー変数にマッピングされた列を表示できます.setterメソッドは欠かせません.
Excel 1をエクスポートします.エクスポートされたExcelは1つのsheetしか持っていません.ExcelUtilを呼び出すだけです.writeExcelWithSheets()メソッド:
file Name、sheetNameはそれぞれエクスポートファイルのファイル名とsheet名、new ExportInfo()はエクスポートデータのマッピングエンティティオブジェクト、listはエクスポートデータです.
マッピングされたエンティティークラスについては、必要に応じて@ExcelProperty注釈でヘッダーをカスタマイズできます.もちろん、BaseRowModelクラスも継承する必要があります.たとえば、次のようにします.
valueはカラム名、indexはカラムのシーケンス番号
複雑な点が必要な場合は、次の図のような効果が得られます.
対応するエンティティ・クラスの書き方は次のとおりです.
2.エクスポートされたExcelは複数のsheet呼び出しExcelUtilを持つ.writeExcelWithSheets()は最初のsheetを処理し、その後write()メソッドを呼び出して順次処理した後のsheetを呼び出し、最後にfinish()メソッドを使用して終了する
writeメソッドのパラメータは、現在のsheetのlistデータ、現在のsheet名、および対応するマッピングクラスです.
注意:新しいバージョンでは、このExcelUtilというクラスは見られませんでしたが、ExcelReaderクラスとExcelWriterクラスがあります.性能が本当に向上したと言わざるを得ませんが、コードを書くのは簡単です.ここでメモを取って、みんなで勉強してみましょう.
Java解析、Excel生成で有名なフレームワークはApache poi、jxlです.しかし、彼らには深刻な問題があります.非常にメモリを消費しています.poiにはSAXモードのAPIがあり、メモリオーバーフローの問題をある程度解決することができますが、POIにはいくつかの欠陥があります.例えば、07版Excelの解凍や解凍後のストレージはメモリの中で完成しており、メモリの消費は依然として大きいです.easyexcelはpoiの07版Excelに対する解析を書き換え、本来1つの3 Mのexcel用POI saxは依然として100 M程度のメモリをKBレベルに下げる必要があり、さらに大きなexcelではメモリオーバーフローは発生せず、03版ではPOIに依存するsaxモードである.上層部にモデル変換のパッケージを作り,利用者をより簡単に便利にした.
二、依存
com.alibaba
easyexcel
{latestVersion}
三、簡単に使う
1.ExcelUtilツールクラスは、そのツールクラスを直接呼び出す方法でExcelの読み取りまたは書き込みを完了することができます.ExcelListenerリスニングクラスは、必要に応じて自分の状況に応じて、取得したデータをカスタマイズして処理することができます.ここでは簡単にリストにデータを追加するだけです.
public class ExcelListener extends AnalysisEventListener {
// data。
//
private List
3.ExcelWriterFactroy複数のsheetをエクスポートするためのExcelで、複数のsheetを複数のwriteメソッドで書き込む
4.ExcelException関連Exceptionの取得
Excelの読み込み
Excelを読み込むときはExcelUtilを呼び出すだけです.readExcel()メソッド
@RequestMapping(value = "readExcel", method = RequestMethod.POST)
public Object readExcel(MultipartFile excel) {
return ExcelUtil.readExcel(excel, new ImportInfo());
}
excel MultipartFile , new ImportInfo() Excel , BaseRowModel , :
public class ImportInfo extends BaseRowModel {
@ExcelProperty(index = 0)
private String name;
@ExcelProperty(index = 1)
private String age;
@ExcelProperty(index = 2)
private String email;
/*
excel , setter
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
マッピングエンティティクラスとして、@ExcelProperty注記とindex変数を使用すると、メンバー変数にマッピングされた列を表示できます.setterメソッドは欠かせません.
Excel 1をエクスポートします.エクスポートされたExcelは1つのsheetしか持っていません.ExcelUtilを呼び出すだけです.writeExcelWithSheets()メソッド:
@RequestMapping(value = "writeExcel", method = RequestMethod.GET)
public void writeExcel(HttpServletResponse response) throws IOException {
List list = getList();
String fileName = " Excel ";
String sheetName = " sheet";
ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo());
}
file Name、sheetNameはそれぞれエクスポートファイルのファイル名とsheet名、new ExportInfo()はエクスポートデータのマッピングエンティティオブジェクト、listはエクスポートデータです.
マッピングされたエンティティークラスについては、必要に応じて@ExcelProperty注釈でヘッダーをカスタマイズできます.もちろん、BaseRowModelクラスも継承する必要があります.たとえば、次のようにします.
public class ExportInfo extends BaseRowModel {
@ExcelProperty(value = " " ,index = 0)
private String name;
@ExcelProperty(value = " ",index = 1)
private String age;
@ExcelProperty(value = " ",index = 2)
private String email;
@ExcelProperty(value = " ",index = 3)
private String address;
}
valueはカラム名、indexはカラムのシーケンス番号
複雑な点が必要な場合は、次の図のような効果が得られます.
対応するエンティティ・クラスの書き方は次のとおりです.
public class MultiLineHeadExcelModel extends BaseRowModel {
@ExcelProperty(value = {" 1"," 1"," 31"},index = 0)
private String p1;
@ExcelProperty(value = {" 1"," 1"," 32"},index = 1)
private String p2;
@ExcelProperty(value = {" 3"," 3"," 3"},index = 2)
private int p3;
@ExcelProperty(value = {" 4"," 4"," 4"},index = 3)
private long p4;
@ExcelProperty(value = {" 5"," 51"," 52"},index = 4)
private String p5;
@ExcelProperty(value = {" 6"," 61"," 611"},index = 5)
private String p6;
@ExcelProperty(value = {" 6"," 61"," 612"},index = 6)
private String p7;
@ExcelProperty(value = {" 6"," 62"," 621"},index = 7)
private String p8;
@ExcelProperty(value = {" 6"," 62"," 622"},index = 8)
private String p9;
}
2.エクスポートされたExcelは複数のsheet呼び出しExcelUtilを持つ.writeExcelWithSheets()は最初のsheetを処理し、その後write()メソッドを呼び出して順次処理した後のsheetを呼び出し、最後にfinish()メソッドを使用して終了する
public void writeExcelWithSheets(HttpServletResponse response) throws IOException {
List list = getList();
String fileName = " Excel ";
String sheetName1 = " sheet";
String sheetName2 = " sheet";
String sheetName3 = " sheet";
ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo())
.write(list, sheetName2, new ExportInfo())
.write(list, sheetName3, new ExportInfo())
.finish();
}
writeメソッドのパラメータは、現在のsheetのlistデータ、現在のsheet名、および対応するマッピングクラスです.
注意:新しいバージョンでは、このExcelUtilというクラスは見られませんでしたが、ExcelReaderクラスとExcelWriterクラスがあります.性能が本当に向上したと言わざるを得ませんが、コードを書くのは簡単です.ここでメモを取って、みんなで勉強してみましょう.