java 提取excel文件中的數據


1.首先文件轉為字節型數組

byte[] bytes = multipartFile.getBytes();

2.

字節數組輸入流在內存中創建一個字節數組緩沖區,從輸入流讀取的數據保存在該字節數組緩沖區中。創建字節數組輸入流對象有以下幾種方式。

接收字節數組作為參數創建:

ByteArrayInputStream bis = new ByteArrayInputStream(bytes);

3.使用的是JAVA POI實現的導出Excel;

POI 提供了對2003版本的Excel的支持 ---- HSSFWorkbook

POI 提供了對2007版本以及更高版本的支持 ---- XSSFWorkbook

定義工作簿

workbook = new XSSFWorkbook(inputStream);

定義工作表

 

// 默認取第一個子表
xssfSheet = xssfWorkbook.getSheetAt(0);

4.取標題
//定義行
        //默認第一行為標題行,index = 0
        XSSFRow titleRow = xssfSheet.getRow(0);
5.循環取數據
//循環取每行的數據
        for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {
            XSSFRow xssfRow = xssfSheet.getRow(rowIndex);
            if (xssfRow == null) {
                continue;
            }

            Map<String, String> map = new LinkedHashMap<String, String>();
            //循環取每個單元格(cell)的數據
            for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {
                XSSFCell titleCell = titleRow.getCell(cellIndex);
                XSSFCell xssfCell = xssfRow.getCell(cellIndex);
                map.put(getString(titleCell),getString(xssfCell));
            }
            list.add(map);
        }

getLastRowNum  

    如果sheet中一行數據都沒有則返回-1,只有第一行有數據則返回0,最后有數據的行是第n行則返回 n-1;

getPhysicalNumberOfRows  

    獲取有記錄的行數,即:最后有數據的行是第n行,前面有m行是空行沒數據,則返回n-m;

6.不同類型的單元格分別取不同的數據。

/**
     * 把單元格的內容轉為字符串
     * @param xssfCell 單元格
     * @return 字符串
     */
    public static String getString(XSSFCell xssfCell) {
        if (xssfCell == null) {
            return "";
        }
        if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {
            return String.valueOf(xssfCell.getNumericCellValue());
        } else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {
            return String.valueOf(xssfCell.getBooleanCellValue());
        } else {
            return xssfCell.getStringCellValue();
        }
    }
7.寫入
/**
     * 把內容寫入Excel
     * @param list 傳入要寫的內容,此處以一個List內容為例,先把要寫的內容放到一個list中
     * @param outputStream 把輸出流懟到要寫入的Excel上,准備往里面寫數據
     */
    public static void writeExcel(List<List> list, OutputStream outputStream) {
        //創建工作簿
        XSSFWorkbook xssfWorkbook = null;
        xssfWorkbook = new XSSFWorkbook();

        //創建工作表
        XSSFSheet xssfSheet;
        xssfSheet = xssfWorkbook.createSheet();

        //創建行
        XSSFRow xssfRow;

        //創建列,即單元格Cell
        XSSFCell xssfCell;

        //把List里面的數據寫到excel中
        for (int i=0;i<list.size();i++) {
            //從第一行開始寫入
            xssfRow = xssfSheet.createRow(i);
            //創建每個單元格Cell,即列的數據
            List sub_list =list.get(i);
            for (int j=0;j<sub_list.size();j++) {
                xssfCell = xssfRow.createCell(j); //創建單元格
                xssfCell.setCellValue((String)sub_list.get(j)); //設置單元格內容
            }
        }

        //用輸出流寫到excel
        try {
            xssfWorkbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        }catch (IOException e) {
            e.printStackTrace();
        }

    }
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM