求幫忙,如何用POI同時從EXCEL內讀取圖片和內嵌EXCEL呢,兩個單獨都可實現!

问题描述

求好人幫忙,如何同時從EXCEL內讀取圖片和內嵌EXCEL呢,兩個單獨都可實現!代碼如下:importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavassist.bytecode.Descriptor.Iterator;importorg.apache.poi.hslf.usermodel.SlideShow;importorg.apache.poi.hssf.usermodel.HSSFClientAnchor;importorg.apache.poi.hssf.usermodel.HSSFObjectData;importorg.apache.poi.hssf.usermodel.HSSFPicture;importorg.apache.poi.hssf.usermodel.HSSFPictureData;importorg.apache.poi.hssf.usermodel.HSSFShape;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.hwpf.HWPFDocument;importorg.apache.poi.poifs.filesystem.DirectoryNode;importorg.apache.poi.poifs.filesystem.POIFSFileSystem;publicclassD{publicstaticvoidmain(String[]args)throwsException{POIFSFileSystemfs=newPOIFSFileSystem(newFileInputStream("E:/images/excel_with_embeded_old.xls"));HSSFWorkbookworkbook=newHSSFWorkbook(fs);inti=0;for(HSSFObjectDataobj:workbook.getAllEmbeddedObjects()){//theOLE2ClassNameoftheobjectStringoleName=obj.getOLE2ClassName();if(oleName.equals("工作表")){DirectoryNodedn=(DirectoryNode)obj.getDirectory();HSSFWorkbookembeddedWorkbook=newHSSFWorkbook(dn,fs,false);FileOutputStreamfileOut=newFileOutputStream("E:/images/embd"+i+".xls");i++;embeddedWorkbook.write(fileOut);fileOut.close();}}try{List<HSSFPictureData>pictures=workbook.getAllPictures();//假設讀取的Excel工作薄中的第一張表HSSFSheetsheet=workbook.getSheetAt(0);Map<Integer,HSSFPictureData>map=newHashMap<Integer,HSSFPictureData>();for(HSSFShapeshape:sheet.getDrawingPatriarch().getChildren()){HSSFClientAnchoranchor=(HSSFClientAnchor)shape.getAnchor();introwIndex=anchor.getRow1();if(shapeinstanceofHSSFPicture){introwmark=rowIndex;HSSFPicturepicture=(HSSFPicture)shape;intpictureIndex=picture.getPictureIndex()-1;HSSFPictureDatapictureData=pictures.get(pictureIndex);map.put(rowmark,pictureData);}}System.out.println(map.size());HSSFPictureDatapictureData=map.get(2);//獲取包含圖片格式的文件字符串Stringext=pictureData.suggestFileExtension();System.out.println(ext);//代表圖片信息的字節數據byte[]data=pictureData.getData();//根據圖片格式將圖片寫出到磁盤if(ext.equals("jpeg")){FileOutputStreamout=newFileOutputStream("E:/images/a.jpg");out.write(data);out.close();}if(ext.equals("png")){FileOutputStreamout=newFileOutputStream("E:/images/a.png");out.write(data);out.close();}}catch(Exceptione){e.printStackTrace();}}}

解决方案

解决方案二:
不能对同一个Excel文件既做读的操作,又做写的操作。楼主只能生成一份临时Excel,先把图片取出来写入到临时Excel中。然后再从临时Excel中取图片写入到原来的Excel
解决方案三:
十分感谢dring321的回复。可能我对问题的描述不精准。我仅仅是从文档读出内容并保存,其内容包括图片和内嵌的对象EXCEL。读图片时需要通过POI函数workbook.getAllPictures()来获取,如果EXCEL内只有图片用这个函数是没问题。但只有内嵌EXCEL对象这个函数就不好使了,它会将内嵌对象也当作图片,而且各个图片位置也会搞错!如果文档内没有图片,用函数workbook.getAllEmbeddedObjects()获取内嵌对象也没问题。还有一个疑问如下:oleName=obj.getOLE2ClassName();oleName有时等于“工作表”,有时等于“worksheet”不知和那个设置有关系?还请指教
解决方案四:
抱歉,因为本人没有使用过poi,所有无法给出正确答案。建议:如果遇到楼主的这种问题,我一般会去查找poi的api。(有则有,无则五,毕竟是第三方的包,未必能满足所有的要求)
解决方案五:
看過POI的API,其中導入內嵌對象部分寫的很簡單,但我已實現了。就是不能同時導入圖片和內嵌對象,坐等高手賜教!
解决方案六:
坐等高手賜教!!

时间: 2024-07-29 09:44:43

求幫忙,如何用POI同時從EXCEL內讀取圖片和內嵌EXCEL呢,兩個單獨都可實現!的相关文章

誰能幫忙寫個計時器啊

问题描述 誰能幫忙寫個計時器啊...從00:00:00開始可以運行到99:59:59秒的那種..謝謝了 解决方案 解决方案二:winform的吗?放个文本框,再放个按钮,放个timer,是这个意思吗?解决方案三:加一个成员变量time(DateTime类型);放个Timer,把延迟设置为1000,Enabled设置为True,在Tick事件中写time.AddSeconds(1);lable1.Text=time.ToShortTimeString();复位按钮中time=0;解决方案四:我想是

ASP.NET報表的問題,大家幫忙看下~~~

问题描述 TeeChart.dll加載了這個控件,顯示圖表運行的時候爲什麽顯示的是一個紅色叉叉~~~如何使用這個控件連接數據大家幫忙看下十分感謝~~~ 解决方案 解决方案二: 没连接数据源,显示个毛啊解决方案三: 你不是連數據源都不懂吧解决方案四: 该回复于2012-04-13 14:44:50被版主删除解决方案五: 该回复于2012-04-13 14:44:23被版主删除解决方案六: 連接了就是運行的時候顯示的叉解决方案七: 该回复于2012-04-13 16:47:12被版主删除

asp.net網站發布的問題,請好心的大哥們幫忙看看.

问题描述 我用的是WinXP+IIS5.1做的一個asp.net程序,在其中有一個上傳文件的功能頁面.現在的問題是:在這個頁面中的一個DataGrid中,主要列出上傳后的文件列表,使用者點擊上傳文件名字(我做了鏈接)時,可以打開這個文件,如常見的.doc或Excel文件,其它的.zip文件則會提示是否下載.但是問題是,在點擊一個文件名的鏈接時,它會提示彈出windows驗證窗口,我查過有關IIS設置的相關資料,我在IIS中的文目錄和網站文件目錄的安全性設置了匿名訪問用戶為:IUSR_(我的機器名

cairngorm-flex Cairngorm ViewHelper 報錯,請高手幫忙

问题描述 flex Cairngorm ViewHelper 報錯,請高手幫忙 一使用ViewHelper就報錯了 TypeError: Error #1006: getResourceBundle is not a function. at com.adobe.cairngorm::CairngormError$cinit() at global$init()[C:devswatprojectsac_emeaCairngormcomadobecairngormCairngormError.as

請大家幫忙推薦一些EXTJS的IDE工具?

问题描述 請大家幫忙推薦一些EXTJS的IDE或JS工具?1st JavaScript Editor可以加入EXTJS代碼提示功能嗎?问题补充:有無WIN32的IDE,這兩個都需要JRE運行支持,而且很占內存哦.謝謝大家推薦! 解决方案 spket.代码提示比较强,google一下吧.解决方案二:aptana 功能非常强大http://www.aptana.com

button-大神們 幫忙看下這個數組越界異常...

问题描述 大神們 幫忙看下這個數組越界異常... public class Example implements EntryPoint { AbsolutePanel absolutePanel =new AbsolutePanel(); Button reset = new Button("Reset"); Button[][] buttons = new Button[20][20]; Grid grid = new Grid(); public Example(){ absolu

picturebox-影像處理C#程式碼相關問題請大大幫忙修正哪裡錯誤

问题描述 影像處理C#程式碼相關問題請大大幫忙修正哪裡錯誤 公式如圖片程式碼如下: 我已經先把 pictureBox2.Image是IL ==>也是放大後影像 pictureBox3.Image是Iold ==>濾波後的影像 height = this.pictureBox2.Image.Height; width = this.pictureBox2.Image.Width; Bitmap bitmap1 = new Bitmap(pictureBox2.Image); Bitmap bit

jsp-如何用POI的方式,通过JSP的按钮导出EXCEL。

问题描述 如何用POI的方式,通过JSP的按钮导出EXCEL. 导出的EXCEL是要从数据库中获取到的数据,最好有个事例,可以让我改一下查询数据库的SQL就可以了. 解决方案 http://blog.csdn.net/shangyu79/article/details/2682541http://my.oschina.net/ruibo/blog/207975http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 解决方案

checkbox- 大人阿幫幫忙 PackageManger ListView与CheckBox结合

问题描述 大人阿幫幫忙 PackageManger ListView与CheckBox结合 http://blog.csdn.net/qinjuning/article/details/6867806 做出類似https://play.google.com/store/apps/details?id=edu.utaipei.cs.gtmanager&hl=zh_TW 要如何實行