POI通过模板导出EXCEL文件的实例
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出。
这次在项目中需要用到模板,导出的内容包括(1.模板中的内容、样式。2.自己需要新增的内容、样式。),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下。
分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容。
Filefi=newFile("F:/usr/user.xls"); POIFSFileSystemfs=newPOIFSFileSystem(newFileInputStream(fi)); HSSFWorkbookwb=newHSSFWorkbook(fs);
这样便可以获取到我们熟悉的HSSFWorkbook对象了,操作熟悉的HSSFWorkbook对象想必爽歪歪了。这里还有一个需求,就是需要设置一些单元格的样式,这在之前我也没有接触到过,记录下来。
//生成单元格样式 HSSFCellStylecellStyle=wb.createCellStyle();//wb是上一步创建的HSSFWorkbook对象 //设置背景颜色 cellStyle.setFillForegroundColor(HSSFColor.RED.index); //solid填充foreground前景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
这样便创建完成了一个单元格的样式,接下来便是在特定的单元格添加样式。
//获取特定的单元格 HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); //设置样式 cell.setCellStyle(cellStyle);//cellStyle是上一步创建的HSSFCellStyle对象
如此,整个需求基本完成。对于整个过程中需要用到的其他方法,这里写了一个封装类。
** 有些方法可能只适用此项目,使用时需要修改。
packagecom.pole.educate.excel; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.util.Calendar; importjava.util.Date; importorg.apache.poi.hssf.usermodel.HSSFCell; importorg.apache.poi.hssf.usermodel.HSSFCellStyle; importorg.apache.poi.hssf.usermodel.HSSFRow; importorg.apache.poi.hssf.usermodel.HSSFSheet; importorg.apache.poi.hssf.usermodel.HSSFWorkbook; importorg.apache.poi.hssf.util.HSSFColor; importorg.apache.poi.poifs.filesystem.POIFSFileSystem; importorg.apache.poi.ss.usermodel.RichTextString; /** *共分为六部完成根据模板导出excel操作:
*第一步、设置excel模板路径(setSrcPath)
*第二步、设置要生成excel文件路径(setDesPath)
*第三步、设置模板中哪个Sheet列(setSheetName)
*第四步、获取所读取excel模板的对象(getSheet)
*第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)
*第六步、完成导出(exportToNewFile)
* *@authorAdministrator * */ publicclassExcelWriter{ POIFSFileSystemfs=null; HSSFWorkbookwb=null; HSSFSheetsheet=null; HSSFCellStylecellStyle=null; privateStringsrcXlsPath="";//excel模板路径 privateStringdesXlsPath="";//生成路径 privateStringsheetName=""; /** *第一步、设置excel模板路径 *@paramsrcXlsPaths */ publicvoidsetSrcPath(StringsrcXlsPaths){ this.srcXlsPath=srcXlsPaths; } /** *第二步、设置要生成excel文件路径 *@paramdesXlsPaths *@throwsFileNotFoundException */ publicvoidsetDesPath(StringdesXlsPaths)throwsFileNotFoundException{ this.desXlsPath=desXlsPaths; } /** *第三步、设置模板中哪个Sheet列 *@paramsheetName */ publicvoidsetSheetName(StringsheetName){ this.sheetName=sheetName; } /** *第四步、获取所读取excel模板的对象 */ publicvoidgetSheet(){ try{ Filefi=newFile(srcXlsPath); if(!fi.exists()){ //System.out.println("模板文件:"+srcXlsPath+"不存在!"); return; } fs=newPOIFSFileSystem(newFileInputStream(fi)); wb=newHSSFWorkbook(fs); sheet=wb.getSheet(sheetName); //生成单元格样式 cellStyle=wb.createCellStyle(); //设置背景颜色 cellStyle.setFillForegroundColor(HSSFColor.RED.index); //solid填充foreground前景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } /** * */ publicHSSFRowcreateRow(introwIndex){ HSSFRowrow=sheet.createRow(rowIndex); returnrow; } /** * */ publicvoidcreateCell(HSSFRowrow,intcolIndex){ row.createCell(colIndex); } /** *第五步、设置单元格的样式 *@paramrowIndex行值 *@paramcellnum列值 */ publicvoidsetCellStyle(introwIndex,intcellnum){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellStyle(cellStyle); } /** *第五步、设置字符串类型的数据 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalue字符串类型的数据 */ publicvoidsetCellStrValue(introwIndex,intcellnum,Stringvalue){ if(value!=null){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } } /** *第五步、设置日期/时间类型的数据 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalue日期/时间类型的数据 */ publicvoidsetCellDateValue(introwIndex,intcellnum,Datevalue){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** *第五步、设置浮点类型的数据 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalue浮点类型的数据 */ publicvoidsetCellDoubleValue(introwIndex,intcellnum,doublevalue){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** *第五步、设置Bool类型的数据 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalueBool类型的数据 */ publicvoidsetCellBoolValue(introwIndex,intcellnum,booleanvalue){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** *第五步、设置日历类型的数据 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalue日历类型的数据 */ publicvoidsetCellCalendarValue(introwIndex,intcellnum,Calendarvalue){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** *第五步、设置富文本字符串类型的数据。可以为同一个单元格内的字符串的不同部分设置不同的字体、颜色、下划线 *@paramrowIndex行值 *@paramcellnum列值 *@paramvalue富文本字符串类型的数据 */ publicvoidsetCellRichTextStrValue(introwIndex,intcellnum, RichTextStringvalue){ HSSFCellcell=sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** *第六步、完成导出 */ publicvoidexportToNewFile(){ FileOutputStreamout; try{ out=newFileOutputStream(desXlsPath); wb.write(out); out.close(); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }
以上这篇POI通过模板导出EXCEL文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。