package com.ss.util.excel;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Excel实体BEAN的属性注解
* @author
* 2012-10-10
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelAnnotation {
String name();//Excel列名
int width();//Excel列宽
int id();//Excel列ID
}
package com.ss.util.excel;
import java.lang.reflect.Field;
import java.util.Comparator;
@SuppressWarnings("unchecked")
public class FieldComparator implements Comparator {
public int compare(Object arg0, Object arg1) {
Field fieldOne = (Field)arg0;
Field fieldTwo = (Field)arg1;
ExcelAnnotation annoOne = fieldOne.getAnnotation(ExcelAnnotation.class);
ExcelAnnotation annoTwo = fieldTwo.getAnnotation(ExcelAnnotation.class);
return annoOne.id()-annoTwo.id();
}
}
package com.ss.util.excel;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.Pattern;
import jxl.format.RGB;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
* 导出Excel文件
*
* @author 2012-10-10
*/
public class ExcelExport {
/**
* 生成Excel
*
* @param models
* 封装需要到处的数据BEAN结合
* @param className
* 导成Excel的实体BEAN包名.类名
* @param tempPath
* 生成Excel存放的临时路径
* @param excelName
* 生成的Excel名
*/
@SuppressWarnings("unchecked")
public static void createExcel(List models, String className,
String tempPath, String excelName) {
Class clasVo = null;
try {
clasVo = Class.forName(className);
OutputStream os = new FileOutputStream(tempPath + "\\" + excelName
+ ".xls");
WritableWorkbook workbook = Workbook.createWorkbook(os);
WritableSheet sheet = workbook.createSheet(excelName, 0);
// 用于标题
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 17,
WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.WHITE);
WritableCellFormat wcf_title = new WritableCellFormat(titleFont);
wcf_title.setBackground(Colour.TEAL,Pattern.SOLID);
wcf_title.setBorder(Border.ALL, BorderLineStyle.DOUBLE, Colour.OCEAN_BLUE);
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_title.setAlignment(Alignment.CENTRE);
// 用于正文
WritableFont NormalFont = new WritableFont(WritableFont.TAHOMA, 11);
WritableCellFormat wcf_center = new WritableCellFormat(NormalFont);
wcf_center.setBorder(Border.ALL, BorderLineStyle.DOUBLE, Colour.GRAY_25);
wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_center.setAlignment(Alignment.CENTRE);
wcf_center.setWrap(true); // 是否换行
sheet.addCell(new Label(0, 0, excelName, wcf_title));
sheet.mergeCells(0, 0, clasVo.getDeclaredFields().length - 1, 0);
// 获取属性
Field[] fields = clasVo.getDeclaredFields();
//按照注解id排序Excel列
Arrays.sort(fields,new FieldComparator());
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
if (field.isAnnotationPresent(ExcelAnnotation.class)) {
//获取该字段的注解对象
ExcelAnnotation anno = field
.getAnnotation(ExcelAnnotation.class);
sheet.setColumnView(i, anno.width());
sheet.addCell(new Label(i, 1, anno.name(), wcf_center));
}
}
int rowId = 2;// 写入第几行 第一行为列头 数据从第二行开始写
for (Object ssTopModel : models) {
int columnId = 0;// 写入第几列 第一列为自动计算的行号 数据从第二列开始写
// 获取该类 并获取自身方法
Class clazz = ssTopModel.getClass();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
if (field.isAnnotationPresent(ExcelAnnotation.class)) {
String methodName = "get"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1);
Method method = clazz.getMethod(methodName);
try {
sheet.addCell(new Label(columnId, rowId, method
.invoke(ssTopModel) == null ? ""
: method.invoke(ssTopModel)
.toString(), wcf_center));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
columnId++;
}
}
rowId++;
}
workbook.write();
workbook.close();
os.flush();
os.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
"java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...
自己写的,将多种数据类型按照指定格式导出到excel文件里。方便实用。
总的来说,这个通用类大大简化了Java应用中数据导出到Excel的过程,只需提供数据,其余的格式化和导出工作都由通用类完成。无论数据结构如何变化,只要保持输入格式一致,就能灵活应对。这使得开发者可以更专注于...
利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...
JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...
在Java编程中,将List集合数据导出到Excel表格是一个常见的需求,特别是在数据分析、报表生成或数据导出等场景。本实例提供了一个通用工具类,能够处理多种不同类型的对象集合,实现了最大化的通用性,使得开发者...
在Java编程中,导出Excel文件是常见的数据处理任务,特别是在数据分析、报表生成或数据交换等场景。这里我们将深入探讨如何使用Java实现XML到Excel的转换以及如何创建一个通用的Excel导出工具类。首先,我们需要理解...
通用类的Java导出Excel方法,导出内容是使用json传递,字段描述使用ArrayList数组传递,
总结来说,"java通用的导入导出excel工具"利用Java反射机制和Apache POI库实现了对Excel文件的高效处理,简化了开发人员在处理Excel数据时的工作。通过理解这些核心概念和操作步骤,你可以更好地利用这个工具进行...
本文将详细讲解如何实现一个自定义的动态导出Excel封装类,以满足各种不同的需求。 首先,我们要理解为什么要自定义封装Excel导出。通常,Java开发中可以使用Apache POI库或JExcelAPI等第三方库来操作Excel。这些库...
在Java编程环境中,导出数据到PDF、Excel和Word格式是一项常见的需求,这通常涉及到文件处理和格式转换。以下是对这个主题的详细说明: 一、PDF(Portable Document Format)文件导出 PDF是一种通用的文件格式,...
Java导出excel工具详细介绍(POI 和 EasyExcel),各种复杂需求情况的导出,代码拿来即可运行,各种情况的例子以及通用工具类都在里面,主要内容如下: 1. 第一部门:详细介绍POI使用以及完成各种复杂的Excel的导出...
总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...
在 Java 开发过程中,常常需要处理各种格式的数据文件,其中 Excel 文件因其便捷性和通用性被广泛使用。Struts2、Spring 和 Hibernate(简称 S2SH)作为经典的 Java Web 开发框架组合,也经常用于开发支持多种功能的...
在导出Excel时,你需要创建一个工作簿(Workbook)对象,然后添加工作表(Sheet),并在工作表中创建行(Row)和单元格(Cell)。数据可以从数据库、集合或其他数据源填充到这些单元格中。以下是一个简单的例子: `...
2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection.json 2. 导入sql到数据库:other/excel.sql 3. idea导入...