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

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

有时候我们需要从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]viewplaincopyorgapachepoipoi310-FINALorgapachepoipoi-ooxml310-FINALApachePOI的当前版本是310-FINAL如果你使用单独的java应用,添加jars根据下面的读取Excel文件假设我们有一个叫Samplexlsx的Excel文件,里面有两个sheet并且下面中的数据我们想要读取这个Excel文件并且创建Countrieslistsheet1有些额外的数据,当我们解析时会忽略它我们的国家(Country)javabean如下:Countryjava[java]viewplaincopypackagecomjournaldevexcelread;publicclassCountry{privateStringname;privateStringshortCode;publicCountry(Stringn,Stringc){thisname=n;thisshortCode=c;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){thisname=name;}publicStringgetShortCode(){returnshortCode;}publicvoidsetShortCode(StringshortCode){thisshortCode=shortCode;}@OverridepublicStringtoString(){returnname+"::"+shortCode;}}读取Excel文件并创建Countrieslist代码如下:ReadExcelFileToListjava[java]viewplaincopypackagecomjournaldevexcelread;importjavaioFileInputStream;importjavaioIOException;importjavautilArrayList;importjavautilIterator;importjavautilList;importorgapachepoihssfusermodelHSSFWorkbook;importorgapachepoissusermodelCell;importorgapachepoissusermodelRow;importorgapachepoissusermodelSheet;importorgapachepoissusermodelWorkbook;importorgapachepoixssfusermodelXSSFWorkbook;publicclassReadExcelFileToList{publicstaticListreadExcelData(StringfileName){ListcountriesList=newArrayList();try{//Createtheinputstreamfromthexlsx/xlsfileFileInputStreamfis=newFileInputStream(fileName);//CreateWorkbookinstanceforxlsx/xlsfileinputstreamWorkbookworkbook=null;if(fileNametoLowerCase()endsWith("xlsx")){workbook=newXSSFWorkbook(fis);}elseif(fileNametoLowerCase()endsWith("xls")){workbook=newHSSFWorkbook(fis);}//GetthenumberofsheetsinthexlsxfileintnumberOfSheets=workbookgetNumberOfSheets();//loopthrougheachofthesheetsfor(inti=0;irowIterator=sheetiterator();while(rowIteratorhasNext()){Stringname="";StringshortCode="";//GettherowobjectRowrow=rowIteratornext();//Everyrowhascolumns,getthecolumniteratoranditerateoverthemIteratorcellIterator=rowcellIterator();while(cellIteratorhasNext()){//GettheCellobjectCellcell=cellIteratornext();//checkthecelltypeandprocessaccordinglyswitch(cellgetCellType()){caseCellCELL_TYPE_STRING:if(shortCodeequalsIgnoreCase("")){shortCode=cellgetStringCellValue()trim();}elseif(nameequalsIgnoreCase("")){//2ndcolumnname=cellgetStringCellValue()trim();}else{//randomdata,leaveitSystemoutprintln("Randomdata::"+cellgetStringCellValue());}break;caseCellCELL_TYPE_NUMERIC:Systemoutprintln("Randomdata::"+cellgetNumericCellValue());}}//endofcelliteratorCountryc=newCountry(name,shortCode);countriesListadd(c);}//endofrowsiterator}//endofsheetsforloop//closefileinputstreamfisclose();}catch(IOExceptione){eprintStackTrace();}returncountriesList;}publicstaticvoidmain(Stringargs[]){Listlist=readExcelData("Samplexlsx");Systemoutprintln("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的类型来处理它

网上看到许多关于利用POI输出Excel单元格内容的文章,但都是利用CellgetCellType来获取Excel单元格的数据类型,我也利用这个方法 确实可以判断数据类型,CellCELL_TYPE_NUMERIC,CellCELL_TYPE_FORMULA,CellCELL_TYPE_BOOLEAN,CellCELL_TYPE_STING等类型,在MyEclipse里这些内容确被一条删除线画着,这是不提倡使用的方法和属性,心里看着特不爽,既然是被Apache放弃的用法,一定会有新的方法所代替,网上找了好多时间,都没有谈关于替代getCellType方法的方法,在看POI的API文档时发现了一个方法,仅挨着getCellType,就有一个getCellTypeEnum方法,这个方法应时替代getCellType方法的方法,它获取个CellType的枚举,这个枚举里就定义了EXcel中的数据类型STRING,NUMERIC,FORMULA,BOOLEAN等类型的常量,代码试验以后确实删除线不见了,文档里指出POI315后就放弃getCellType进而使用getCellTypeEnum了,这篇小小的提示希望给与我同感的小伙伴有所帮助。

你可以参考下这个代码:

Workbook workbook=new HSSFWorkbook(); // 定义一个新的工作簿

Sheet sheet=workbookcreateSheet("第一个Sheet页");  // 创建第一个Sheet页

Row row=sheetcreateRow(1); // 创建一个行

Cell cell=rowcreateCell(1); // 创建一个单元格

cellsetCellValue(4);

// 设置单元格边框

CellStyle cellStyle=workbookcreateCellStyle(); 

cellStylesetBorderBottom(CellStyleBORDER_THIN); // 底部边框

cellStylesetBottomBorderColor(IndexedColorsBLACKgetIndex()); // 底部边框颜色

cellStylesetBorderLeft(CellStyleBORDER_THIN);  // 左边边框

cellStylesetLeftBorderColor(IndexedColorsGREENgetIndex()); // 左边边框颜色

cellStylesetBorderRight(CellStyleBORDER_THIN); // 右边边框

cellStylesetRightBorderColor(IndexedColorsBLUEgetIndex());  // 右边边框颜色

cellStylesetBorderTop(CellStyleBORDER_MEDIUM_DASHED); // 上边边框

cellStylesetTopBorderColor(IndexedColorsBLACKgetIndex());  // 上边边框颜色

以上就是关于求解!JAVA 使用Apache POI将PPTX转图片出错。见下图全部的内容,包括:求解!JAVA 使用Apache POI将PPTX转图片出错。见下图、java poi 判断读取数据类型问题。、java poi 给指定的行列加个边框,怎么加。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10073688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存