java生成excel用jxl包



import jxl.write.*;

import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.util.List;


public class Excel {


    /**
     * @param sheetName     Excel sheet 表单名称
     * @param tableHeadName Excel sheet 表头名称
     * @param titlesList    导出的 Excel 表格的表头名称
     * @param objFieldList  要显示 list 里面所装的对象的字段列表集合
     * @param contentList   要写入表格的数据集合
     * @brief 方法功能简要说明:
     * <li>根据查询的list返回Excel表格的方法</li>
     * <li></li>
     * @author - 2012-4-5 wa 创建初始版本
     */
    public static void exportExcel(
            String sheetName, String tableHeadName,
            List<Object> titlesList, List<String> objFieldList,
            List<Object> contentList, WritableSheet sheet, WritableWorkbook book) {

//        WritableWorkbook book = null;
        if (titlesList == null || titlesList.size() == 0) {

            return;
        }
        if (objFieldList == null || objFieldList.size() == 0) {

            return;
        }
        if (titlesList.size() != objFieldList.size()) {

            return;
        }
        if (contentList == null || contentList.size() == 0) {

            return;
        }
        try {


//计算将会生成几个Sheet表单
            int listSize = contentList.size();//获取的数据总数
            int totalCount = 1;//默认的Sheet的个数表单
            int pageSize = contentList.size();//设置个sheet表单的条数
            if (listSize % pageSize == 0) {
                totalCount = listSize / pageSize;
            } else {
                totalCount = listSize / pageSize + 1;
            }

//通过反射获取数据集合里面的数据对象
            Object obj = null;
            Class objClazz = null;
            if (contentList != null && contentList.size() != 0) {
                obj = contentList.get(0);// 获取list里面放置的对象
            }
            if (obj != null) {
                objClazz = obj.getClass();
            }
            Field[] filds = null;
            if (objClazz != null) {
                filds = objClazz.getDeclaredFields();// 获取对象的所有字段
            }
            int totalCol = titlesList.size();// 获取总列数
            for (int n = 0; n < totalCount; n++) {//循环执行次数  即需要建立多少个sheet表单
                int index = 2;// 行数
                int col = 0;// 列数
//                WritableSheet sheet = null;
                if (n != 0) {//表单名称每一页加一个页码数
                    sheet = book.createSheet(sheetName + n, n);
                } else {
                    sheet = book.createSheet(sheetName, n);
                }
// 添加表头
                Label labelHead = new Label(0, 0, tableHeadName);
                sheet.addCell(labelHead);
                sheet.mergeCells(0, 0, titlesList.size() - 1, 0);// 合并表头信息
                WritableCellFormat wc = new WritableCellFormat();

// 设置居中
                wc.setAlignment(Alignment.CENTRE);
                WritableFont wfont = new WritableFont(WritableFont.createFont("隶书"), 20);
                wc.setBorder(Border.ALL, BorderLineStyle.THIN);
                wc.setFont(wfont);
                labelHead.setCellFormat(wc);
                WritableCellFormat wc1 = new WritableCellFormat();
                wc1.setBorder(Border.ALL, BorderLineStyle.THIN);
                wc1.setAlignment(Alignment.CENTRE);
// 生成Excel表头数据
                for (int i = 0, size = titlesList.size(); i < size; i++) {

//设置每一列的字体样式
                    WritableFont font3 = new WritableFont(WritableFont.ARIAL, 12);
                    WritableCellFormat format3 = new WritableCellFormat(font3);
                    format3.setAlignment(jxl.format.Alignment.CENTRE);
                    format3.setBorder(Border.ALL, BorderLineStyle.THIN);
//将每一列的宽度设置为30
                    int length = titlesList.get(i).toString().length() * 2 + 8;
                    sheet.setColumnView(i, length);
                    Label label = new Label(i, 1, titlesList.get(i).toString(),format3);
                    sheet.addCell(label);
                }

// 生成表格数据
                for (int k = n * pageSize; k < n * pageSize + pageSize && k < listSize; k++) {
                    Object objArg = contentList.get(k);// 获取list里面放置的对象
                    Object content = null;// objArg 字段值
                    Object objType = null;// 对应字段的类型
                    boolean fg = false;
                    for (Field fd : filds) {// 循环取出每个字段
                        String fildName = fd.getName();
                        for (String objAttribute : objFieldList) {
                            if (fildName != null && objAttribute != null && objAttribute.equals(fildName)) {
                                boolean flag = fd.isAccessible();
                                fd.setAccessible(true);
                                content = fd.get(objArg);// 获取字段的相关属性值
                                fd.setAccessible(flag);
                                fg = true;
//获取当前字段的类型
                                objType = fd.getType();
                                break;
                            }
                        }
                        if (fg) {// 当为TRUE的时候才可以把值写入Excel表格
                            if (col == totalCol) {// 当前的列数等于表格的总列数时 即一条数据就结束
                                index++;// 行数转为下一行
                                col = 0;// 列数又从0开始
                            }
                            fg = false;
                            String tempContent = "";

//进行特殊数据类型的转化
                            if (objType != null && objType.toString().equals("class java.util.Date")) {
                                if (content != null) {
//时间格式
                                    String columnName = titlesList.get(col).toString();
                                    if (columnName != null && columnName.indexOf("日期") != -1) {
//                                        tempContent = StrDateUtils.getDateToSring((Date) content, 1);
                                    } else {
//                                        tempContent = StrDateUtils.getTimeToSring((Date) content);
                                    }
                                }
                            } else if (objType != null && objType.toString().equals("class java.math.BigDecimal")) {
                                if (content != null) {
//金额格式   BigDecimal 仅仅用于金额
                                    DecimalFormat df = new DecimalFormat("###,##0.00");
                                    tempContent = df.format(content);
                                }
                            } else {
                                if (content != null) {
                                    tempContent = content.toString();
                                }
                            }
                            Label label = new Label(col++, index, tempContent,wc1);
                            sheet.addCell(label);
                        }
                    }
                }
            }


        } catch (Exception e) {

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值