Java實現讀取excel中的數據及圖片


一、背景

需要完成excel數據的讀取與落庫

二、實現

Java讀取excel數據:指定某一行,讀取整列的數據

   /*
 如果是xls格式,使用HSSFWorkbook,HSSFSheet,HSSFRow來進行相關操作
 如果是xlsx格式,使用XSSFWorkbook,XSSFSheet,XSSFRow來進行相關操作,目前只支持xlsx
 */
    public static HashMap readExcelData(String filename, Integer row, Integer column,Integer sheet) throws IOException {
        //用於存儲Exce讀取數據
        HashMap<Integer,String> hashMap=new HashMap();
        log.info("開始讀取excel數據");
        //讀取excel數據
        File file = ResourceUtils.getFile(filename);
        InputStream inputStream = new FileInputStream(file);
        XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);

        //獲取sheet表格,及讀取單元格內容
        XSSFSheet xssfSheet=xssfWorkbook.getSheetAt(sheet);

        //先將獲取的單元格設置為String類型,下面使用getStringCellValue獲取單元格內容
        Integer cellIndex = 0;
        while(cellIndex<=column){

            //第一列為空時直接,賦值為空
            if (xssfSheet.getRow(row)==null || xssfSheet.getRow(row).getCell(cellIndex)==null){
                hashMap.put(cellIndex,"");
                cellIndex++;
                continue;
            }

            xssfSheet.getRow(row).getCell(cellIndex).setCellType(CellType.STRING);
            String stringValue=xssfSheet.getRow(row).getCell(cellIndex).getStringCellValue();

            hashMap.put(cellIndex,stringValue);
            cellIndex++;
        }
        log.info("readExcelData:{}",hashMap.toString());
        return hashMap;
    }

Java讀取excel圖片:獲取整個excel的圖片,可以按照指定的行和列來定位讀取圖片

    /**
     * 獲取Excel中的圖片
     * @param xssfSheet
     * @return
     */
    public static Map<String, XSSFPictureData> getPictures(XSSFSheet xssfSheet){

        Map<String,XSSFPictureData> map=new HashMap<>();
        List<XSSFShape> list=xssfSheet.getDrawingPatriarch().getShapes();

        for (XSSFShape shape:list){

            XSSFPicture picture = (XSSFPicture) shape;
            XSSFClientAnchor xssfClientAnchor=(XSSFClientAnchor) picture.getAnchor();
            XSSFPictureData pdata = picture.getPictureData();
            // 行號-列號
            String key = xssfClientAnchor.getRow1() + "-" + xssfClientAnchor.getCol1();
            log.info("key數據:{}",key);
            map.put(key, pdata);

        }

        return map;
    }

實際調用測試

   @Test
    public void test() throws IOException, UnirestException {
        String filename="classpath:file/org.xlsx";

        File file = ResourceUtils.getFile(filename);
        InputStream inputStream = new FileInputStream(file);
        XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);
        Map<String, XSSFPictureData> map=getPictures(xssfWorkbook.getSheetAt(0));
        String mapKey="3-15";//指定行和列
        XSSFPictureData xssfPictureData= map.get(mapKey);
        byte[] data =xssfPictureData.getData();
        FileOutputStream out = new FileOutputStream("/Users/test12.png");
        out.write(data);
        out.close();
   }
}

 jar包版本

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

 


免責聲明!

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



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