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

网友投稿 640 2023-04-19


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

一般的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操作:

* 第一步、设置excel模板路径(setSrcPath)

* 第二步、设置要生成excel文件路径(setDesPath)

* 第三步、设置模板中哪个Sheet列(setSheetName)

* 第四步、获取所读取excel模板的对象(getSheet)

* 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)

* 第六步、完成导出 (exportToNewFile)

*

* @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.setFillPatthttp://ern(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();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:POI读取excel简介_动力节点Java学院整理
下一篇:浅谈Java中的高精度整数和高精度小数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~