[精讚] [會員登入]
27

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

你可能感興趣的文章

利用google apps script 將Google sheet 中兩個工作表中的資料對應 如何整理google測驗收回來的學生資料

[scratch2] 分數排名 在清單中隨机產生5名學生的考試分數, 再利用另一個清單排名 想法, 分數愈高者排名愈好, 例如名次是第5名, 那分數是最

2018 hoc 掃地機器人 掃地機器人只能打掃沒有障礙物(桌椅、牆壁)的範圍,請寫程式控制機器人打掃餐廳的所有走道, 並在清掃完畢後回到充電器。

[scratch2] 巢狀迴圈 有兩清單 一數字 一英文 想排出所以可能, 例如1a,1b,1c,2a,2b,2c...3c 利用巢狀迴圈 內圈累加的變

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

scratch3 計算得分排名 scratch3 得分排名

<<此文不開放留言>>

隨機好文

00-F2 的 IPV6 反解設定 近日, 強者我的大神同事, line 傳來一句: igogo 上次你那個ipv6的設定檔 再幫我跑一次 如連結 程式都寫

臺中市校務雲端系統與Windows AD帳號整合(1) active directory,ldaps,雲端校務系統

tc web 問與答 Q. 填報網址 A. https://tiny.cc/tc-web Q. 出現了以下畫面, 怎麼辦 A. 建議瀏覽器開無

台中市網路應用競賽試場安排(一) 排試場就跟排班或是排課表一樣, 找不到一個都能讓所有人滿意的結果

google sheet 限制使用者以點選的方式填答 google sheet 限制使用者以點選的方式填答