POI通过模板导出EXCEL文件

时间:2023-02-21 14:48:29

  一般的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文件的更多相关文章

  1. apache poi根据模板导出excel

    需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; im ...

  2. java后台poi根据模板导出excel

    public class ExcelUtils { private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = " ...

  3. 使用NPOI导出Excel文件

    使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...

  4. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  5. ASP&period;NET Core 2&period;2 &colon; 十六&period;扒一扒新的Endpoint路由方案 try&period;dot&period;net 的正确使用姿势 &period;Net NPOI 根据excel模板导出excel、直接生成excel &period;Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  6. PHP导出excel文件,第一步先实现PHP模板导出不带数据

    今天继续研究PHP导出excel文件,把复杂的事情简单化,一步步实现功能,首先实现模板文件的导出,随后再实现写入数据后导出,最终实现功能,这是基本思路.中间可以加一步,先自己写入数据导出试试,随后再数 ...

  7. poi根据excel模板导出Excel

    /****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...

  8. POI导入和导出Excel总结

    POI导入和导出Excel总结   POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...

  9. 导入导出Excel文件

    搭建环境 先新建web project ,然后Add Struts Capabilties: 下载导入导出Excel所需的jar包: poi-3.8-20120326.jar包  :  http:// ...

随机推荐

  1. phpexcel读取输出操作

    //读取 <?php header("Content-Type:text/html;charset=utf-8"); include 'Classes/PHPExcel.ph ...

  2. JS中,!&equals;, !&equals;&equals; 和 !的区别和使用场景

    var num = 1; var str = '1'; var test = 1;   test == num   //true 相同类型 相同值 test === num  //true 相同类型 ...

  3. Python collections 模块用法举例

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...

  4. java容器---集合总结

    思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...

  5. XML命名空间详解

    http://happylongnv.blog.hexun.com/48859954_d.html 目的:解决同一个元素在相同文件中代表不同含义的问题.因为XML文档中使用的元素不是固定的,那么两个不 ...

  6. 屏幕输出VS文件输出

     问题1:我们在编写程序时经常需要数一些数据到屏幕,来查看我们的结果是否正确,虽然直接输出到屏幕,查看起来呢很方便,但当数据量很大时,需要耗费大量的时间.于是我们想到能不能通过输出到文件来减少时间 ...

  7. 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例

    智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...

  8. 2019最新整理PHP面试题附答案

    1.什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2.SESSION 与 COOKIE的区别是什么,请从协议, ...

  9. char和string的不同点

    'a'是char, "a"是char string,这两者都是普通的字符和字符串,和C中没什么不同 值得注意的是后者包含两个字符,末尾有一个隐身的'\0' 而:string str ...

  10. 利用Delphi-cross-socket 库提升kbmmw 跨平台开发

    以前我写过了,通过httpsys 提升windows 下,delphi 多层应用.随着delphi 10.2 对linux 的支持,很多人也想在linux 下 发布kbmmw 服务器,但是官方仅通过i ...