当前位置: 首页 > 编程笔记 >

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

狄鸿禧
2023-03-14
本文向大家介绍POI通过模板导出EXCEL文件的实例,包括了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操作:<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文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我正在尝试通过Apache POI读取大型Excel文件xlsx,例如40-50 MB。我的内存不足异常。当前的堆内存为3GB。 我可以阅读较小的excel文件,没有任何问题。我需要一种方法来读取大型excel文件,然后通过Spring excel视图将它们作为响应返回。 我首先开始使用, 但是每个Apache POI API的使用成本很高,因此我改用OPC封装方式,但效果仍然相同。我

  • 问题内容: 我正在尝试读取(使用apache poi).xlsx文件,该文件不在文件系统中,但在类路径中。我正在使用Maven-因此它位于资源文件夹中。 我的代码是- 我收到此例外。 当我从文件系统读取同一文件时,一切都很好。我的代码中有错误吗?还是想念一些东西? UPDATE1:这是在Web应用程序中,因此代码已部署在tomcat 7中。 UPDATE2:当我以这种方式读取同一文件时,它可以工作

  • 请在你投反对票之前,我找不到一个读取web表格并将其写入Excel文件的例子。如果你碰巧发现这个链接,请提供给我。我发现了很多关于如何写一个Excel文件的例子,但是没有从web表格部分读取。 这是我的代码: 提前感谢。

  • 我遵循这个答案(将电子表格的行转换为单独的XML文件),但是我收到一个错误,告诉我没有定义对象。我很抱歉,因为我是VBA新手。 我的表格遵循代码中显示的顺序,例如。 第1列{例如A}=文件名字符串 第677列{e.g.ZA}=XML文件第一行的字符串 第683列{e.g.ZG}=视频文件的标题{此列和以下所有列已经有了相应的标记(例如。 产生错误的代码是: 突出显示的错误是“doc.getElem

  • 本文向大家介绍ASP.NET Core 导入导出Excel xlsx 文件实例,包括了ASP.NET Core 导入导出Excel xlsx 文件实例的使用技巧和注意事项,需要的朋友参考一下 ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Linux和

  • 本文向大家介绍SpringBoot中EasyExcel实现Excel文件的导入导出,包括了SpringBoot中EasyExcel实现Excel文件的导入导出的使用技巧和注意事项,需要的朋友参考一下 前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据