java讀取Excel文件數(shù)據(jù)

java解析Excel(xls、xlsx兩種格式)

1泳桦、導(dǎo)入jar包

1.commons-collections4-4.1.jar
2.poi-3.17-beta1.jar
3.poi-ooxml-3.17-beta1.jar
4.poi-ooxml-schemas-3.17-beta1.jar
5.xmlbeans-2.6.0.jar

2屹堰、主要api

1.import org.apache.poi.ss.usermodel.Workbook,對應(yīng)Excel文檔铣鹏;
2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,對應(yīng)xls格式的Excel文檔晴楔;
3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,對應(yīng)xlsx格式的Excel文檔峭咒;
4.import org.apache.poi.ss.usermodel.Sheet税弃,對應(yīng)Excel文檔中的一個sheet;
5.import org.apache.poi.ss.usermodel.Row凑队,對應(yīng)一個sheet中的一行则果;
6.import org.apache.poi.ss.usermodel.Cell,對應(yīng)一個單元格漩氨。

3西壮、代碼



import cn.ssms.model.vo.GameBookVo;
import cn.ssms.model.vo.MusicVo;
import cn.ssms.model.vo.VideoVo;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author 作者:李澤慶 郝志宏
 * @version 創(chuàng)建時間:2021/7/8 17:16
 * @email 郵箱:lzq905866484@163.com
 * @description 描述:
 */
public class ExcelUtils {

    public static final String FILE_PATH = "E:\\sinosoft\\海警\\娛樂上傳規(guī)則(2).xlsx";
    //讀取excel
    public static Workbook readExcel(String filePath){
        Workbook wb = null;
        if(filePath==null){
            return null;
        }
        String extString = filePath.substring(filePath.lastIndexOf("."));
        InputStream is = null;
        try {
            is = new FileInputStream(filePath);
            if(".xls".equals(extString)){
                return wb = new XSSFWorkbook(is);
            }else if(".xlsx".equals(extString)){
                return wb = new XSSFWorkbook(is);
            }else{
                return wb = null;
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return wb;
    }

    public static Object getCellFormatValue(Cell cell){
        Object cellValue = null;
        if(cell!=null){
            //判斷cell類型
            switch(cell.getCellType()){
                case Cell.CELL_TYPE_NUMERIC:{
                    cellValue = String.valueOf((int)cell.getNumericCellValue());
                    break;
                }
                case Cell.CELL_TYPE_FORMULA:{
                    //判斷cell是否為日期格式
                    if(DateUtil.isCellDateFormatted(cell)){
                        //轉(zhuǎn)換為日期格式Y(jié)YYY-mm-dd
                        cellValue = cell.getDateCellValue();
                    }else{
                        //數(shù)字
                        cellValue = String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                }
                case Cell.CELL_TYPE_STRING:{
                    cellValue = cell.getRichStringCellValue().getString();
                    break;
                }
                default:
                    cellValue = "";
            }
        }else{
            cellValue = "";
        }
        return cellValue;
    }

    public static List<GameBookVo> getGameFormExcel(){
        List<GameBookVo> gameVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH,  GameBookVo.class, 3);
        for (Object object : objects) {
            gameVos.add((GameBookVo)object);
        }
        return gameVos;
    }

    public static List<GameBookVo> getBookFormExcel(){
        List<GameBookVo> bookVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH,  GameBookVo.class, 2);
        for (Object object : objects) {
            bookVos.add((GameBookVo)object);
        }
        return bookVos;
    }


    public static List<MusicVo> getMusicFormExcel(){
        List<MusicVo> bookVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH, MusicVo.class, 1);
        for (Object object : objects) {
            bookVos.add((MusicVo)object);
        }
        return bookVos;
    }

    public static List<VideoVo> getVideoFormExcel(){
        List<VideoVo> videoVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH, VideoVo.class, 0);
        for (Object object : objects) {
            videoVos.add((VideoVo)object);
        }
        return videoVos;
    }

    /**
     *
     * @param filePath 文件路徑
     * @param cla 接受類
     * @param SheetNum 表
     * @return
     */
    public static List<Object> readInfo(String filePath,  Class cla, Integer SheetNum){
        Workbook wb =null;
        Sheet sheet = null;
        Row row = null;
        List<Object> list = null;
        String[] columns;
        String cellData = null;
        try{
            wb = readExcel(filePath);
            if(wb != null){
                //用來存放表中數(shù)據(jù)
                list = new ArrayList<>();
                //獲取第一個sheet
                sheet = wb.getSheetAt(SheetNum);
                //獲取最大行數(shù)
                int rownum = sheet.getPhysicalNumberOfRows();
                System.out.println("最大行數(shù):"+rownum);
                //獲取第一行
                row = sheet.getRow(0);
                //獲取最大列數(shù)
                int colnum = row.getPhysicalNumberOfCells();
                columns = loadResourcesVo(row, colnum);
                System.out.println("最大列數(shù):"+colnum);
                for (int i = 1; i<rownum; i++) {
                    //獲取當(dāng)前行
                    row = sheet.getRow(i);
                    if(row !=null){
                        //反射創(chuàng)建當(dāng)前Class實例
                        Object o = cla.newInstance();
                        for (int j = 0; j < columns.length; j++) {
                            String metName = columns[j];
                            metName = "set"+metName.substring(0,1).toUpperCase()+metName.substring(1);
                            //獲取當(dāng)前對象下的方法集合
                            Method[] methods = cla.getMethods();
                            for (Method method : methods) {
                                //判斷方法名
                                if(method.getName().equals(metName)){
                                    //獲取當(dāng)前方法參數(shù)類型集合
                                    Class<?>[] parameterTypes = method.getParameterTypes();
                                    //取第一個參數(shù)類型
                                    Class<?> type = parameterTypes[0];
                                    //判斷參數(shù)類型
                                    if(type.getSimpleName().equals("Integer")){
                                        Method m = cla.getMethod(metName, Integer.class);
                                        String str = (String) getCellFormatValue(row.getCell(j));
                                        m.invoke(o,Integer.parseInt(StringUtils.isEmpty(str)?"0":str));
                                    }else if(type.getSimpleName().equals("Double") ){
                                        Method m = cla.getMethod(metName, Double.class);
                                        String str = (String) getCellFormatValue(row.getCell(j));
                                        m.invoke(o, Double.parseDouble(StringUtils.isEmpty(str)?"0.0":str));
                                    }else{
                                        method.invoke(o,getCellFormatValue(row.getCell(j)));
                                    }

                                }
                            }
                        }
                        list.add(o);

                    }else{
                        break;
                    }
                }
            }

        }catch (Exception e){
            e.printStackTrace();
        }
                //遍歷解析出來的list
                return list;
        }


    public static String[] loadResourcesVo(Row row,Integer column) {
        String[] cloumns = new String[column];
        for (int i = 0; i < column; i++) {
            String temp = (String) getCellFormatValue(row.getCell(i));
            if(temp.equals("電影名字") || temp.equals("歌名") || temp.equals("書名") || temp.equals("游戲名字")){
                cloumns[i] = "name";
            }
            if(temp.equals("導(dǎo)演") || temp.equals("歌手") || temp.equals("作者")){
                cloumns[i] = "author";
            }
            if(temp.equals("類別(電影、電視叫惊、綜藝)") || temp.equals("分類")){
                cloumns[i] = "categoryStr";
            }
            if(temp.equals("語種")){
                cloumns[i] = "lan";
            }
            if(temp.equals("集數(shù)")){
                cloumns[i] = "sets";
            }
            if(temp.equals("年份")){
                cloumns[i] = "videoYear";
            }
            if(temp.equals("演員")){
                cloumns[i] = "actor";
            }
            if(temp.equals("介紹")){
                cloumns[i] = "introduction";
            }
            if(temp.equals("圖片路徑")){
                cloumns[i] = "image";
            }
            if(temp.equals("評分")){
                cloumns[i] = "score";
            }
            if(temp.equals("資源路徑")){
                cloumns[i] = "url";
            }

            if(temp.equals("編號")){
                cloumns[i] = "index";
            }


        }
        return cloumns;
    }


    //寫入excel
    public static void writeExcel(){
        // 創(chuàng)建工作薄 xlsx
        XSSFWorkbook  xssWorkbook = new XSSFWorkbook();
        // 創(chuàng)建工作表
        XSSFSheet sheet = xssWorkbook.createSheet("sheet1");

        for (int row = 0; row < 10; row++)
        {
            XSSFRow rows = sheet.createRow(row);
            for (int col = 0; col < 10; col++)
            {
                // 向工作表中添加數(shù)據(jù)
                rows.createCell(col).setCellValue("data" + row + col);
            }
        }
//
        File xlsFile = new File("poi.xlsx");
        FileOutputStream xlsStream = null;
        try {
            xlsStream = new FileOutputStream(xlsFile);
            xssWorkbook.write(xlsStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static void main(String[] args) throws Exception, IllegalAccessException, InstantiationException {
        List<GameBookVo> gameFormExcel = getGameFormExcel();
        System.out.println(gameFormExcel);
        List<GameBookVo> bookFormExcel = getBookFormExcel();
        System.out.println(bookFormExcel);
        List<MusicVo> musicFormExcel = getMusicFormExcel();
        System.out.println(musicFormExcel);
        List<VideoVo> videoFormExcel = getVideoFormExcel();
        System.out.println(videoFormExcel);


    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末款青,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子霍狰,更是在濱河造成了極大的恐慌抡草,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚓耽,死亡現(xiàn)場離奇詭異渠牲,居然都是意外死亡,警方通過查閱死者的電腦和手機步悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門签杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鼎兽,你說我怎么就攤上這事答姥⊙鳎” “怎么了捺宗?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝗蛙。 經(jīng)常有香客問我择卦,道長敲长,這世上最難降的妖魔是什么郎嫁? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮祈噪,結(jié)果婚禮上泽铛,老公的妹妹穿的比我還像新娘。我一直安慰自己辑鲤,他們只是感情好盔腔,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著月褥,像睡著了一般弛随。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宁赤,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天舀透,我揣著相機與錄音,去河邊找鬼礁击。 笑死盐杂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哆窿。 我是一名探鬼主播链烈,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挚躯!你這毒婦竟也來了强衡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤码荔,失蹤者是張志新(化名)和其女友劉穎漩勤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缩搅,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡越败,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硼瓣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片究飞。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堂鲤,靈堂內(nèi)的尸體忽然破棺而出亿傅,到底是詐尸還是另有隱情,我是刑警寧澤瘟栖,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布葵擎,位于F島的核電站,受9級特大地震影響半哟,放射性物質(zhì)發(fā)生泄漏酬滤。R本人自食惡果不足惜签餐,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敏晤。 院中可真熱鬧贱田,春花似錦、人聲如沸嘴脾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽译打。三九已至,卻和暖如春拇颅,著一層夾襖步出監(jiān)牢的瞬間奏司,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工樟插, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留韵洋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓黄锤,卻偏偏與公主長得像搪缨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸵熟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354