求解!JAVA 使用Apache POI将PPTX转图片出错。见下图

发布网友 发布时间:2022-04-23 15:30

我来回答

2个回答

热心网友 时间:2023-09-09 18:39

有时候我们需要从Excel文件中读取数据,或者我们为了商务或者财政的目的生成Excel格式的报表.Java没有对操作Excel文件提供内在的支持,所以我们需要寻找开源的APIs.当我开始寻找操作Excel的APIs时候,大部分人建议使用JExcel或者ApachePOI.在深入研究后,我发现由于以下主要原因ApachePOI是正确的选择.还有些关于高级特性的原因,但是我们不深入太多细节.1)Apache基金的支持.2)JExcel不支持xlsx格式而POI既支持xls格式又支持xlsx格式.3)ApachePOI是基于流的处理,因此更适合大文件和要求更少的内存.ApachePOI对处理Excel文件提供了强大的支持,并且能处理xls和xlsx格式的电子表格.关于ApachePOI一些重要的地方:1)ApachePOI包含适合Excel97-2007(.xls文件)的HSSF实现.2)ApachePOIXSSF实现用来处理Excel2007文件(.xlsx).3)ApachePOIHSSF和XSSF提供了读/写/修改Excel表格的机制.4)ApachePOI提供了XSSF的一个扩展SXSSF用来处理非常大的Excel工作单元.SXSSFAPI需要更少的内存,因此当处理非常大的电子表格同时堆内存又有限时,很合适使用.5)有两种模式可供选择--事件模式和用户模式.事件模式要求更少的内存,因为用tokens来读取Excel并处理.用户模式更加面向对象并且容易使用,因此在我们的示例中使用用户模式.6)ApachePOI为额外的Excel特性提供了强大支持,例如处理公式,创建单元格样式--颜色,边框,字体,头部,脚部,数据验证,图像,超链接等.ApachePOI的Maven依赖[java]viewplaincopyorg.apache.poipoi3.10-FINALorg.apache.poipoi-ooxml3.10-FINALApachePOI的当前版本是3.10-FINAL.如果你使用单独的java应用,添加jars根据下面的图片.读取Excel文件假设我们有一个叫Sample.xlsx的Excel文件,里面有两个sheet并且下面图片中的数据.我们想要读取这个Excel文件并且创建Countrieslist.sheet1有些额外的数据,当我们解析时会忽略它.我们的国家(Country)javabean如下:Country.java[java]viewplaincopypackagecom.journaldev.excel.read;publicclassCountry{privateStringname;privateStringshortCode;publicCountry(Stringn,Stringc){this.name=n;this.shortCode=c;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetShortCode(){returnshortCode;}publicvoidsetShortCode(StringshortCode){this.shortCode=shortCode;}@OverridepublicStringtoString(){returnname+"::"+shortCode;}}读取Excel文件并创建Countrieslist代码如下:ReadExcelFileToList.java[java]viewplaincopypackagecom.journaldev.excel.read;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;publicclassReadExcelFileToList{publicstaticListreadExcelData(StringfileName){ListcountriesList=newArrayList();try{//Createtheinputstreamfromthexlsx/xlsfileFileInputStreamfis=newFileInputStream(fileName);//CreateWorkbookinstanceforxlsx/xlsfileinputstreamWorkbookworkbook=null;if(fileName.toLowerCase().endsWith("xlsx")){workbook=newXSSFWorkbook(fis);}elseif(fileName.toLowerCase().endsWith("xls")){workbook=newHSSFWorkbook(fis);}//GetthenumberofsheetsinthexlsxfileintnumberOfSheets=workbook.getNumberOfSheets();//loopthrougheachofthesheetsfor(inti=0;irowIterator=sheet.iterator();while(rowIterator.hasNext()){Stringname="";StringshortCode="";//GettherowobjectRowrow=rowIterator.next();//Everyrowhascolumns,getthecolumniteratoranditerateoverthemIteratorcellIterator=row.cellIterator();while(cellIterator.hasNext()){//GettheCellobjectCellcell=cellIterator.next();//checkthecelltypeandprocessaccordinglyswitch(cell.getCellType()){caseCell.CELL_TYPE_STRING:if(shortCode.equalsIgnoreCase("")){shortCode=cell.getStringCellValue().trim();}elseif(name.equalsIgnoreCase("")){//2ndcolumnname=cell.getStringCellValue().trim();}else{//randomdata,leaveitSystem.out.println("Randomdata::"+cell.getStringCellValue());}break;caseCell.CELL_TYPE_NUMERIC:System.out.println("Randomdata::"+cell.getNumericCellValue());}}//endofcelliteratorCountryc=newCountry(name,shortCode);countriesList.add(c);}//endofrowsiterator}//endofsheetsforloop//closefileinputstreamfis.close();}catch(IOExceptione){e.printStackTrace();}returncountriesList;}publicstaticvoidmain(Stringargs[]){Listlist=readExcelData("Sample.xlsx");System.out.println("CountryList\n"+list);}}这个程序很容易明白,主要步骤如下:1)根据文件类型(.xls与.xlsx)创建Workbook实例,xlsx用XSSFWorkbook,xls用HSSFWorkbook.我们可以基于文件名字使用工厂模式创建一个包装类来创建Workbook实例.2)使用WorkbookgetNumberOfSheets()来获取sheet的数量,然后循环解析每一个sheet.使用getSheetAt(inti)方法获取Sheet实例.3)获取Row和Cell迭代器来获取每一个Cell对象.ApachePOI在这里使用了迭代器模式.4)使用switch-case根据Cell的类型来处理它.

热心网友 时间:2023-09-09 18:39

关键代码就是: rtruns[l].setFontName("宋体"); import java.awt.Dimension;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import ...追问???

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com