POI通过模板导出EXCEL文件的实例
程序员文章站
2024-02-22 18:48:58
一般的excel导出使用poi先创建一个hssfworkbook,然后通过不断创建hssfrow,hssfcell后设置单元格内容便可以完成导出。
这次在项目中需要用到模...
一般的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文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。