`

JAVA导出Excel通用类

 
阅读更多

JAVA导出Excel通用类  

2010-07-14 09:53:11|  分类: 技术交流|举报|字号 订阅

 
 
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 MrGao
 * 2010-7-12下午05:10:37
 */
@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 MrGao 2010-7-13下午02:19:51
 */
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文档通用工具类

    "java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    poi导出excel通用类

    标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...

    java导出数据到excel通用类

    自己写的,将多种数据类型按照指定格式导出到excel文件里。方便实用。

    Java导出数据到Excel通用类,有使用范例,非常详细一看即明

    总的来说,这个通用类大大简化了Java应用中数据导出到Excel的过程,只需提供数据,其余的格式化和导出工作都由通用类完成。无论数据结构如何变化,只要保持输入格式一致,就能灵活应对。这使得开发者可以更专注于...

    POI导出Excel表格通用工具类

    利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...

    JAVA中excel导入导出通用方法

    JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...

    java中,list集合数据导出到excel表格通用工具类

    在Java编程中,将List集合数据导出到Excel表格是一个常见的需求,特别是在数据分析、报表生成或数据导出等场景。本实例提供了一个通用工具类,能够处理多种不同类型的对象集合,实现了最大化的通用性,使得开发者...

    Java Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    在Java编程中,导出Excel文件是常见的数据处理任务,特别是在数据分析、报表生成或数据交换等场景。这里我们将深入探讨如何使用Java实现XML到Excel的转换以及如何创建一个通用的Excel导出工具类。首先,我们需要理解...

    Java poi 导出Excel

    通用类的Java导出Excel方法,导出内容是使用json传递,字段描述使用ArrayList数组传递,

    java通用的导入导出excel工具

    总结来说,"java通用的导入导出excel工具"利用Java反射机制和Apache POI库实现了对Excel文件的高效处理,简化了开发人员在处理Excel数据时的工作。通过理解这些核心概念和操作步骤,你可以更好地利用这个工具进行...

    自定义动态导出excel封装类

    本文将详细讲解如何实现一个自定义的动态导出Excel封装类,以满足各种不同的需求。 首先,我们要理解为什么要自定义封装Excel导出。通常,Java开发中可以使用Apache POI库或JExcelAPI等第三方库来操作Excel。这些库...

    java导出文件到 pdf,excel,word

    在Java编程环境中,导出数据到PDF、Excel和Word格式是一项常见的需求,这通常涉及到文件处理和格式转换。以下是对这个主题的详细说明: 一、PDF(Portable Document Format)文件导出 PDF是一种通用的文件格式,...

    Java导出excel工具详细介绍(POI 和 EasyExcel),各种复杂需求情况的导出(包括动态设置合并单元格等)

    Java导出excel工具详细介绍(POI 和 EasyExcel),各种复杂需求情况的导出,代码拿来即可运行,各种情况的例子以及通用工具类都在里面,主要内容如下: 1. 第一部门:详细介绍POI使用以及完成各种复杂的Excel的导出...

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

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

    java导出Excel(s2sh)

    在 Java 开发过程中,常常需要处理各种格式的数据文件,其中 Excel 文件因其便捷性和通用性被广泛使用。Struts2、Spring 和 Hibernate(简称 S2SH)作为经典的 Java Web 开发框架组合,也经常用于开发支持多种功能的...

    通用excel导入/导出 (poi)

    在导出Excel时,你需要创建一个工作簿(Workbook)对象,然后添加工作表(Sheet),并在工作表中创建行(Row)和单元格(Cell)。数据可以从数据库、集合或其他数据源填充到这些单元格中。以下是一个简单的例子: `...

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

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

Global site tag (gtag.js) - Google Analytics