自己在平时开发中,很多地方经常都要用到excel导出,导入功能,于是简单封装了一下方便使用。
主要是基于jxl实现的,通过注解和反射实现excel和pojo直接的转换。
主要实现类ExcelUtil:
public class ExcelUtil { /** * * @Title: export * @Description: 后台数据导出excel * @param clazz 传入结合包含的class * @param list 集合 * @param os 输出流 */ public static void export(Class<?> clazz,List<?> list,OutputStream os){ try{ WritableWorkbook book = Workbook.createWorkbook(os); WritableSheet sheet = book.createSheet("page one", 0); int i=0; Field[] fields = clazz.getDeclaredFields(); List<Object[]> excelField = new LinkedList<Object[]>(); int m=0; for(int j=0;j<fields.length;j++){ ExcelField annotation = fields[j].getAnnotation(ExcelField.class); if(annotation!=null){ Object[] objs = new Object[2]; Label label = new Label(m++, i, String.valueOf(annotation.lableName())); sheet.addCell(label); objs[0] = fields[j]; Class<? extends ExcelConvert> convert = annotation.covertClass(); objs[1] = convert; excelField.add(objs); } } i++; Object[] objs; for(Object info : list) { for(int j=0;j<excelField.size();j++){ try{ objs = excelField.get(j); Label label = null; if(((Field)objs[0]).getType() == Boolean.class || ((Field)objs[0]).getType() == boolean.class){ String value = String.valueOf(ProxyUtil.isser(info, ((Field)objs[0]).getName())); if(!((Class<?>)objs[1]).isInterface()){//不是接口就是实例化 ExcelConvert convert = (ExcelConvert) ((Class<?>) objs[1]).newInstance(); value = (String) convert.convertToExcel(value); } label = new Label(j, i, value); }else{ String value = String.valueOf(ProxyUtil.getter(info, ((Field)objs[0]).getName())); if(!((Class<?>)objs[1]).isInterface()){//不是接口就是实例化 ExcelConvert convert = (ExcelConvert) ((Class<?>) objs[1]).newInstance(); value = (String) convert.convertToExcel(value); } label = new Label(j, i, value); } sheet.addCell(label); }catch(Exception e){ e.printStackTrace(); Label label = new Label(j, i, "/"); sheet.addCell(label); } } i++; } book.write(); book.close(); }catch(Exception e){ e.printStackTrace(); } } /** * * @Title: leadingIn * @Description: excel导入 * @param clazz * @param in * @return */ public static List<?> leadingIn(Class<?> clazz,InputStream in) { try { List<Object> list = new ArrayList<Object>(); Cell cell; int i=0; Map<String,Class<?>> map = new HashMap<String,Class<?>>(); Workbook book = jxl.Workbook.getWorkbook(in); Sheet sheet = book.getSheet(0); List<String> fieldNames = new ArrayList<String>(); Cell[] cells = sheet.getRow(0); for(Cell title : cells){ fieldNames.add(title.getContents()); } map = ProxyUtil.getFields(clazz); for(int row=1;row<sheet.getRows();row++){ i=0; Object obj = clazz.newInstance(); for(String field : fieldNames){ cell = sheet.getCell(i++, row); ProxyUtil.setter(obj, field, cell.getContents(), map.get(field)); } list.add(obj); } in.close(); return list; } catch (Exception e) { try { in.close(); } catch (IOException e1) { e1.printStackTrace(); } e.printStackTrace(); } return null; } /** * * @Title: leadingIn * @Description: excel导入 * @param clazz * @param convert * @param in * @return */ public static List<?> leadingIn(Class<?> clazz,Map<String,ExcelConvert> convert,InputStream in) { try { List<Object> list = new ArrayList<Object>(); jxl.Cell cell; int i=0; Map<String,Class<?>> map = new HashMap<String,Class<?>>(); ExcelConvert cc; jxl.Workbook book = jxl.Workbook.getWorkbook(in); jxl.Sheet sheet = book.getSheet(0); List<String> fieldNames = new ArrayList<String>(); Cell[] cells = sheet.getRow(0); for(Cell title : cells){ fieldNames.add(title.getContents()); } map = ProxyUtil.getFields(clazz); for(int row=1;row<sheet.getRows();row++){ i=0; Object obj = clazz.newInstance(); for(String field : fieldNames){ cell = sheet.getCell(i++, row); cc = convert.get(field); if(cc!=null && !cc.getClass().isInterface()) ProxyUtil.setter(obj, field, cc.convertToObj(cell.getContents()), map.get(field)); else ProxyUtil.setter(obj, field, cell.getContents(), map.get(field)); } list.add(obj); } in.close(); return list; } catch (Exception e) { try { in.close(); } catch (IOException e1) { e1.printStackTrace(); } e.printStackTrace(); } return null; } }
可以使用maven导入:
<groupId>tk.yaxin</groupId> <artifactId>xexcel</artifactId> <version>0.0.1-Releases</version>
use example:
export excel:
1-step:use @ExcelField(lableName="sex") on POJO's field
export excel:
1-step:use @ExcelField(lableName="sex") on POJO's field
2-setp: use ExcelUtil's static method export(Class<?> clazz,List<?> list,OutputStream os).
if need convert the POJO field's value,you make create class implement ExcelConvert.
and @ExcelField(lableName="sex",covertClass=SexConvert.class)
if need convert the POJO field's value,you make create class implement ExcelConvert.
and @ExcelField(lableName="sex",covertClass=SexConvert.class)
import excel:
make sure excel cell's title equals class field's name.
if need convert the excel cell value,you make create class implement ExcelConvert.
and put map,the key is field's name,value is ExcelConvert implement instance.
call the static method:
leadingIn(Class<?> clazz,InputStream in)
leadingIn(Class<?> clazz,Map<String,ExcelConvert> convert,InputStream in)
call the static method:
leadingIn(Class<?> clazz,InputStream in)
leadingIn(Class<?> clazz,Map<String,ExcelConvert> convert,InputStream in)
-
Project URL:
相关推荐
"Excel导入导出封装"是一个专门解决这一问题的测试类库,旨在简化这一过程,提高开发效率。 首先,我们要理解Excel导入和导出的基本概念。导入是指将外部数据源(如CSV文件、数据库记录等)读入到Excel工作表中,而...
这是一个利用poi封装的excel导入导出通用组件,详细用法请访问:http://fuyangrong.top/2018/01/29/excel导入导出通用组件/
标题 "多功能通用Excel导入导出数据" 描述的是一个针对Excel数据处理的工具或库,它已经被二次封装,简化了导入导出操作。用户只需引入指定的jar包,并通过一行代码即可实现数据的导入和导出功能。描述中强调了其...
标题"Excel 导入导出 (asp.net/c#)"所涉及的核心知识点主要包括Excel文件操作、C#编程以及ASP.NET web应用程序开发。下面我们将详细探讨这些主题。 1. **Excel文件操作**: - **Microsoft.Office.Interop.Excel**:...
在"基于poi的excel导入导出封装"这个主题中,我们将深入探讨如何使用Apache POI库来实现Excel文件的导入和导出功能。 **一、Apache POI基本概念** 1. **工作簿(Workbook)**: 在Apache POI中,工作簿是Excel文件...
这个"npoi (excel导入导出)帮助类"是一个专门为处理Excel数据导入和导出设计的工具集,它利用Npoi的功能来简化操作流程。下面我们将详细探讨Npoi的核心功能以及如何使用这个帮助类来实现Excel的导入和导出。 首先,...
在提供的压缩包文件中,可能包含已经封装好的方法和DLL,这些预封装的方法简化了Excel导入导出的过程,使得开发者可以直接调用,而无需关心底层的实现细节。这通常会提高开发效率,减少错误,并且便于代码维护。 ...
在这个主题中,我们将深入探讨如何使用易语言实现超级列表框与Excel之间的数据导入导出,以及涉及到的关键技术。 首先,我们要明白Excel导入导出的核心在于处理数据的读取和写入。在易语言中,这通常需要借助第三方...
用Delphi封装的Excel导入导出,原创
在实际应用中,你下载的"Excel工具类_导入导出"可能包含一个已经封装好的工具类,这个类集成了上述的功能,提供了简单易用的方法来处理Excel的导入导出。使用时,只需按照注释说明调用相应的方法,传入参数即可完成...
以下是对"Excel文件导入导出"这一主题的详细解释: 一、Excel文件的导入 1. Python中的Pandas库:Python编程语言提供了Pandas库,它能够方便地读取和写入Excel文件。使用`pandas.read_excel()`函数可以将Excel文件...
在Java开发中,处理Excel数据是一项常见的任务,无论是读取大量数据进行分析,还是批量导入导出信息。这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入...
"ExcelConfig.cs"可能是整个Excel导入导出的配置类,它可能集合了一组`ExcelConfigColumn`实例,用于定义整个工作表的结构和行为。开发者可以通过修改这个配置来控制数据的导入导出过程,比如设置特定列的排序顺序、...
在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...
本项目是基于NPOI实现的一个强类型Excel导入导出组件,旨在简化开发者的工作流程,提高代码的可维护性和可读性。 NPOI的核心功能在于对Excel文件的读写操作。通过NPOI,我们可以创建新的Excel工作簿,添加工作表,...
首先,"导入导出EXCEL"是指将数据库或其他数据源的数据写入Excel文件,或从Excel文件中读取数据并加载到程序的数据结构,如DataSet。在.NET中,通常使用Microsoft.Office.Interop.Excel库(需要安装Office)或者开源...
在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公流程非常有用。 首先,让我们了解一下Apache POI的核心组件HSSF(Horrible Spreadsheet Format)和XSSF...
标题中的“好用的excel导入导出工具for Java”指的是Java开发中的一种专门处理Excel的库,它允许开发者以编程方式读取Excel文件并将其内容转换为易于操作的数据结构,同时也能将数据写入Excel文件。这样的工具通常...
在ThinkPHP中,你可以结合PHPExcel库来实现CSV和Excel文件的导入导出功能,框架的便捷性使得整个过程更加高效。 4. **`demo.php`**:这可能是项目的示例代码,展示如何在实际项目中调用PHPExcel和ThinkPHP的相关...
poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值), poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值) poi导出导入封装(使用注解建立实体与excel映射关系+反射设置...