java--poi读取excel图片和内容(支持03,07版本)
生活随笔
收集整理的這篇文章主要介紹了
java--poi读取excel图片和内容(支持03,07版本)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我做的是導(dǎo)入學(xué)生信息包括每個(gè)學(xué)生對(duì)應(yīng)的證件照?qǐng)D片,所以此處不僅需要獲取excel中的圖片,還需要獲取圖片的位置信息,比如--哪行哪列的圖片對(duì)應(yīng)的是哪個(gè)學(xué)生,具體代碼如下:
public static void getDataFromExcel(String filePath) throws IOException{//String filePath = "E:\\123.xlsx";//判斷是否為excel類型文件if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx")){System.out.println("文件不是excel類型");}FileInputStream fis =null;Workbook wookbook = null;Sheet sheet =null;try{//獲取一個(gè)絕對(duì)地址的流fis = new FileInputStream(filePath);}catch(Exception e){e.printStackTrace();}try {//2003版本的excel,用.xls結(jié)尾wookbook = new HSSFWorkbook(fis);//得到工作簿} catch (Exception ex) {//ex.printStackTrace();try{//2007版本的excel,用.xlsx結(jié)尾fis = new FileInputStream(filePath);wookbook = new XSSFWorkbook(fis);//得到工作簿} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}Map<String, PictureData> maplist=null;sheet = wookbook.getSheetAt(0); // 判斷用07還是03的方法獲取圖片 if (filePath.endsWith(".xls")) { maplist = getPictures1((HSSFSheet) sheet); } else if(filePath.endsWith(".xlsx")){ maplist = getPictures2((XSSFSheet) sheet); } try {printImg(maplist);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //得到一個(gè)工作表//獲得表頭Row rowHead = sheet.getRow(0);//判斷表頭是否正確System.out.println(rowHead.getPhysicalNumberOfCells());if(rowHead.getPhysicalNumberOfCells() != 5){System.out.println("表頭的數(shù)量不對(duì)!");}//獲得數(shù)據(jù)的總行數(shù)int totalRowNum = sheet.getLastRowNum();//要獲得屬性int studentid=0;String studentname="";String grade="";String classes="";String pic="";//獲得所有數(shù)據(jù)for(int i = 1 ; i <= totalRowNum ; i++){//獲得第i行對(duì)象Row row = sheet.getRow(i);//獲得獲得第i行第0列的 String類型對(duì)象Cell cell = row.getCell((short)0);studentid = (int) cell.getNumericCellValue();//獲得一個(gè)數(shù)字類型的數(shù)據(jù)//studentname = (int) cell.getNumericCellValue();cell = row.getCell((short)1);studentname =cell.getStringCellValue().toString();cell = row.getCell((short)2);grade =cell.getStringCellValue().toString();cell = row.getCell((short)3);classes =cell.getStringCellValue().toString();cell = row.getCell((short)3);classes =cell.getStringCellValue().toString();System.out.println("學(xué)號(hào):"+studentid+",姓名:"+studentname+",年級(jí):"+grade+",班級(jí):"+classes+",證件照:"+pic);}for (Entry<String, PictureData> entry : maplist.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } }/*** 獲取圖片和位置 (xls)* @param sheet* @return* @throws IOException*/public static Map<String, PictureData> getPictures1 (HSSFSheet sheet) throws IOException {Map<String, PictureData> map = new HashMap<String, PictureData>();List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();for (HSSFShape shape : list) {if (shape instanceof HSSFPicture) {HSSFPicture picture = (HSSFPicture) shape;HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();PictureData pdata = picture.getPictureData();String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行號(hào)-列號(hào)map.put(key, pdata);}}return map;}/*** 獲取圖片和位置 (xlsx)* @param sheet* @return* @throws IOException*/public static Map<String, PictureData> getPictures2 (XSSFSheet sheet) throws IOException {Map<String, PictureData> map = new HashMap<String, PictureData>();List<POIXMLDocumentPart> list = sheet.getRelations();for (POIXMLDocumentPart part : list) {if (part instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) part;List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {XSSFPicture picture = (XSSFPicture) shape;XSSFClientAnchor anchor = picture.getPreferredSize();CTMarker marker = anchor.getFrom();String key = marker.getRow() + "-" + marker.getCol();map.put(key, picture.getPictureData());}}}return map;}//圖片寫出public static void printImg(Map<String, PictureData> sheetList) throws IOException { //for (Map<String, PictureData> map : sheetList) { Object key[] = sheetList.keySet().toArray(); for (int i = 0; i < sheetList.size(); i++) { // 獲取圖片流 PictureData pic = sheetList.get(key[i]); // 獲取圖片索引 String picName = key[i].toString(); // 獲取圖片格式 String ext = pic.suggestFileExtension(); byte[] data = pic.getData(); //圖片保存路徑 FileOutputStream out = new FileOutputStream("D:\\img\\pic" + picName + "." + ext); out.write(data); out.close(); } // } } public static void main(String[] args) throws Exception {getDataFromExcel("E:"+ File.separator +"學(xué)生信息表.xlsx");}效果如下:
總結(jié)
以上是生活随笔為你收集整理的java--poi读取excel图片和内容(支持03,07版本)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QA:综合布线工程二十问
- 下一篇: H5画布