public class ExcelUtils {
/** 日志类 */
private static Logger log = Logger.getLogger(ExcelUtils.class);
/**
*
* @brief 方法功能简要说明:
* <li>根据查询的list返回Excel表格的方法</li>
* <li></li>
*
* @author - 2012-4-5 wa 创建初始版本
*
* @param response
* HttpServletResponse 响应对象
* @param filename
* 导出的 Excel 文件名称
* @param sheetName
* Excel sheet 表单名称
* @param tableHeadName
* Excel sheet 表头名称
* @param titlesList
* 导出的 Excel 表格的表头名称
* @param objFieldList
* 要显示 list 里面所装的对象的字段列表集合
* @param contentList
* 要写入表格的数据集合
*/
public static void exportExcel(HttpServletResponse response,
String filename, String sheetName, String tableHeadName,
List<Object> titlesList, List<String> objFieldList,
List<Object> contentList) {
ServletOutputStream out = null;
WritableWorkbook book = null;
if (titlesList == null || titlesList.size() == 0) {
log.info("导出的 Excel 表格的表头名称 titlesList 为空");
return;
}
if (objFieldList == null || objFieldList.size() == 0) {
log.info("导出的 Excel 要显示list里面所装的对象的字段列表集合 objFieldList 为空");
return;
}
if(titlesList.size() != objFieldList.size()){
log.info("导出的 Excel 要显示表头个数和列字段个数不相等");
return;
}
if (contentList == null || contentList.size() == 0) {
log.info("导出的 Excel 要写入表格的数据集合 contentList 为空");
return;
}
try {
response.setContentType("application/vnd.ms-excel");
response.reset();
response.setHeader("Content-disposition", "attachment; filename=\""
+ new String(filename.getBytes(), "ISO8859-1") + "\"" + ".xls");
//获取输出流
out = response.getOutputStream();
// 获取工作表
book = Workbook.createWorkbook(out);
//计算将会生成几个Sheet表单
int listSize = contentList.size();//获取的数据总数
int totalCount = 1;//默认的Sheet的个数表单
int pageSize = 65000;//设置个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.setFont(wfont);
labelHead.setCellFormat(wc);
// 生成Excel表头数据
for (int i = 0, size = titlesList.size(); i < size; i++) {
Label label = new Label(i, 1, titlesList.get(i).toString());
sheet.addCell(label);
//设置每一列的字体样式
WritableFont font3=new WritableFont(WritableFont.ARIAL,9);
WritableCellFormat format3=new WritableCellFormat(font3);
format3.setAlignment(jxl.format.Alignment.CENTRE);
//将每一列的宽度设置为30
sheet.setColumnView(i, 30, format3);
}
// 生成表格数据
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);
sheet.addCell(label);
}
}
}
}
book.write();// 写出Excel表格
out.flush();
} catch (Exception e) {
log.error(" 导出表格 ExcelUtils 的方法 exportExcel 出现异常……………………………", e);
}finally{
try {
if (book != null) {
book.close();
}
if (out != null) {
out.close();
}
} catch (Exception e) {
log.error(" 导出表格 ExcelUtils 的方法 exportExcel 关闭流出现异常……………………………", e);
}
}
}
}
分享到:
相关推荐
本文将详细介绍如何使用`jxl`库创建一个导出Excel的工具类,以及这个工具类如何帮助我们简化代码,提高效率。 首先,`jxl`库提供了对Excel文件的读写支持,包括工作簿(Workbook)、工作表(Worksheet)、行(Row)...
为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中的示例代码。通过阅读和运行这些代码,你可以更深入地了解如何在实际项目中应用jxl和Apache POI。 总的来说,jxl和Apache ...
1. 创建`WritableWorkbook`对象:`WritableWorkbook`是`jxl`库中的核心类,用于表示一个可写的Excel工作簿。我们可以使用`Workbook.createWorkbook()`方法创建一个新的工作簿,指定输出的文件路径。 ```java ...
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
总结来说,`jxl`库为Java开发者提供了一个强大而灵活的工具,用于生成和处理Excel文件。通过学习和实践,我们可以利用它轻松地实现数据的导出和导入功能,满足各种业务场景的需求。在开发过程中,应根据实际情况选择...
在Java编程环境中,JXL库是一个非常流行的工具,用于读取和写入Excel文件。它提供了简单易用的API,使得开发者能够方便地处理Excel数据,而无需依赖Microsoft Office套件。本文将深入探讨如何使用JXL进行Excel的导入...
jxl库是由JExcelAPI项目提供的,它是一个开源的Java库,专门用于处理Microsoft Excel文件。在本文中,我们将深入探讨jxl的使用方法,包括它的API和实际操作技巧,以帮助开发者更好地利用这一工具。 首先,让我们来...
在Java编程环境中,导出Excel...总的来说,JXL库为Java开发者提供了一个强大的工具,使得与Excel文件的交互变得更加容易。通过以上步骤,你可以轻松地实现从数据库或其他数据源导出数据到Excel文件,满足各种业务需求。
总的来说,jxl.jar是Java开发环境下处理Excel数据的得力工具,无论是在数据分析、报表生成还是数据导入导出场景下,都能发挥重要作用。通过熟练掌握jxl.jar的使用,开发者可以大大提高工作效率,减少手动操作的繁琐...
以下是一个简单的使用jxl导出Excel的Java代码示例: ```java import java.io.FileOutputStream; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl....
在Java编程环境中,JXL库是一个非常流行的工具,用于读取和写入Excel文件。"jxl 导出 excel"的标题和描述暗示了我们将会讨论如何使用JXL库从数据库中导出数据到Excel文档的过程。这个过程涉及到Java编程、数据库操作...
JXL库是一个Java库,专门用于读写Microsoft Excel文件,它为开发者提供了一种便捷的方式来处理Excel数据,无需依赖Microsoft Office。本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其...
jxl导出Excel基础,非常有用的一个东西,漫漫看
标题中的“jxl导出excel文件简单示例”是指使用jxl库来创建和导出Excel文件的一个基本操作。jxl是一个Java库,它允许开发者读取、写入和修改Excel文件,尤其在处理批量数据时非常方便。在这个示例中,我们将探讨如何...
总结来说,"jxl导出excel.zip"提供的工具可以帮助Java开发者高效地处理Excel导出任务,利用JXL库的强大功能,结合自定义的工具类和注解,能够灵活、便捷地将业务数据转换为用户友好的Excel文件。对于需要处理大量...
jxl库提供了一个`Workbook`类,它代表Excel工作簿,而`Sheet`类则表示工作簿中的单个工作表。你可以通过`Workbook.createWorkbook()`方法创建一个新的工作簿,然后使用`Workbook.addSheet()`方法添加新的工作表。 ...
以下是一个基本的代码示例,展示了如何利用JXL导出Excel的步骤: 1. 创建工作簿对象: ```java WorkbookSettings ws = new WorkbookSettings(); // 如果需要设置编码(例如中文字符),可以这样: ws.set...
这个标题表明我们要讨论的是一个使用jxl库来帮助从数据库中导出数据并将其格式化为Excel文件的工具包。jxl是一个广泛使用的Java库,允许开发者读取、写入和修改Excel文件。这种工具包通常用于数据分析、报表生成或者...
通过学习JXL API文档和示例,开发者可以轻松地在Java项目中处理Excel文件,无论是读取数据、分析报表还是生成自定义的Excel文件,JXL都提供了一个强大且易于使用的工具集。对于需要处理Excel的Java开发者来说,熟悉...
一个实用的java导入导出Excel工具类,基于开源的Java Excel API(JXL)纯java类库实现,Windows和Linux系统下均可使用。 主要实现功能如下: 导出:将List转化为Excel(listToExcel)。 导入:将Excel转化为List...