`
dreamoftch
  • 浏览: 498114 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

poi excel

阅读更多

 

 

 

package com.tch.test.t1;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
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;

public class ExportExcel {
	private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/**
	 * 
	 *  Created on 2013-4-3 
	 * <p>Discription:导出excel工具方法</p>
	 * @param file 导出目标文件 source 导出的数据源  columnNames每列的名字
	 * @param fieldNames 属性名 className 类名
	 * @author:
	 * @update:[日期YYYY-MM-DD] [更改人姓名]
	 * @return void
	 */
	public static byte[] exportExcel(List<?> source,String[] columnNames,String[] fieldNames){
		byte[] b = null;
		if(source == null || columnNames == null || fieldNames == null){
			return b;
		}
		if(columnNames.length != fieldNames.length){
			return b;
		}
        HSSFWorkbook hwb = new HSSFWorkbook();  
        HSSFCell hc = null;  
        HSSFRow hr = null;  
        HSSFSheet hs = null;  
        HSSFCellStyle cellStyle = hwb.createCellStyle();  
        HSSFFont cellFont = hwb.createFont();  
        cellStyle.setFont(cellFont);  
        hs = hwb.createSheet();  
        hr = hs.createRow((short) 0);  
        int length = columnNames.length;
        /**
         * 设置excel的表头
         */
        for(int i=0;i<length;i++){
        	hc = hr.createCell((short)i); 
        	hc.setEncoding(HSSFCell.ENCODING_UTF_16);
        	hc.setCellValue(columnNames[i]);
        }
        String[] result = null;
        for(int i=0;i<source.size();i++){
        	result = ObjectToArray(source.get(i),fieldNames);
        	if(result == null || result.length == 0 || length != result.length){
        		break;
        	}
        	hr = hs.createRow((short) (i+1));
        	for(int j=0;j<length;j++){
            	hc = hr.createCell((short)j); 
            	hc.setEncoding(HSSFCell.ENCODING_UTF_16);
            	hc.setCellValue(result[j]);
            }
        }
        try {
        	ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
			hwb.write(outputStream);
			b = outputStream.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return b;
	}
	
	/**
	 * 
	 *  Created on 2013-4-3 
	 * <p>Discription:把属性值按照给定的属性的顺序存储到数组里面返回</br>
	 * 例如:User,给定的属性名为username,password,ipAddress</br>
	 * 则返回的数组为对应的username,password,ipAddress的值</p>
	 * @author:
	 * @update:[日期YYYY-MM-DD] [更改人姓名]
	 * @return String[]
	 */
	@SuppressWarnings("unchecked")
	public static String[] ObjectToArray(Object model,String[] fieldNames) {
		String[] result = new String[fieldNames.length];
		try {
			Class clazz = model.getClass();
//			Field field = null;
			Type type = null;
			Method method= null;
			String property = null;
			boolean isComplexType = false;
			String complexFieldName = null;
			for(int i=0;i<fieldNames.length;i++){
				isComplexType = false;
				property = fieldNames[i];
				if(property.contains(".")){    //包含" . " 说明是复杂类型
					int index = property.indexOf(".");
					isComplexType = true;
					complexFieldName = property.substring(index+1);
					property = property.substring(0, index);
				}
//				field = clazz.getDeclaredField(property);
//				System.out.println("attribute name:"+property);  
//				type = field.getGenericType();
//				System.out.println("Generictype name:"+type.toString()+"   type:  "+field.getType());  
				method = clazz.getMethod("get"+property.substring(0, 1).toUpperCase()+property.substring(1, property.length()));
				if(method != null){
					if(isComplexType){
						result[i] = ObjectToArray(method.invoke(model), new String[]{complexFieldName})[0];
					}else{
						if(type != null && "class java.util.Date".equals(type.toString())){
							result[i] = String.valueOf(formatDate((Date)method.invoke(model)));
						}else{
							result[i] = String.valueOf(method.invoke(model));
						}System.out.println(result[i]);						
					}
					
				}
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return result;
	}

	private static String formatDate(Date date) {
		return format.format(date);
	}
}

 

分享到:
评论

相关推荐

    poi excel poi excel poi excel

    ### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)...

    poi excel转换成bean

    在Java开发中,Apache POI 是一个非常流行的库,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿。标题“poi excel转换成bean”涉及到的关键技术是使用Apache POI从Excel文件中读取数据并...

    JAVA POI Excel转Html

    JAVA POI Excel转Html,代码和所需的jar都在压缩包,项目在线预览需求,实现后分享下

    java使用 POI Excel模板导出数据

    在Java编程中,Apache POI库是一个非常流行的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel。这篇博客"java使用POI Excel模板导出数据"探讨了如何利用POI库在Java中创建Excel模板并填充...

    poi excel转html

    poi提供了excel转html的代码,但是吧,有好多问题。当有合并单元格时边框获取不到,单元格内的字体样式也转换不了,现在对poi提供的Tohtml.java做了一些修改,修复了这些问题,记录下,以备之后用到

    poi excel example,分页,行高,列宽

    标题中的“poi excel example,分页,行高,列宽”指的是使用Apache POI库来操作Excel文件的一些关键功能,包括设置分页、调整行高和列宽。Apache POI是一个流行的Java API,用于读取和写入Microsoft Office格式的...

    poi excel加密

    在Java开发中,Apache POI库是一个非常实用的工具,用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。当我们谈论“poi excel加密”时,这通常是指使用Apache POI来处理加密的Excel文件。Excel文件...

    SpringMVC POI Excel 生成导出

    "SpringMVC POI Excel 生成导出" SpringMVC 是一个基于 Java 的 Web 框架,POI 是一个 Java 库,用于操作 Microsoft Office 文件格式,Excel 是一个电子表格软件。今天,我们将在 SpringMVC 中使用 POI 生成 Excel ...

    poi excel 模板读取 复制表 复制行且区分合并行

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java开发中,POI库被广泛用于读取、写入和修改Excel文档。本篇将详细介绍如何使用Apache POI来读取Excel模板,复制工作表(Sheet...

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

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个资源包包含了POI项目的源代码、相关文档以及示例,可以帮助开发者深入理解如何使用POI来操作Excel文件。 一...

    poi excel 模板读取并导出带公式的excel文档

    ### POI Excel 模板读取并导出带公式的Excel文档 #### 一、概述 在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI...

    POI Excel最新官方开发包及文档

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel(.xls和.xlsx)文件。这个“POI Excel最新官方开发包及文档”包含的是Apache POI库的最新版本及其相关的用户手册和API文档,为...

    poiexcel导出html格式

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在 POI 3.10 及以后的版本中,引入了对将 Excel 工作簿转换为 HTML 格式的支持,这极大地扩展了其在数据导出和网页展示中的应用...

    基于POI的Excel操作Java类

    为更方便的使用POI的API来操作Excel(2003)文件,对POI中针对Excel文件的读写进行了简单封装。此类中包含以下功能: 1.根据模板创建Excel文件 ...压缩包中包含POI的jar文件、POIExcel的jar文件及POIExcel的源码

    poi excel导入

    标题“poi excel导入”指的是使用Apache POI库来读取Excel文件并将其数据导入到数据库中。Apache POI是Java编程语言中一个流行的库,它允许开发者创建、修改和显示Microsoft Office格式的文件,其中包括Excel(.xlsx...

    POI Excel 工具类

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel文档。这个工具类库使得Java开发者能够方便地读取、写入和操作Excel文件,而无需依赖Microsoft Office套件。以下是对POI Excel工具...

    Apache Poi Excel导出

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java开发中,Apache POI 提供了一种高效且灵活的方式来创建、修改和读取Excel工作簿。这篇博客“Apache Poi Excel导出”可能详细...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...

    PoiExcel_single_save.rar

    本项目"**PoiExcel_single_save.rar**"显然是利用Apache POI进行Excel文件的读写操作,并结合了ZBar二维码扫描技术,将扫描数据回填到Excel文件中。下面将详细解释这些技术及其应用。 **Apache POI** Apache POI ...

    poi excel JAR包

    本文将深入探讨"poi excel JAR包"的相关知识点,帮助开发者理解如何利用Apache POI库来解析和操作Excel文件。 Apache POI 是一个Java API,它允许程序员创建、修改和显示MS Office格式的文件。它的名字来源于...

Global site tag (gtag.js) - Google Analytics