0 0

POI处理excel后,原来的内置内嵌对象(embed object)就打不开了 -- 在POI官方没找到方案。5

POI处理excel后,原来的内置内嵌对象(embed object)就打不开了 -- 在POI官方没找到方案。用excel打开内嵌对象时,报错 "cannot start the source application for this object".

I've tried both poi3.6 poi3.7 and poi3.8. it's NOT working.

简单的代码段:
//read the temaplate excel with embed object
String filePathIn = "templdate.xls";
fs = new POIFSFileSystem(new FileInputStream(filePathIn));
HSSFWorkbook wb = new HSSFWorkbook(fs);  
//write the templdate excel into output file
String filePathOut="out.xls";
FileOutputStream fileOut = new FileOutputStream(filePathOut);
wb.write(fileOut);  
fileOut.close();

大家看看,谢谢

3个答案 按时间排序 按投票排序

0 0

poi的操作实例可参考以下官方文档
http://poi.apache.org/spreadsheet/quick-guide.html
Embedded Objects部分在最后面

2012年8月23日 09:50
0 0

通过下面代码获取excel中的内嵌对象

            for (HSSFObjectData obj : wb.getAllEmbeddedObjects()) 
            { //the OLE2 Class Name of the object 
            	String oleName = obj.getOLE2ClassName(); 
            	if (oleName.equals("Worksheet")) 
            	{ 
            		DirectoryNode dn = (DirectoryNode) obj.getDirectory();
            		HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, fs, false); 
            		//System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets()); 
            	} 
            	else if (oleName.equals("Document")) 
            	{ 
            		DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
            		HWPFDocument embeddedWordDocument = new HWPFDocument(dn, fs); 
            		//System.out.println(entry.getName() + ": " + embeddedWordDocument.getRange().text()); 
            	} 
            	else if (oleName.equals("Presentation")) 
            	{ 
            		DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
            		SlideShow embeddedPowerPointDocument = new SlideShow(new HSLFSlideShow(dn, fs)); 
            		//System.out.println(entry.getName() + ": " + embeddedPowerPointDocument.getSlides().length); 
            	} 
            	else
            	{ 
            		if(obj.hasDirectoryEntry())
            		{ 
            			// The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is 
            			DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
            			for (Iterator entries = dn.getEntries(); entries.hasNext();) 
            			{ 
            				Entry entry = (Entry) entries.next(); 
            				//System.out.println(oleName + "." + entry.getName()); 
            			} 
            		} 
            		else
            		{ // There is no DirectoryEntry // Recover the object's data from the HSSFObjectData instance. 
            			byte[] objectData = obj.getObjectData(); 
            		} 
            	} 
            }

2012年8月23日 09:46
0 0

那就可能是POI的BUG,试试JXL

2012年8月22日 19:31

相关推荐

Global site tag (gtag.js) - Google Analytics