`
qq1988627
  • 浏览: 107315 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

POI导入导出Excel

阅读更多
package com.byd.core;

import java.io.File;package com.byd.core;

import java.io.OutputStream;   
import java.lang.reflect.Field;   
import java.lang.reflect.Method;   
import java.text.SimpleDateFormat;   
import java.util.ArrayList;   
import java.util.Collection;   
import java.util.Date;   
import java.util.Iterator;   
import java.util.List;   
  
import org.apache.poi.hssf.usermodel.HSSFCell;   
import org.apache.poi.hssf.usermodel.HSSFCellStyle;   
import org.apache.poi.hssf.usermodel.HSSFRichTextString;   
import org.apache.poi.hssf.usermodel.HSSFRow;   
import org.apache.poi.hssf.usermodel.HSSFSheet;   
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  

public class ExcelExport<T> {
	 //格式化日期   
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
    /**  
     *   
     * @param title 标题  
     * @param dataset 集合  
     * @param out  输出流  
     */  
    @SuppressWarnings("unchecked")
	public void exportExcel(String title, Collection<T> dataset,   
            OutputStream out) {   
        // 声明一个工作薄   
        try {   
            //首先检查数据看是否是正确的   
            Iterator<T> its = dataset.iterator();   
            System.out.println(dataset.size());
	            if(dataset==null||!its.hasNext()||title==null||out==null)   
	            {   
	                throw new Exception("传入的数据不对!");   
	            }   
	            //取得实际泛型类 
	            int index = 0; 
	            HSSFWorkbook workbook = new HSSFWorkbook();   
	            // 生成一个表格   
	            HSSFSheet sheet = workbook.createSheet(title);   
	            List<Method> methodObj = new ArrayList<Method>();
	           while (its.hasNext()) {
	              index++; 
	              T ts = (T) its.next(); 
	              if (index==1){  
		            Class tCls = ts.getClass();  
		            //HSSFWorkbook workbook = new HSSFWorkbook();   
		            // 生成一个表格   
		            //HSSFSheet sheet = workbook.createSheet(title);   
		            // 设置表格默认列宽度为15个字节   
		            sheet.setDefaultColumnWidth(15);   
		            // 生成一个样式   
		            HSSFCellStyle style = workbook.createCellStyle();   
		            // 设置标题样式   
		            style = ExcelStyle.setHeadStyle(workbook, style);   
		            // 得到所有字段   
		            Field filed[] = ts.getClass().getDeclaredFields();   
		            // 标题   
		            List<String> exportfieldtile = new ArrayList<String>();   
		            // 导出的字段的get方法   
		            //List<Method> methodObj = new ArrayList<Method>();   
		            // 遍历整个filed   
		            for (int i = 0; i < filed.length; i++) {   
		                Field f = filed[i];   
		                ExcelAnnotation exa = f.getAnnotation(ExcelAnnotation.class);   
		                // 如果设置了annottion   
		                if (exa != null) {   
		                    String exprot = exa.exportName();   
		                    // 添加到标题   
		                    exportfieldtile.add(exprot);   
		                    // 添加到需要导出的字段的方法   
		                    String fieldname = f.getName();   
		                    String getMethodName = "get"  
		                            + fieldname.substring(0, 1).toUpperCase()   
		                            + fieldname.substring(1);   
		                       
		                    Method getMethod = tCls.getMethod(getMethodName,   
		                            new Class[] {});   
		                       
		                       
		                    methodObj.add(getMethod);   
		                }   
		            }   
		            // 产生表格标题行   
		            HSSFRow row = sheet.createRow(0);   
		            for (int i = 0; i < exportfieldtile.size(); i++) {   
		                HSSFCell cell = row.createCell(i);   
		                cell.setCellStyle(style);   
		                HSSFRichTextString text = new HSSFRichTextString(   
		                        exportfieldtile.get(i));   
		                cell.setCellValue(text);  
		                System.out.println(text);
		            }   
	           }
	         
	               
	            // 循环整个集合   
	               
	            //while (its.hasNext()) {   
	                //从第二行开始写,第一行是标题   
	               // index++;   
	              HSSFRow row = sheet.createRow(index);   
	                //T t = (T) its.next();   
	                for (int k = 0; k < methodObj.size(); k++) {   
	                    HSSFCell cell = row.createCell(k);   
	                    Method getMethod=methodObj.get(k);   
	                    Object value = getMethod.invoke(ts, new Object[] {});   
	                    String textValue = getValue(value); 
	                    cell.setCellValue(textValue);  
	                } 
	            }   
	            workbook.write(out);  
           // }   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
  
    }   
  
    public String getValue(Object value) {   
        String textValue = "";   
        if (value == null)   
            return textValue;   
       
        if (value instanceof Boolean) {   
            boolean bValue = (Boolean) value;   
            textValue = "是";   
            if (!bValue) {   
                textValue = "否";   
            }   
        } else if (value instanceof Date) {   
            Date date = (Date) value;   
           
            textValue = sdf.format(date);   
        }else textValue=value.toString();
       
        return textValue;   
    }   
  
    /*public static void main(String[] args) throws Exception {   
           
        //构造一个模拟的List来测试,实际使用时,这个集合用从数据库中查出来   
        List list = new ArrayList();   
        for (int i = 0; i < 5000; i++) {   
            Testpojo pojo = new Testpojo();   
            pojo.setLoginname("登录名"+i);   
            pojo.setUsername("用户名"+i);   
            pojo.setMoney(new Long(1000+i));   
            pojo.setCreatetime(new Date());   
            pojo.setAge(28);   
            list.add(pojo);   
        }   
        //构造输出对象,可以从response输出,直接向用户提供下载   
        OutputStream out = new FileOutputStream("D:\\testOne.xls");   
        //开始时间   
        Long l = System.currentTimeMillis();   
        //注意   
        ExcelExport<Testpojo> ex = new ExcelExport<Testpojo>();   
        //   
        ex.exportExcel("测试", list, out);   
        out.close();   
        //结束时间   
        Long s = System.currentTimeMillis();   
        System.out.println("总共耗时:" + (s - l));   
  
    }   */
}  

 
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
public class ImportExcel<T> {
		Class<T> clazz;

		public ImportExcel(Class<T> clazz) {
			this.clazz = clazz;
		}

		@SuppressWarnings("unchecked")
		public Collection<T> importExcel(File file ,String...  pattern) {
			Collection<T> dist = new ArrayList();
			try {
				/**
				 * 类反射得到调用方法
				 */
				// 得到目标目标类的所有的字段列表
				Field filed[] = clazz.getDeclaredFields();
				// 将所有标有Annotation的字段,也就是允许导入数据的字段,放入到一个map中
				Map fieldmap = new HashMap();
				// 循环读取所有字段
				for (int i = 0; i < filed.length; i++) {
					Field f = filed[i];
					// 得到单个字段上的Annotation
					ExcelAnnotation exa = f.getAnnotation(ExcelAnnotation.class);
					// 如果标识了Annotationd的话
					if (exa != null) {
						// 构造设置了Annotation的字段的Setter方法
						String fieldname = f.getName();
						String setMethodName = "set"
								+ fieldname.substring(0, 1).toUpperCase()
								+ fieldname.substring(1);
						// 构造调用的method,
						Method setMethod = clazz.getMethod(setMethodName,
								new Class[] { f.getType() });
						// 将这个method以Annotaion的名字为key来存入。
						fieldmap.put(exa.exportName(), setMethod);
					}
				}
				/**
				 * excel的解析开始
				 */
				// 将传入的File构造为FileInputStream;
				FileInputStream in = new FileInputStream(file);
				// // 得到工作表
				HSSFWorkbook book = new HSSFWorkbook(in);
				// // 得到第一页
				HSSFSheet sheet = book.getSheetAt(0);
				// // 得到第一面的所有行
				Iterator<Row> row = sheet.rowIterator();

				/**
				 * 标题解析
				 */
				// 得到第一行,也就是标题行
				Row title = row.next();
				// 得到第一行的所有列
				Iterator<Cell> cellTitle = title.cellIterator();
				// 将标题的文字内容放入到一个map中。
				Map titlemap = new HashMap();
				// 从标题第一列开始
				int i = 0;
				// 循环标题所有的列
				while (cellTitle.hasNext()) {
					Cell cell = cellTitle.next();
					String value = cell.getStringCellValue();
					titlemap.put(i, value);
					i = i + 1;
				}
				/**
				 * 解析内容行
				 */
				//用来格式化日期的DateFormat
				SimpleDateFormat sf;
				if(pattern.length<1)
				{
					sf=new SimpleDateFormat("yyyy-MM-dd");	
				}
				else
					sf=new SimpleDateFormat(pattern[0]);	
				while (row.hasNext()) {
					// 标题下的第一行
					Row rown = row.next();

					// 行的所有列
					Iterator<Cell> cellbody = rown.cellIterator();
					// 得到传入类的实例
					T tObject = clazz.newInstance();
					int k = 0;
					// 遍历一行的列
					while (cellbody.hasNext()) {
						Cell cell = cellbody.next();
						// 这里得到此列的对应的标题
						String titleString = (String) titlemap.get(k);
						// 如果这一列的标题和类中的某一列的Annotation相同,那么则调用此类的的set方法,进行设值
						if (fieldmap.containsKey(titleString)) {
							Method setMethod = (Method) fieldmap.get(titleString);
							//得到setter方法的参数
							Type[] ts = setMethod.getGenericParameterTypes();
							//只要一个参数
							String xclass = ts[0].toString();
							//判断参数类型
							
						
							if(xclass.equals("class java.lang.String"))
							{
								setMethod.invoke(tObject, cell.getStringCellValue());
							}
							else if(xclass.equals("class java.util.Date"))
							{
								setMethod.invoke(tObject, sf.parse(cell.getStringCellValue()));
							}
							else if(xclass.equals("class java.lang.Boolean"))
							{
								Boolean boolname=true;
								if(cell.getStringCellValue().equals("否"))
									{
									boolname=false;
									}
								setMethod.invoke(tObject,boolname );
							}
							else if(xclass.equals("class java.lang.Integer"))
							{
								setMethod.invoke(tObject,new Integer( cell.getStringCellValue()));
							}
							
							else if(xclass.equals("class java.lang.Long"))
							{
								setMethod.invoke(tObject,new Long( cell.getStringCellValue()));
							}
						}
						// 下一列
						k = k + 1;
					}
					dist.add(tObject);
				}
			} catch (Exception e) {
				e.printStackTrace();
				return null;
			}
			return dist;
		}

public String exportDate(String fileName,String rootPath,Collection<T> dataset,OutputStream out) throws UnsupportedEncodingException{
		String xlsPath = rootPath + "main\\download\\"+fileName+".xls";
		String path="download/"+fileName+".xls";
		String down =new String(path.getBytes(),"utf-8");
		File file = new File(xlsPath + "\\main\\download\\");
		if (file.listFiles() != null) {
			for (int i = 0; i < file.listFiles().length; i++) {
				if (file.listFiles()[i].getName().endsWith(".xls")){
					boolean flag=file.listFiles()[i].delete();
					if(flag){
						try {
							 out = new FileOutputStream(rootPath
									+ "\\main\\download\\" + fileName + ".xls");
							this.exportExcel(fileName, dataset, out);
							out.close();
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
		return down;
    }
		/*public static void main(String[] args) {
			ImportExcel<Testpojo> test = new ImportExcel(Testpojo.class);
			File file = new File("D:\\order.xls");
			Long befor = System.currentTimeMillis();
			List<Testpojo> result = (ArrayList) test.importExcel(file);

			Long after = System.currentTimeMillis();
			System.out.println("此次操作共耗时:" + (after - befor) + "毫秒");
			 for (int i = 0; i < result.size(); i++) {
				 Testpojo testpojo=result.get(i);
			 System.out.println("导入的信息为:"+testpojo.getLoginname()+
					 "----"+testpojo.getAge()+"---"+testpojo.getMoney()+"-----"+testpojo.getCreatetime());
			 }

			System.out.println("共转化为List的行数为:" + result.size());
		}*/
 }
package com.byd.core;
import java.lang.annotation.ElementType;   
import java.lang.annotation.Retention;   
import java.lang.annotation.RetentionPolicy;   
import java.lang.annotation.Target;   
  
  
@Retention(RetentionPolicy.RUNTIME)   
@Target(ElementType.FIELD)   
public @interface ExcelAnnotation {   
    // excel导出时标题显示的名字,如果没有设置Annotation属性,将不会被导出和导入   
    public String exportName();   
}  

private Integer id;
      private String workplace;
   @ExcelAnnotation(exportName="工段")
   private String station;
   @ExcelAnnotation(exportName="线别")
   private String line;
   @ExcelAnnotation(exportName="机型")
   private String phonetype;
   @ExcelAnnotation(exportName="节拍")
   private Integer beat;
   @ExcelAnnotation(exportName="标准作业时间")
   private Integer workinghours;
   @ExcelAnnotation(exportName="标准人数")
   private Integer workers;
   private Integer output;
   @ExcelAnnotation(exportName="标准UPH值")
   private String uph;
   private String upph;


 

分享到:
评论

相关推荐

    SSM框架利用poi导入导出Excel文件 demo

    在本示例"SSM框架利用poi导入导出Excel文件 demo"中,我们将探讨如何在SSM项目中使用Apache POI库来实现Excel文件的导入与导出功能。 Apache POI是一个流行的开源库,它允许开发者在Java应用程序中创建、修改和显示...

    poi导入导出Excel表格的所以jar包

    标题提到的"poi导入导出Excel表格的所以jar包"指的是使用Apache POI库进行Excel操作所需的依赖库。 1. **poi-3.8-20120326.jar**: 这是Apache POI的主要核心库,包含了处理Excel文件的核心类和方法。例如,你可以...

    Java poi导入导出EXCEL工具类(兼容各版本)

    概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...

    poi导入导出Excel

    标题中的“poi导入导出Excel”指的是Apache POI库在Java中用于处理Microsoft Office文档,特别是Excel文件的导入和导出功能。Apache POI是一个开源项目,它允许开发者使用Java来创建、修改和显示Microsoft Office...

    POI导入导出excel

    标题"POI导入导出excel"指的是使用Apache POI库来处理Microsoft Excel文件,包括读取(导入)和写入(导出)数据。Apache POI是一个开源项目,允许Java开发者创建、修改和显示Microsoft Office格式的文件,其中Excel...

    poi导入导出excel

    这个“poi导入导出excel”的资源可能是针对初学者的一个教程或示例集合,帮助他们理解和掌握如何利用 Apache POI 进行 Excel 的导入与导出操作。 Apache POI 的核心组件包括 HSSF(Horrible Spreadsheet Format)和...

    poi 导入导出Excel相关jar包

    导出Excel的过程则相反。首先,你需要创建一个新的Workbook对象,然后创建Sheet和Row,填充Cell数据。最后,使用Workbook的write方法将数据写入到OutputStream中,可以是文件流或内存流,从而生成Excel文件。 除了...

    poi导入导出Excel源码

    标题“poi导入导出Excel源码”和描述涉及到的核心知识点是利用Apache POI进行Excel文件的导入与导出操作。 首先,让我们详细了解Apache POI库。Apache POI是Apache软件基金会的一个开源项目,其主要目标是创建Java ...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    poi导入导出excel所需jar

    标题"poi导入导出excel所需jar"和描述"java 使用poi导入导出excel所需的最新jar包"都指向了使用Apache POI进行Excel操作的关键依赖——POI相关的JAR文件。 Apache POI项目始于2001年,旨在为开源社区提供一个API,...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    使用poi导入导出excel的相关包.rar

    标题提到的"使用poi导入导出excel的相关包.rar"是一个包含多种POI库的压缩包,适用于进行Excel文件的导入和导出操作。 该压缩包中的文件包括: 1. poi-ooxml-full-5.0.0.jar 和 poi-ooxml-lite-5.0.0.jar:这两个都...

    POI 导入导出Excel表

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。...通过学习和理解这个"ImportExcel"实例,你可以掌握如何在实际项目中导入和导出Excel数据,提升数据处理能力。

    Java POI 导入导出Excel简单实例源代码

    Java POI 导入导出Excel简单实例源代码 该源代码的jar包,参见以下博文附录截图 Java POI导出EXCEL经典实现 Java导出Excel弹出下载框 http://blog.csdn.net/evangel_z/article/details/7332535 web页面导出Excel...

    poi导入导出excel生成报表

    ### POI 导入导出 Excel 生成报表详解 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java API,其中包括对 Excel 文件的支持。通过 POI,我们可以轻松地实现 Excel 文件的创建、读取、...

    poi导入导出excel功能

    导出Excel功能则涉及创建新的Excel文件并填充数据。同样,我们需要创建`Workbook`,然后添加`Sheet`,接着在`Sheet`上创建`Row`和`Cell`。例如,以下代码展示了如何创建一个简单的Excel表格: ```java import org....

    POI 导入导出Excel表格模板

    综上所述,Apache POI 提供了强大的功能,使 Java 开发者能够轻松地进行 Excel 文件的导入导出以及模板处理。通过合理的工具类设计和最佳实践,我们可以高效地利用 POI 处理日常工作中与 Excel 相关的任务。

Global site tag (gtag.js) - Google Analytics