`

反射读取解析excel模板到集合

阅读更多
#调用
List<ModelTest> list = readExcelForList(inputStream, fileName, ModelTest.class);




#excel处理工具类
public class TestUtil {


.........


public <T> List<T> readExcelForList(InputStream input, String fileName, Class<T> cls) {
		List<T> dataList = new ArrayList<T>();
		//InputStream input = null;
		try {
			//input = new FileInputStream(filePath);
			Workbook wb = null;
			if (fileName.endsWith(".xls")) {
				wb = new HSSFWorkbook(input);
			} else {
				wb = new XSSFWorkbook(input);
			}
			Sheet sheet = wb.getSheetAt(0);
			
			// 读取表头
			Row row = sheet.getRow(0);
			String[] titles = new String[]{"数据来源"};
			int rowIndex = 1;
			int rowNum= sheet.getLastRowNum();
			
			for (int i = 1; i < rowNum + 1; i++) {
				dataList.add((T) getRowValueTemplate(sheet, i, titles, AssetsMutiltm.class));
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return dataList;
	}
	
	static DataFormatter formatter = new DataFormatter();
	
	private <T> T getRowValueTemplate(Sheet sheet, int rowIndex, String[] columnArr, Class<T> cls) {
		Row row = sheet.getRow(rowIndex);
		T t = null;
		try {
			t = cls.newInstance();
		} catch (InstantiationException e1) {
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			e1.printStackTrace();
		}
		Method[] methods = cls.getMethods();
		for (Method m : methods) {
			ExcelAnnotationForMethod an = m.getAnnotation(ExcelAnnotationForMethod.class);
			if (null != an) {
				for (int i = 0; i < columnArr.length; i++) {
					if (an.columnName().equals(columnArr[i])) {
						String type = an.type();
						Cell cell = row.getCell(i);
						if (null == cell) {
							cell = row.createCell(i);
						}
						try {
							if ("string".equals(type)) {
								m.invoke(t, formatter.formatCellValue(cell));
							} else if ("date".equals(type)) {
								int cellType = cell.getCellType();
								if (cellType == Cell.CELL_TYPE_STRING) {
									String value = cell.toString().trim();
									m.invoke(t, (Object) null);
								} else if (cellType == Cell.CELL_TYPE_NUMERIC) {
									Date date = cell.getDateCellValue();
									m.invoke(t, date);
								}
								
							} else if ("int".equals(type)) {
								m.invoke(t, formatter.formatCellValue(cell));
							} else {
								m.invoke(t, getCellValueTemplate(row, i));
							}
							
						} catch (IllegalArgumentException e) {
							e.printStackTrace();
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						} catch (InvocationTargetException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
		return t;
	}
	
	private Object getCellValueTemplate(Row row, int col) {
		if (row == null) {
			return "";
		}
		Cell cell = row.getCell(col);
		
		return getCellValueTemplate(cell);
	}
	
	private Object getCellValueTemplate(Cell cell) {
		if (cell == null) {
			return "";
		}else{
			Date date = null;
			String value = "";
			if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
				if(DateUtil.isCellDateFormatted(cell)){
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
					date = cell.getDateCellValue();
					if (null != date) {
						value = sdf.format(date);
					}
					return date;
				} else {
					value = formatter.formatCellValue(cell);
				}
			} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
				value = formatter.formatCellValue(cell);
			} else {
				value = cell.toString().trim();
			}
			try {
				// This step is used to prevent Integer string being output with
				// '.0'.
				Float.parseFloat(value);
				value=value.replaceAll("\\.0$", "");
				value=value.replaceAll("\\.0+$", "");
				return value;
			} catch (NumberFormatException ex) {
				return value;
			}
		}

	}


.........



}





#注解类
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.METHOD)
public @interface ExcelAnnotationForMethod {
	String columnName ();
	String type() default "string";
}







#model
public class ModelTest{
    private Long id;
    private String source;

    private int rowIndex;


    public Long getId( ){
		    return id;
    }
    public void setId(Long id){
		    this.id=id;
    }

    public String getSource( ){
		    return source;
    }
    @ExcelAnnotationForMethod(columnName="数据来源")
    public void setSource(String source){
		    this.source=source;
    }

	public int getRowIndex() {
		return rowIndex;
	}
	public void setRowIndex(int rowIndex) {
		this.rowIndex = rowIndex;
	}
    }
分享到:
评论

相关推荐

    JS读取解析Excel

    ### JS读取解析Excel知识点详解 #### 一、前言 在现代Web开发中,处理文件上传和数据解析是常见的需求之一,尤其是对于Excel文件的处理。JavaScript(JS)作为前端开发的主要语言,通过特定的技术手段,能够实现对...

    phpExcel,读取解析excel文件

    用于php读取解析excel文件,用来操作Office Excel 文档的一个PHP类库,它基于微软的Openxml标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。整体来说是一个不错的Excel操作类。

    读取Excel文件将数据存入map集合

    本篇文章介绍了一个方法,该方法能够读取Excel文件并将其中的数据存储到Java中的`Map`集合里,便于后续进行数据分析或处理。 #### 方法概述 方法签名如下: ```java public Map, Map, String&gt;&gt; importReportExcel...

    纯前台读取并解析Excel详解

    总结来说,纯前端读取和解析Excel文件涉及到JavaScript的文件操作、浏览器API的使用以及第三方库的选择。对于IE浏览器,可以使用ActiveX对象,但不推荐,因为这种方法限制较多。对于其他现代浏览器,使用如`excel...

    前端js解析/读取excel文件

    本文将深入探讨如何使用JavaScript在浏览器端解析和读取Excel文件,主要基于开源库`js-xlsx`。 `js-xlsx`是一个强大的JavaScript库,专门用于解析和操作Excel文件(.xlsx和.xls格式)。它支持读取二进制文件、Base...

    使用jxl解析excel(.xls)固定模板(智联简历为例)

    在Java编程环境中,处理Excel文件是一项常见的任务,特别是在数据导入导出、数据分析或者报表生成时。JXL库是一个广泛使用的开源库,它允许...结合上述步骤,你可以在Java项目中实现一个完整的Excel固定模板解析功能。

    asp.net使用npoi读取excel模板并导出下载详解

    在***中使用NPOI读取Excel模板并导出下载的详细过程涉及到多个知识点,包括对NPOI库的理解、Excel文件的读写操作、以及*** Web应用程序中的文件处理。下面将详细介绍这些内容。 ### 1. NPOI库简介 NPOI是一个开源的...

    Java通过反射将 Excel 解析成对象集合实例

    Java 通过反射将 Excel 解析成对象集合实例 Java 通过反射将 Excel 解析成对象集合实例是指使用 Java 语言通过反射机制将 Excel 文件中的数据解析成对象集合实例。这种方法非常实用,能够将 Excel 文件中的数据快速...

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    jxl 读取Excel模板并写入数据通用工具类

    接下来,我们可以创建一个名为`ExcelUtils`的工具类,其中包含两个主要方法:`readTemplate`用于读取Excel模板,`writeData`用于将数据写入到模板中。这里我们假设模板中的某些单元格被标记为数据占位符,这些占位符...

    poi包 EXCEL模板读取填数据并导出以及在模板某行插入新的行

    标题中的“poi包 EXCEL模板读取填数据并导出以及在模板某行插入新的行”涉及到了Apache POI库的使用,这是一个Java API,专门用于处理Microsoft Office格式的文件,如Excel。以下是对这个主题的详细解释: Apache ...

    使用POI解析excel文件并写入数据库

    这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL查看数据库 在MYSQL中运行项目db目录下的sql文件,创建...

    NPOI批量读取excel文件内容写入excel模板.rar

    在这个"NPOI批量读取excel文件内容写入excel模板.rar"压缩包中,包含的资源可以帮助我们理解如何利用NPOI来批量处理Excel数据,并将读取到的信息填入预设的Excel模板中。这里我们将详细探讨NPOI的使用方法、批量读取...

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

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

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

    本篇将详细介绍如何使用Apache POI来读取Excel模板,复制工作表(Sheet)以及复制行,并特别关注如何处理合并单元格的情况。 首先,我们需要引入Apache POI的相关依赖库到我们的项目中。在Maven项目中,可以在pom....

    java、Android实现Excel表的解析读取操作

    在IT行业中,尤其是在数据处理和应用开发领域...通过以上方法,你可以在Java和Android环境中有效地解析和读取Excel文件,满足数据处理的需求。无论是简单的数据展示还是复杂的业务逻辑,都能游刃有余地处理Excel数据。

    js读取本地excel文档数据

    ##### 2.1 使用ActiveXObject读取Excel文件 在IE浏览器环境下,可以通过`ActiveXObject`对象来操作Office应用程序,例如Excel。这种方式适用于客户端环境,并且要求用户的浏览器支持ActiveX控件。 ##### 2.2 代码...

    易语言读取excel文件到高级表格

    Excel文件通常用于存储和处理结构化的表格数据,而“读取Excel文件到高级表格”则是将Excel中的数据导入到易语言的高级表格组件中,便于进一步的处理和显示。 首先,我们需要理解易语言中的高级表格组件。这是一个...

    excel模板读写

    1. **读取Excel模板** - **打开模板文件**:使用`WorkbookFactory.create()`方法,传入模板文件的路径,可以创建一个Workbook对象,它是Excel文件的抽象表示。 - **获取Sheet对象**:Workbook对象包含了多个Sheet...

    Excel 读取,读取Excel到DataSet

    Excel 读取 读取Excel到Dataset中

Global site tag (gtag.js) - Google Analytics