`

POI HSSF - Excel实例

阅读更多
生成Excel效果图如下:


package com.kjlink.util;

import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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;

public class HSSFUtil {
	
	private HSSFWorkbook workbook = null;  // Excel工作簿
	private HSSFSheet sheet = null; 
	private HSSFRow row = null;
	private HSSFCell cell = null;
	private HSSFCellStyle style = null;
	private HSSFFont font = null;
	private List<?> list = null;
	
	private String[] header = null; // 标题行
	private String[][] body =null; // body内容
	private String[] properties = null; // List集合中的对象属性名集合
	
	private static HSSFUtil hssf = new HSSFUtil();
	
	public static final String FILE_PATH = "D:\\领还记录.xls";
	
	private HSSFUtil() {
		this.workbook = new HSSFWorkbook();
		this.sheet = workbook.createSheet("sheet1");
		this.style = workbook.createCellStyle();
		this.font = workbook.createFont();
	}
	
	
	public void exportExcel(String[] header,List<?> list, String[] properties) {
		this.header = header;
		this.list = list;
		this.properties = properties;
		
		this.createHead();
		this.createBody();
		this.writeXls();
		
		System.out.println("生成Excel成功!");
	}
	
	private void createHead() { // Excel格式头
		if (header!=null&&header.length>0) {
			row = sheet.createRow(0);
			for (int i = 0; i<header.length; i++) {
				
				sheet.setColumnWidth(i, 5000);
				
				cell = row.createCell(i);
				cell.setCellType(HSSFCell.CELL_TYPE_STRING);
				cell.setCellValue(header[i]);
				this.defaultStyle();
				this.defaultFont();
				cell.setCellStyle(this.style);
			}
		}
	}
	
	private void createBody() {
		if (this.listToArray()!=null) {
			int lastnum = sheet.getLastRowNum();
			for (int i = 0; i < body.length; i++) {
				row = sheet.createRow(++lastnum);
				for (int j = 0; j < body[i].length; j++) {
					cell = row.createCell(j);
					cell.setCellType(HSSFCell.CELL_TYPE_STRING);
					cell.setCellValue(body[i][j]);
				}
			}
		}
	}
	
	private void writeXls() {
		FileOutputStream out = null;
		try {
			out = new FileOutputStream(FILE_PATH);
			workbook.write(out);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			if (out!=null) {
				try {
					out.flush();
					out.close();
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
		}
	}
	
	private void defaultStyle () {
		style.setFillForegroundColor(HSSFColor.BLUE_GREY.index);
		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	}
	
	private void defaultFont () {
		font.setColor(HSSFColor.WHITE.index);
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

		style.setFont(font);
	}
	
	private String[][] listToArray() {
		if (list!=null&&!list.isEmpty()) {
			if (properties!=null&&properties.length>0) {
				body = new String[list.size()][properties.length]; // 二维数组Body
				for (int i = 0; i < body.length; i++) {
					for (int j = 0; j < body[i].length; j++) {
						Object obj = list.get(i); // 获取当前对象
						Class<?> clzz = obj.getClass(); // 获取当前对象的Clas对象
						try {
							String getterName = properties[j];
							if (getterName.indexOf(".")!=-1) { // getter名称为【对象.属性】
								String[] subPro = getterName.split("\\.");
								String subName = null;
								Object subObj = obj; // 子对象
								for (int k = 0; k < subPro.length; k++) {
									subName = "get" + firstWordUpper(subPro[k]);
									Method method = subObj.getClass().getDeclaredMethod(subName);
									
									if (!method.isAccessible()) {
										subObj = method.invoke(subObj);
										if (subObj==null) break;
										if (k==subPro.length-1) {
											body[i][j] = subObj.toString();
										}
									}
								}
							} else { // getter名称为【属性】
								getterName = "get" + firstWordUpper(properties[j]);  // getter方法名
								Method method = clzz.getDeclaredMethod(getterName); // 获取指定方法名的Method对象
								
								if(!method.isAccessible()) {  // 表示该方法可以访问  修饰符不是private
									Object value = method.invoke(obj); // 调用obj对象的getter方法
									
									if (value!=null) {
										if (value instanceof java.sql.Timestamp||value instanceof java.util.Date) {
											body[i][j] = timeToStr(value);
										} else {
											body[i][j] = value.toString();
										}
									}
								}
							}
							
						} catch (Exception e) {
							throw new RuntimeException(e);
						}
					}
				}
			}
		}
		return body;
	}
	
	private String firstWordUpper(String word) {
		if (word!=null&&word.length()>1) {
			return word.substring(0,1).toUpperCase() + word.substring(1);
		}
		return word;
	}
	
	private String timeToStr(Object obj) {
		if (obj!=null) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return sdf.format(obj);
		}
		return null;
	}
	
	public static void main(String[] args) {
		List<Consum> list = new ArrayList<Consum>();
		
		Consum consum1 = new Consum();
		consum1.setAsset(new Asset("KJ-AA-0001"));
		consum1.setUser(new User("小兵"));
		consum1.setOperator(new User("信息中心"));
		consum1.setDate(new Date());
		consum1.setRemark("去北京出差");
		
		Consum consum2 = new Consum();
		consum2.setAsset(new Asset("KJ-AA-0002"));
		consum2.setUser(new User("博海"));
		consum2.setOperator(new User("信息中心"));
		consum2.setDate(new Date());
		consum2.setRemark("去上海出差");
		
		list.add(consum1);
		list.add(consum2);
		
		String[] header = new String[] {"固定资产名称","领用人","操作人","领用日期","备注"};
		String[] properties = new String[] {"asset.name", "user.name", "operator.name", "date", "remark"};
		
		hssf.exportExcel(header, list, properties);
		
	}
}

分享到:
评论

相关推荐

    poi apache-poi导入实例 导入excel表格数据

    在Java编程中,当你需要处理Excel文件时,Apache POI库提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要组件,分别用于处理老版本的.xls和新版本的.xlsx文件。在这个实例中,...

    POI-TL合并多个Word文档

    Apache POI是一个流行的开源库,允许开发者处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。POI-TL是POI的一个扩展,专门用于处理Word文档(.docx格式),提供了更高级的功能,如模板填充和文档合并。 ...

    poi3.8+poi-pdf+poi-core.rar

    - **poi-3.8-20120326.jar**:核心库,提供了对HSSF(用于旧版Excel .xls)和XSSF(用于新版Excel .xlsx)的支持。 - **poi-ooxml-schemas-3.8-20120326.jar**:包含了Office Open XML的XML模式,用于解析和创建...

    poi-bin-3.17-20170915.rar

    Apache POI 提供了HSSF和XSSF两个主要组件,分别用于处理旧版的BIFF8格式(Excel 97-2003,.xls)和基于XML的新版格式(Excel 2007及以上,.xlsx)。这些组件允许开发者创建、修改和解析Excel工作簿、工作表、单元格...

    poi-bin-3.0.2-FINAL

    - HSSF(Horrible Spreadsheet Format)是Apache POI用于处理旧版Excel文件(.xls,97-2003格式)的API。 - XSSF(XML Spreadsheet Format)是用于处理新版Excel文件(.xlsx,2007及以上版本)的API。XSSF基于...

    poi解密excel文件实例代码.zip

    poi解密excel文件实例代码.zip是java使用poi解密excel文件的实例代码,代码只实现了.xls类型的excel,.xlsx类型的excel只需把HSSF前缀的类更换成XSSF开通的前缀类即可。 本代码所实现的解密是指使用密码解密,不是...

    POI读写excel文件+poi简单文档

    首先,我们需要了解POI的主要组件:HSSF(Horrible Spreadsheet Format)用于处理旧版的BIFF格式(.xls),而XSSF则用于处理XML-based OpenOffice Spreadsheet格式(.xlsx)。这两个组件都提供了丰富的API,可以操作...

    poi 解析excel实例

    在这个“poi 解析excel实例”中,我们主要关注的是如何使用Apache POI来解析Excel文件。 首先,让我们了解一下什么是Apache POI。Apache POI 是Java平台上处理Microsoft Office文档的库,它允许开发者创建、修改和...

    Java利用POI实现数据Excel导出实例源码

    本实例源码着重讲解如何利用Apache POI来实现数据的Excel导出功能。 首先,我们需要了解Apache POI的基本概念。POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要的API,分别...

    poi-3.10-FINAL.zip

    HSSF是POI项目最早的API,适用于旧版Excel97-2007格式,而XSSF则支持从Excel2007引入的XML格式。 在使用Apache POI时,你需要了解以下关键概念: 1. **Workbook**:这是表示整个Excel文件的顶级对象。无论文件是...

    POI-API-3.12.rar_POI操作API_java chm_poi的核心api

    - **HSSF**:处理Excel的BIFF格式,如老版本的.XLS文件。 - **XSSF**:处理Excel的OOXML格式,如较新的.XLSX文件。 - **HWPF**:处理Word的DOC文件。 - **XWPF**:处理Word的DOCX文件。 - **HSLF**:处理PowerPoint...

    poi-src-3.10-源码

    1. **HSSF (Horrible Spreadsheet Format):** 这是Apache POI项目中处理旧版Microsoft Excel (97-2003)文件(.xls)的部分。HSSF提供了创建、读取和修改.xls文件的类和接口。 2. **XSSF (XML Spreadsheet Format):*...

    java导出内容为excel poi-3.0.2-FINAL-20080204.jar

    import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.FileOutputStream; import java.io.IOException; public class ExcelExporter { public static void...

    基于struts2 spring ibatis poi开发的导出Excel实例

    【基于Struts2 Spring iBatis POI开发的导出Excel实例详解】 在现代Web应用程序中,导出数据到Excel格式是一种常见的需求,这有助于用户分析、存储或共享信息。本实例将详细介绍如何利用Struts2、Spring和iBatis...

    poi-scratchpad-3.8.jar.rar

    - **组件**:Apache POI包括HSSF(Horrible Spreadsheet Format)用于处理老版的.BIFF格式(Excel 97-2007),XSSF(XML Spreadsheet Format)用于处理.xlsx格式,HWPF(Horrible Word Processor Format)处理Word...

    POI HSSF 3.2

    其中,HSSF(Horizontally Split Formatted)是POI库的一个子项目,主要负责处理老版本的Excel文件,即.BIFF8格式的Excel 97-2007文件。在本文中,我们将深入探讨POI HSSF 3.2版本中的核心概念和操作API。 首先,`...

    POI-3.2.jar包

    1. **HSSF和XSSF**: POI提供了两个主要的API,用于处理Excel文件。HSSF(Horrible Spreadsheet Format)是用于读写老版本的Microsoft Excel 97-2003格式(.xls)的API。而XSSF(XML Spreadsheet Format)则支持较新...

    java使用poi解密excel文件的实例代码

    Apache POI 是基于 Office Open XML 标准(OOXML)和 ...本代码实例是使用java语言写的poi解密excel文件实例代码,代码只实现了.xls类型的excel,.xlsx类型的excel只需把HSSF前缀的类更换成XSSF开通的前缀类即可。

    POI Excel官方源码及文档及实例

    1. **读取Excel文件**:POI提供了HSSF(Horrible Spreadsheet Format)API来处理.xls格式的Excel文件,XSSF API则用于处理.xlsx格式的文件。通过这些API,开发者可以访问单元格内容、样式、公式等,并将数据解析为...

Global site tag (gtag.js) - Google Analytics