[精讚] [會員登入]
612

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

你可能感興趣的文章

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

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

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

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

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

hoc2018灑水機器人 灑水機器人的工作是替行道樹灑水,機器人的灑水範圍有限(左前方、左方、左後方),請寫程式控制機器 人判斷須灑水的狀況。每顆

<<此文不開放留言>>

隨機好文

tmux 將終端機切割成多個視 窗 tmux, multiple terminal

vue.js components 多個組件的呈現 vue.js 組件 component

[vue.js] 設定 content type 今天在wickt 端怎麼就是收不到vue.js 以post 傳過來的資料 找了好久才發現 application/jso

java.time 時間 instant java.time

找尋多個文件夾中最新檔案(jpg,png,txt)並複製到nexus資料夾 找尋多個文件夾中最新檔案(jpg,png,txt)並複製到集中資料夾