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) { } } }
java生成excel用jxl包
最新推荐文章于 2020-06-07 18:00:37 发布