[精讚] [會員登入]
205

xlsx 資料不固定欄位如何讀取並儲存

xlsx 資料不固定欄位如何讀取並儲存 類型1 序號,競賽項目,學校,參賽者,指導教師,帳號,密碼 類型2 (多了隊員)

分享此文連結 //n.sfs.tw/16505

分享連結 xlsx 資料不固定欄位如何讀取並儲存@igogo
(文章歡迎轉載,務必尊重版權註明連結來源)
2025-04-16 10:46:41 最後編修
2025-03-28 13:52:18 By igogo
 

xlsx 資料不固定欄位如何讀取

 

類型1 
序號,競賽項目,學校,參賽者,指導教師,帳號,密碼

簡報項目 (多了隊員)

序號,競賽項目,學校, 參賽者,隊員,指導教師,帳號,密碼

繪圖項目(多了繪圖軟體)

序號,競賽項目,學校,參賽者,指導教師,繪圖軟體,帳號,密碼

 

 

 

定義欄位:

競賽項目 contestitem

學校 schoolname

指導教師 instructor

參賽者 username

帳號 account

密碼 passwd

隊員 membername 

 

建立Model Team

public class Team {


    private String contestitem;
    private String schoolname;
    private String username;

    private String membername;
    private String instructor;

    private String account;
    private String passwd;

    private String location;

    private String description;
    private String comments;
}

 

 

 

做法

先讀第一列, 利用map 記錄每個欄位標題名稱

Map<String,Integer> header = new HashMap<>();

 

Map<String, Integer> header = new HashMap<>();

header.put("contestitem", 99);
header.put("username", 99);
header.put("instructor", 99);
header.put("schoolname", 99);
header.put("account", 99);
header.put("passwd",99);
header.put("membername",99);

 

每個欄位初始值為99, 如果讀進來的檔案有此欄位, 再設定為欄位值

while (cellIterator.hasNext()) {

    Cell cell = cellIterator.next();


    if (formatter.formatCellValue(cell).contains("競賽項目")) {
        header.replace("contestitem", cell.getColumnIndex());
    }
    if (formatter.formatCellValue(cell).contains("參賽者")) {
        header.replace("username", cell.getColumnIndex());
    }
    if (formatter.formatCellValue(cell).contains("指導教師")) {
        header.replace("instructor", cell.getColumnIndex());
    }
    if (formatter.formatCellValue(cell).contains("學校")) {
        header.replace("schoolname", cell.getColumnIndex());
    }
    if (formatter.formatCellValue(cell).contains("帳號")) {
        header.replace("account", cell.getColumnIndex());
    }
    if (formatter.formatCellValue(cell).contains("密碼")) {
        header.replace("passwd", cell.getColumnIndex());
    }

    if (formatter.formatCellValue(cell).contains("隊員")) {
        header.replace("membername", cell.getColumnIndex());
    }

}

 

取得index值後, 讀列

//取得每一列的每一欄index中的資料
while (rowIterator.hasNext()) {

    row = rowIterator.next();
    Team team = new Team();

    team.setContestitem(row.getCell(header.get("contestitem")).getStringCellValue());
    team.setSchoolname(row.getCell(header.get("schoolname")).getStringCellValue());
    team.setUsername(row.getCell(header.get("username")).getStringCellValue());
    team.setAccount(row.getCell(header.get("account")).getStringCellValue());
    team.setPasswd(row.getCell(header.get("passwd")).getStringCellValue());
    team.setInstructor(row.getCell(header.get("instructor")).getStringCellValue());
    team.setMembers(1);
    if (header.get("membername")<99) {

        team.setMembername(row.getCell(header.get("membername")).getStringCellValue());
        team.setMembers(2);

    }
    ObjectMapper mapper = new ObjectMapper();
    logger.info(mapper.writeValueAsString(team));

    teamList.add(team);
}

 

 

簡報項目雖然是兩人一組,  但可一人參賽, 隊員欄位可能沒有值

if (header.get("membername")<99) {

    team.setMembername(row.getCell(header.get("membername")).getStringCellValue());
    team.setMembers(2);

}

 


 

 

 

 

 

 

END

你可能感興趣的文章

[scratch] 將角色物件放到清單中,並依序讀出每個角色的X值 將角色物件放到清單中,並依序讀出每個角色的X值

scratch 不重覆隨機取陣列值 隨機取數是在設計遊戲時, 很常用到的技巧 最簡單的就是使用運算積木裡的隨機取數範圍 但是, 如果我是想全部取出且不重覆,

台中市校園空氣品質預警 aqi

xlsx 資料不固定欄位如何讀取並儲存 xlsx 資料不固定欄位如何讀取並儲存 類型1 序號,競賽項目,學校,參賽者,指導教師,帳號,密碼 類型2 (多了隊員)

2018 hoc 頒獎 校慶到了,啦啦隊比賽如火如荼展開,學務主任將頒發獎狀給表現優異的班級。請完成以下程式碼,讓程式將啦啦隊表演成績由高至低依序輸出。

spring boot 整合到 nginx 於subpath 將spring boot 位在docker中, 對外服務19090 程式佈署到nginx 伺服器的 subpath上 對

<<此文不開放留言>>

隨機好文

[vue.js] input event Form-Input-Components-using-Custom-Events

axios vuejs application/x-www-form-urlencoded 送資料 VUE.JS 以 application/x-www-form-urlencoded 送資料

臺中市雲端校務系統與Windows AD帳號整合(3) LDAP的基本概念

雲端校務系統與OPENLDAP帳號整合(1) 本文件目標是為做單一帳號整合, 使用校端更改密碼服務, 將雲端校務系統的帳密同步至校內LDAP server, 並讓SA

在docker裡跑spring boot+mongo(二) 使用docker-compose 管理多個container 前篇使用docker run 一次建一個container