目錄
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博客
