-
jxl.write.WritableWorkbook 不支持多线程0
在使用 jxl.write.WritableWorkbook 将数据导出成excel文件的过程中,发现在继承 Thread 类生成的excel中并没有数据(在查询的时候是有数据的)。如果将类 UserExcelExport 声明为 不 继承 Thread,导出的excel中是有数据的。
这是什么一回事呢?代码如下:
action:
public void exportUserTest() { LOG.info("start to export userTest."); // 获取查询表单中的查询条件 String userName = (String) getSearchValue().get("userName"); userName = userName == null ? null : userName.trim(); StringBuffer sqlBuf = new StringBuffer( "select * from user_test where 1=1 "); if (null != userName && !"".equals(userName)) { sqlBuf.append(" and USER_NAME like '%" + userName + "%'"); } LOG.info("search condition: userName=" + userName); List<UserTest> list = null; try { list = userTestService.queryList(sqlBuf.toString()); } catch (Exception e) { LOG.error("query usertest list fail!", e); } String[] head = new String[] { "用户ID", "用户名", "年龄", "注册时间" }; HttpServletResponse resp = ServletActionContext.getResponse(); OutputStream os = null; try { os = resp.getOutputStream(); String name = "用户信息"; resp.reset(); byte[] fileNameByte = (name + ".xls").getBytes("GBK"); String fileName = new String(fileNameByte, "ISO8859-1"); resp.setHeader("Content-disposition", "attachment; filename=" + fileName); resp.setContentType("application/msexcel"); UserExcelExport export = new UserExcelExport(os, name, head, list); Thread thread = new Thread(export); thread.start(); } catch (IOException e) { LOG.error("get OutputStream faile!", e); } catch (Exception e) { LOG.error("export usertest fail!", e); } finally { try { if (null != os) { os.close(); } } catch (IOException e) { LOG.error("close OutputStream faile!", e); } } LOG.info("end to export userTest."); }
导出excel的类
import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.util.List; import org.apache.log4j.Logger; import jxl.Workbook; import jxl.write.WritableFont; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class UserExcelExport extends Thread { private static Logger log = Logger.getLogger(UserExcelExport.class); private OutputStream _os; private String _subject; private String[] _titles; private List<?> _list; public UserExcelExport() { } public UserExcelExport(OutputStream os, String subject, String[] titles, List<?> list) { this._os = os; this._subject = subject; this._titles = titles; this._list = list; } public void run() { createOutPutStreamForObjs(_os, _subject, _titles, _list); } public void createOutPutStreamForObjs(OutputStream os, String subject, String[] titles, List<?> list) { jxl.write.WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(os); int number = 0; int num = 50000; while ((number + 1) * num <= list.size()) { jxl.write.WritableSheet ws = wwb.createSheet(subject + number, number); // 表格头 // 添加带有字型Formatting的对象 jxl.write.WritableFont wfTitle = new jxl.write.WritableFont( WritableFont.TAHOMA, 12, WritableFont.BOLD, false); jxl.write.WritableCellFormat wcfFTitle = new jxl.write.WritableCellFormat( wfTitle); for (int i = 0; i < titles.length; i++) { jxl.write.Label labelCFTitle = new jxl.write.Label(i, 0, titles[i], wcfFTitle); ws.addCell(labelCFTitle); } // 表格内容 jxl.write.WritableFont wf = new jxl.write.WritableFont( WritableFont.TAHOMA, 11, WritableFont.NO_BOLD, false); jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat( wf); int numI = 0; for (int i = number * num; i < (number + 1) * num; i++) { Object[] subList = (Object[]) list.get(i); for (int j = 0; j < subList.length; j++) { String text = subList[j] == null ? "" : subList[j] .toString(); jxl.write.Label labelCF = new jxl.write.Label(j, numI + 1, text, wcfF); ws.addCell(labelCF); } numI++; } number = number + 1; } if (list.size() > number * num) { jxl.write.WritableSheet ws = wwb.createSheet(subject + number, number); // 表格头 // 添加带有字型Formatting的对象 jxl.write.WritableFont wfTitle = new jxl.write.WritableFont( WritableFont.TAHOMA, 12, WritableFont.BOLD, false); jxl.write.WritableCellFormat wcfFTitle = new jxl.write.WritableCellFormat( wfTitle); for (int i = 0; i < titles.length; i++) { jxl.write.Label labelCFTitle = new jxl.write.Label(i, 0, titles[i], wcfFTitle); ws.addCell(labelCFTitle); } // 表格内容 jxl.write.WritableFont wf = new jxl.write.WritableFont( WritableFont.TAHOMA, 11, WritableFont.NO_BOLD, false); jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat( wf); int numI = 0; for (int i = number * num; i < list.size(); i++) { Object[] subList = (Object[]) list.get(i); for (int j = 0; j < subList.length; j++) { String text = subList[j] == null ? "" : subList[j] .toString(); jxl.write.Label labelCF = new jxl.write.Label(j, numI + 1, text, wcfF); ws.addCell(labelCF); } numI++; } } // 写入Exel工作表 wwb.write(); } catch (RowsExceededException e) { log.error("RowsExceededException.", e); } catch (FileNotFoundException e) { log.error("FileNotFoundException.", e); } catch (WriteException e) { log.error("WriteException.", e); } catch (IOException e) { log.error("IOException.", e); } catch(Exception e){ log.error("Others Exception.", e); }finally { // 关闭Excel工作薄对象 try { if (wwb != null) { wwb.close(); } if (null != os) { os.close(); } } catch (WriteException e) { log.error("WriteException.", e); } catch (IOException e) { log.error("IOException.", e); } } } }
2012年6月20日 14:16
相关推荐
jxl导出excel必须的Jar包 import jxl.Workbook; import jxl.format.Alignment;...import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException;
JXL的优势在于它完全用Java编写,因此在任何支持Java的平台上都能运行,包括Windows和Linux,它对中文字符的支持也非常良好。 JXL的主要功能包括: 1. 创建新的Excel文件:开发者可以使用JXL API来构建全新的Excel...
3. **处理图形和图表**:"jxl.biff.drawing.dg"和"jxl.biff.drawingdg"暗示了JXL库对Excel图表的支持。通过`Drawing`类,你可以读取和修改Excel中的图表,包括类型、数据源、标题、坐标轴等属性。 4. **高级特性**...
import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class ExcelWriter { public static void main(String[] args) { try { WritableWorkbook workbook = Workbook.createWorkbook...
at jxl.write.biff.WritableSheetCopier.shallowCopyCells(WritableSheetCopier.java:499) [jxl.ja r:na] at jxl.write.biff.WritableSheetCopier.copySheet(WritableSheetCopier.java:239) [jxl.jar:na] at ...
2. **导入库**:在Java代码中,需要导入相关的包,如`jxl.Workbook`、`jxl.write.WritableWorkbook`等。 3. **读取Excel**:使用`Workbook`类的静态方法`Workbook.getWorkbook(File)`来打开一个Excel文件。 4. **...
- jxl.jar不支持.xlsx格式(Excel 2007以上版本),仅支持.xls格式。 通过上述内容,我们可以看出jxl.jar包在Java中处理Excel文件的强大功能。无论是简单的数据读取还是复杂的格式设定,jxl.jar都能提供简洁的API...
然而,值得注意的是,jxl.jar的主要限制在于它仅支持旧版的Excel文件格式,即.xls文件,而不兼容较新的.xlsx格式。这是由于.xlsx格式是基于Microsoft Office Open XML标准,而jxl.jar的设计并未涵盖这一更新的标准。...
本文将深入探讨如何使用jxl.jar这个完整的Java库来创建Excel文件,并设置字体样式、表格等格式。 首先,我们要理解jxl库的核心功能。jxl库支持读取和写入Excel 97-2003格式的文件(.xls),提供了一个API,允许...
使用`jxl.write.WritableWorkbook`类,我们可以创建一个新的Excel工作簿对象。这个对象代表了Excel文件,可以包含多个工作表。例如: ```java WritableWorkbook workbook = Workbook.createWorkbook(new File(...
import jxl.write.biff.HSSFDataValidationRecord; DataValidationHelper validationHelper = new DataValidationHelper((HSSFWorkbook) workbook); DataValidationConstraint constraint = validationHelper....
这里我们将深入探讨如何使用jxl.jar库在Android环境中操作Excel表格,特别是处理隐藏表的情况。 首先,jxl是一个Java库,它允许我们以编程方式读取和写入Microsoft Excel文件。由于Android系统基于Java,因此可以...
源码中,这些功能主要集中在`jxl.read.biff`和`jxl.write.biff`两个包中。BIFF(Binary Interchange File Format)是Excel早期版本的数据存储格式,而OpenXML是微软从2007版开始引入的新格式。 在读取Excel文件时,...
jxl.jar 通过java操作excel表格的工具类库 支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。...
标题中的"jxl.jar和例子"表明了这个压缩包包含了一个名为"jxl.jar"的文件和相关的示例。这提示我们,这是一个关于使用Java处理Excel文件的资源包。jxl.jar是Java Excel API(JExcelApi)的一个版本,它是一个开源库...
4. **图像与图表**:除了基本的数据操作,jxl.jar还支持插入图片到Excel文件中,包括剪贴画和图像文件。对于图表,虽然不能直接创建,但可以通过读取现有的图表,然后在新的Excel文件中复制和修改。 三、使用示例 ...
jxl.jar是通过java操作excel表格的工具类库,开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的。
本篇文章将深入探讨如何使用jxl.jar库来实现Java操作Excel。 首先,jxl是一个广泛使用的Java库,它允许开发者读写Microsoft Excel文件。它的主要优势在于简单易用且功能丰富,支持多种Excel格式,包括老版本的.BIFF...
java实现数据的导入与导出依赖包 jxl.jar