首页 > 开发 > Java > 正文

POI通过模板导出EXCEL文件的实例

2024-07-13 10:10:59
字体:
来源:转载
供稿:网友

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出。

这次在项目中需要用到模板,导出的内容包括(1.模板中的内容、样式。2.自己需要新增的内容、样式。),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下。

分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容。

File fi = new File("F:/usr/user.xls");POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi)); HSSFWorkbook wb = new HSSFWorkbook(fs);

这样便可以获取到我们熟悉的HSSFWorkbook对象了,操作熟悉的HSSFWorkbook对象想必爽歪歪了。这里还有一个需求,就是需要设置一些单元格的样式,这在之前我也没有接触到过,记录下来。

//生成单元格样式HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步创建的HSSFWorkbook对象//设置背景颜色cellStyle.setFillForegroundColor(HSSFColor.RED.index);//solid 填充 foreground 前景色cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

这样便创建完成了一个单元格的样式,接下来便是在特定的单元格添加样式。

//获取特定的单元格HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); //设置样式cell.setCellStyle(cellStyle); //cellStyle是上一步创建的HSSFCellStyle对象 

 

如此,整个需求基本完成。对于整个过程中需要用到的其他方法,这里写了一个封装类。

**  有些方法可能只适用此项目,使用时需要修改。

package com.pole.educate.excel;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Calendar;import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.apache.poi.ss.usermodel.RichTextString; /**  * 共分为六部完成根据模板导出excel操作:<br/>  * 第一步、设置excel模板路径(setSrcPath)<br/>  * 第二步、设置要生成excel文件路径(setDesPath)<br/>  * 第三步、设置模板中哪个Sheet列(setSheetName)<br/>  * 第四步、获取所读取excel模板的对象(getSheet)<br/>  * 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/>  * 第六步、完成导出 (exportToNewFile)<br/>  *  * @author Administrator  *  */ public class ExcelWriter {  POIFSFileSystem fs = null;   HSSFWorkbook wb = null;   HSSFSheet sheet = null;  HSSFCellStyle cellStyle = null;    private String srcXlsPath = "";// excel模板路径   private String desXlsPath = ""; // 生成路径  private String sheetName = "";   /**    * 第一步、设置excel模板路径    * @param srcXlsPaths    */   public void setSrcPath(String srcXlsPaths) {     this.srcXlsPath = srcXlsPaths;   }    /**    * 第二步、设置要生成excel文件路径    * @param desXlsPaths   * @throws FileNotFoundException    */   public void setDesPath(String desXlsPaths) throws FileNotFoundException {     this.desXlsPath = desXlsPaths;  }    /**    * 第三步、设置模板中哪个Sheet列    * @param sheetName    */   public void setSheetName(String sheetName) {     this.sheetName = sheetName;   }    /**    * 第四步、获取所读取excel模板的对象    */   public void getSheet() {     try {       File fi = new File(srcXlsPath);       if(!fi.exists()){         //System.out.println("模板文件:"+srcXlsPath+"不存在!");         return;       }       fs = new POIFSFileSystem(new FileInputStream(fi));       wb = new HSSFWorkbook(fs);      sheet = wb.getSheet(sheetName);             //生成单元格样式      cellStyle = wb.createCellStyle();      //设置背景颜色      cellStyle.setFillForegroundColor(HSSFColor.RED.index);      //solid 填充 foreground 前景色      cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);          } catch (FileNotFoundException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   }   /**   *    */  public HSSFRow createRow(int rowIndex) {    HSSFRow row = sheet.createRow(rowIndex);    return row;  }  /**   *    */  public void createCell(HSSFRow row,int colIndex) {    row.createCell(colIndex);  }  /**    * 第五步、设置单元格的样式    * @param rowIndex  行值    * @param cellnum  列值    */   public void setCellStyle(int rowIndex, int cellnum) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellStyle(cellStyle);  }    /**    * 第五步、设置字符串类型的数据    * @param rowIndex  行值    * @param cellnum  列值    * @param value    字符串类型的数据    */   public void setCellStrValue(int rowIndex, int cellnum, String value) {    if(value != null) {      HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);       cell.setCellValue(value);    }  }    /**    * 第五步、设置日期/时间类型的数据    * @param rowIndex  行值    * @param cellnum  列值    * @param value    日期/时间类型的数据    */   public void setCellDateValue(int rowIndex, int cellnum, Date value) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellValue(value);   }    /**    * 第五步、设置浮点类型的数据    * @param rowIndex  行值    * @param cellnum  列值    * @param value    浮点类型的数据    */   public void setCellDoubleValue(int rowIndex, int cellnum, double value) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellValue(value);   }    /**    * 第五步、设置Bool类型的数据    * @param rowIndex  行值    * @param cellnum  列值    * @param value    Bool类型的数据    */   public void setCellBoolValue(int rowIndex, int cellnum, boolean value) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellValue(value);   }    /**    * 第五步、设置日历类型的数据    * @param rowIndex  行值    * @param cellnum  列值    * @param value    日历类型的数据    */   public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellValue(value);   }    /**    * 第五步、设置富文本字符串类型的数据。可以为同一个单元格内的字符串的不同部分设置不同的字体、颜色、下划线    * @param rowIndex  行值    * @param cellnum  列值    * @param value    富文本字符串类型的数据    */   public void setCellRichTextStrValue(int rowIndex, int cellnum,       RichTextString value) {     HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);     cell.setCellValue(value);   }     /**    * 第六步、完成导出    */   public void exportToNewFile() {     FileOutputStream out;     try {       out = new FileOutputStream(desXlsPath);       wb.write(out);      out.close();     } catch (FileNotFoundException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   } }

以上这篇POI通过模板导出EXCEL文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表