easypoi基本使用


目錄

1 easypoi相關注解

2 easypoi的導出

2 easypoi的導入

1 easypoi相關注解
@Excel 作用到field上,是對Excel一列的一個描述

@ExcelCollection 表示一個集合,主要針對一對多的導出

@ExcelEntity 表示一個繼續深入導出的實體,但沒太多實際意義,只是告訴系統這個對象里面有通樣導出的字段

@ExcelIgnore 和名字一樣表示這個字段被忽略導出過程

@EcxelTarget 這個是作用於最外層的對象,描述這個對象的id,支持這個對象可以針對不同的導出做出不同處理

@Excel注解相關屬性 :

用在field屬性上面,是對於excel的一個描述

name:[String]生成excel表中的列名

needMerge: [boolean]是否需要縱向合並單元格

orderNum:[String]用於指定Excel列中的順序

savepath:【String】指定導出excel中圖片的保存路徑

type: 【String】導出類型 1文本 2圖片 3函數 4數字 ,默認是文本

width: 【Double】指定導出excel列的寬度

isImportField:【boolean】 是否是導入的字段,如果沒有說明是錯誤的excel

exportFormat:【String】導出excel的時間格式

importFormat:【String】導入excel的時間格式

format:【String】 相當於同時設置了exportFormat和importFormat

imageType:【int】導出類型 1從filed讀取 2是從數據庫中讀取 默認是文件

suffix:【String】文字后綴,如%98變為98%

2 easypoi的導出
模擬將一個集合對象到處到excel表格中

User類:


@ExcelTarget("users")
public class User implements Serializable {
@Excel(name = "編號")
private Integer id;
@Excel(name = "姓名")
private String name;
@Excel(name = "年齡",suffix = "*") //在列的后面加上"*"
private Integer age;
@Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
private Date bir;
@Excel(name = "狀態",replace = {"未刪除_1","刪除_0"}) //用"未刪除替換1"
private String status;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Date getBir() {
return bir;
}

public void setBir(Date bir) {
this.bir = bir;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}
}
測試類:

/**
* 模擬數據庫中的數據
* @return
*/
public List<User> getUsers(){
List<User> users = new ArrayList<>();
for (int i = 0; i < 5; i++) {
User user = new User();
user.setId(i);
user.setName("小王"+i);
user.setAge(i);
user.setBir(new Date());
if(i%2 == 0){
user.setStatus("1");
}else {
user.setStatus("0");
}
users.add(user);
}
return users;
}

@Test
public void testExport() throws Exception{
//獲取數據
List<User> users = getUsers();
//導出excel
//參數1:ExportParams導出配置對象 參數2:導出的類型 參數3:導出的數據集合
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用戶信息列表", "用戶信息"), User.class, users);
//將excel寫入指定位置
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\LiuBuJun\\Desktop\\預約信息表格\\aa.xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
}
測試結果:

 

注意:

 

2 easypoi的導入
我們將我們剛剛導出的數據再次導入讓其輸出:

實體類:

@ExcelTarget("emps")
public class Emp {

@Excel(name = "編號")
private Integer id;
@Excel(name = "姓名")
private String name;
@Excel(name = "年齡",suffix = "*") //在列的后面加上"*"
private Integer age;
@Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
private Date bir;
@Excel(name = "狀態",replace = {"未刪除_1","刪除_0"}) //用"未刪除替換1"
private String status;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Date getBir() {
return bir;
}

public void setBir(Date bir) {
this.bir = bir;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", bir=" + bir +
", status='" + status + '\'' +
'}';
}
}
測試類:

@Test
public void testImport() throws Exception{
ImportParams params = new ImportParams();
params.setTitleRows(1);//標題占幾行 告訴熊哪行開始讀取
params.setHeadRows(1);//header占幾行
//params.setStartSheetIndex(2);從第一個sheet開始讀物,默認是1
List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\預約信息表格\\aa.xls"), Emp.class, params);
emps.forEach(System.out::println);
}
測試結果:

 

由此可見easypoi相比apach的poi而言還是較為方便的。包含了許多功能,有時間再繼續驗。

另外在說一下最近遇到的小問題,就是可能公司與第三方合作的時候,他們會發送表格數據來讓我們排查問題,這個時候我們得根據excel表格中的某一列中的數據數據去我們數據庫中做一個in查詢,但是當表格中的數據量太大時,我們將列中國的數據一個粘貼復制太費事費力。

換句話說就是將表格中元素用單引號引起來並且用逗號隔開、

代碼如下:

@Test
public void testImport() throws Exception{
ImportParams params = new ImportParams();
params.setTitleRows(1);//標題占幾行 告訴熊哪行開始讀取
params.setHeadRows(1);//header占幾行
//params.setStartSheetIndex(2);從第一個sheet開始讀物,默認是1
List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\預約信息表格\\aa.xls"), Emp.class, params);
StringBuffer buffer = new StringBuffer();
String collect = emps.stream().map(emp -> "\'" + emp.getAge() + "\'").collect(Collectors.joining(","));
System.out.println(collect);
}
測試結果:

 

着樣的話我們就不用一個個粘貼復制excel表格中的數據了。有關poi使用鏈接:poi導入/導出_set sail_2021的博客-CSDN博客

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM