- 浏览: 50236 次
- 性别:
- 来自: 深圳
最新评论
-
qbq:
执行下这个试试service.bat installservi ...
tomcat启动错误java.io.IOException: 文件名、目录名或卷标语法不正确。 -
yfkscu:
<p>一个时间复杂度 ...
面试题目 -
hngslifeng:
用数据库的方法可以解决,先每一个字母一个个插入数据库,然后按字 ...
面试题目 -
miaozp:
<p>String str = "qqq ...
面试题目 -
miaozp:
如果出现字母次数最多的是多个字母呢?
好些人把这种情况给忽略了 ...
面试题目
最近看了下java的反射内容,自己大概有了一点点概念。主要学习了 Method 和 Field对象的基本用法。所以用反射做了个导出。主要作用是把list列表里的对象的属性与要导出的属性对应上,在业务层我们只需要放入对象集合。和一定的简单规则那么就可以生成相应的excel文件。考虑的不好的地方请各位指出
转换类:
规则类:
具体规则类
vo对象类
测试类:
下面是整个工程 我是用idea做的 可能和eclipse有冲突。。
转换类:
public class CommunUtil { //将对象转换为 Map public static Map getMap(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException { Map objectMsp = new HashMap(); //获得对象的类型 Class classType = obj.getClass(); //通过构造方法创建一个对象 Object objCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); Field[] fields = classType.getDeclaredFields(); for(int i=0;i<fields.length;i++){ Field field = fields[i]; String fieldName = field.getName();//获得属性名称 //getXXX 和 setXXX 方法 String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); Method getMethod = classType.getDeclaredMethod(getMethodName,new Class[]{}); Object value = getMethod.invoke(obj,new Object[]{}); objectMsp.put(fieldName,value); //设置对象 相应的属性的值 } return objectMsp; } //复制一个对象 public static Object getObject(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException { Map objectMsp = new HashMap(); //获得对象的类型 Class classType = obj.getClass(); //通过构造方法创建一个对象 Object objCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); Field[] fields = classType.getDeclaredFields(); for(int i=0;i<fields.length;i++){ Field field = fields[i]; String fieldName = field.getName();//获得属性名称 //getXXX 和 setXXX 方法 String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); String setMethodName = "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); Method getMethod = classType.getDeclaredMethod(getMethodName,new Class[]{}); Method setMethod = classType.getDeclaredMethod(setMethodName,new Class[]{field.getType()}); Object value = getMethod.invoke(obj,new Object[]{}); // System.out.println("fieldName : " + value + field.getType()); //设置对象 相应的属性的值 setMethod.invoke(objCopy,new Object[]{value}); } return objCopy; } }
规则类:
public abstract class Rules implements Serializable { // StreamTokenizer streamTokenizer = protected List[] rowTitle; protected Map<String,String> rowMap; protected List cols; protected Map<Integer,String> rMap; public Map<Integer, String> getRMap() { return rMap; } public void setRMap(Map<Integer, String> rMap) { this.rMap = rMap; } public Rules(){ rMap = new HashMap<Integer,String>(); rowMap = new HashMap<String,String>(); cols = new ArrayList(); this.init(); } public Rules(Map<String,String> r){ rMap = new HashMap<Integer,String>(); this.rowMap = r; cols = new ArrayList(); this.init(); } public abstract void init(); public List[] getRowTitle() { return rowTitle; } public void setRowTitle(List[] rowTitle) { this.rowTitle = rowTitle; } public abstract void setRowTitle(); public Map<String, String> getRowMap() { return rowMap; } public void setRowMap(Map<String, String> rowMap) { this.rowMap = rowMap; } public List getCols() { return cols; } public void setCols(List cols) { this.cols = cols; } }
具体规则类
public class UserRules extends Rules { public void init() { //To change body of implemented methods use File | Settings | File Templates. //初始化时设置相应的字段 this.rMap.put(new Integer(rMap.size()),"userName"); this.rMap.put(new Integer(rMap.size()),"userAddress"); this.rMap.put(new Integer(rMap.size()),"userAge"); this.rMap.put(new Integer(rMap.size()),"clickCount"); this.rMap.put(new Integer(rMap.size()),"userLong"); this.rMap.put(new Integer(rMap.size()),"userSalary"); // this.rMap.put(new Integer(rMap.size()),"userMount"); this.setRowTitle(); } //设置标题格式 public void setRowTitle() { //To change body of implemented methods use File | Settings | File Templates. this.rowTitle = new List[2]; List rList = new ArrayList(); rList.add(new String[]{"用户姓名","1","0"}); rList.add(new String[]{"用户地址","0","1"}); rList.add(new String[]{"用户年龄","0","1"}); rList.add(new String[]{"大列标题","1","1"}); this.rowTitle[0] = rList; List rList2 = new ArrayList(); rList2.add(new String[]{"用户姓名","0","0"}); rList2.add(new String[]{"点击数","0","0"}); rList2.add(new String[]{"总数","0","0"}); rList2.add(new String[]{"工资","0","0"}); rList2.add(new String[]{"用户数量","0","0"}); // rList2.add(new String[]{"大列标题1","0","0"}); // rList2.add(new String[]{"大列标题2","0","0"}); // rList.add(new String[]{"大列标题","0","0"}); this.rowTitle[1] = rList2; } }
vo对象类
public class User { private String userName; private String userAddress; private int userAge; private int clickCount; private long userLong; private String userSalary; private String userMount; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public int getClickCount() { return clickCount; } public void setClickCount(int clickCount) { this.clickCount = clickCount; } public long getUserLong() { return userLong; } public void setUserLong(long userLong) { this.userLong = userLong; } public String getUserSalary() { return userSalary; } public void setUserSalary(String userSalary) { this.userSalary = userSalary; } public String getUserMount() { return userMount; } public void setUserMount(String userMount) { this.userMount = userMount; } }
测试类:
public class ExcelWriter { public static void main(String [] args){ // Date d1 = new Date(System.currentTimeMillis()-604800000L); // Date d2 = new Date(); // System.out.println(d1+"\n" + d2); ExcelWriter writer = new ExcelWriter(); List userList = new ArrayList(); for(int i=0;i<10;i++){ User user = new User(); user.setClickCount(1+i); user.setUserAddress("userAddress" + i); user.setUserAge(20+i); user.setUserLong(new Long(10000)+i); user.setUserMount("userMount" + i); user.setUserName("userName" + i); user.setUserSalary("userSalary" + i); userList.add(user); } try { writer.exportExcel(userList); //导出文件 UserRules ur = new UserRules(); writer.exportExcel(userList,ur); } catch (InvocationTargetException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (NoSuchMethodException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (InstantiationException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (IllegalAccessException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (WriteException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } //设置标题 public void exportExcel(List list,Rules rules) throws IOException, WriteException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { List[] rowList = rules.getRowTitle(); Label lable = null; File file = new File("e:\\mytest\\testjxl3.xls"); WritableWorkbook workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0); Map rMap = rules.getRMap(); //得到字段信息 //处理标题 int i=0; //记录行数 for(;i<rowList.length;i++){ List row = rowList[i]; for(int cop=0, j=0;j<row.size();cop++,j++){ //得到每列标题的信息 包括跨行和跨列的信息 String [] title = (String[]) row.get(j); String ctitle = title[0]; lable = new Label(cop,i,ctitle); sheet.addCell(lable); int r = Integer.parseInt(title[1]); int c = Integer.parseInt(title[2]) ; if( r != 0 || c != 0){ //合并单元格 sheet.mergeCells(cop,i,cop+c,r+i); cop += c; } } } //处理要导出的数据 List cols = rowList[rowList.length-1]; //得到要导出的列的信息 int rowCount = list.size() + rowList.length; //总行数 if( list != null && list.size()>0){ for(int n=0;n<list.size();n++){ Map objectMap = CommunUtil.getMap( list.get(n)); //将对象转换成 == Map for(int k=0;k<rMap.size();k++){ Object key = rMap.get(new Integer(k)); String columnValue = (objectMap.get(key)+"").trim(); lable = new Label(k,n+rowList.length,columnValue); sheet.addCell(lable); } } } workbook.write(); workbook.close(); } public void exportExcel(List list) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { File file = new File("e:\\mytest\\testjxl2.xls"); try { System.out.println("=======开始============"); WritableWorkbook workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0); //一些临时变量,用于写到excel中 Label l = null; jxl.write.Number n = null; jxl.write.DateTime d = null; //预定义的一些字体和格式,同一个Excel中最好不要有太多格式 WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLUE); WritableCellFormat headerFormat = new WritableCellFormat(headerFont); WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED); WritableCellFormat titleFormat = new WritableCellFormat(titleFont); WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat detFormat = new WritableCellFormat(detFont); NumberFormat nf = new NumberFormat("0.00000"); //用于Number的格式 WritableCellFormat priceFormat = new WritableCellFormat(detFont, nf); DateFormat df = new DateFormat("yyyy-MM-dd");//用于日期的 WritableCellFormat dateFormat = new WritableCellFormat(detFont, df); //设置标题 l = new Label(0, 0, "指标", headerFormat); sheet.addCell(l); sheet.mergeCells(0, 0, 0, 1); //合并0到3列 0到0行 4个参数是 c,r,c,r l = new Label(1,0,"总用户", headerFormat); sheet.addCell(l); sheet.mergeCells(1, 0, 2, 0); l = new Label(3,0,"ADSL绑定用户", headerFormat); sheet.addCell(l); sheet.mergeCells(3, 0, 4, 0); l = new Label(5,0,"互联星空用户", headerFormat); sheet.addCell(l); sheet.mergeCells(5, 0, 6, 0); //跨列后 列索引从跨的那行开始 l = new Label(1, 1, "访问量", headerFormat); sheet.addCell(l); l = new Label(2, 1, "点击量", headerFormat); sheet.addCell(l); l = new Label(3, 1, "访问量", headerFormat); sheet.addCell(l); l = new Label(4, 1, "点击量", headerFormat); sheet.addCell(l); l = new Label(5, 1, "访问量", headerFormat); sheet.addCell(l); l = new Label(6, 1, "点击量", headerFormat); sheet.addCell(l); if(list != null && list.size()>0){ for(int i=0;i<list.size();i++){ Map objectMap = CommunUtil.getMap( list.get(i)); //将对象转换成 == Map int j=0;//列从第一列开始 for(Object o : objectMap.keySet()){ //String key = (String) o; String pvalue = objectMap.get(o)+"".trim(); //System.out.println("pvalue== " + pvalue); //System.out.println("userValue"+i+" "+o+" " + objectMap.get(o)); Label lb = new Label(j,i+2,pvalue); sheet.addCell(lb); j++; } } } workbook.write(); workbook.close(); System.out.println("====================结束====================="); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (RowsExceededException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (WriteException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }
下面是整个工程 我是用idea做的 可能和eclipse有冲突。。
- testexcel.zip (23.8 KB)
- 下载次数: 82
- jxl.jar (430.4 KB)
- 下载次数: 34
相关推荐
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
通过以上步骤,我们就可以使用`jxl`库成功地导出包含水印的Excel文件了。需要注意的是,由于Excel文件的特性,水印可能不会在每个单元格都完全可见,可能需要调整字体大小、透明度等参数以达到理想效果。同时,如果...
标题中的“jxl导出excel文件简单示例”是指使用jxl库来创建和导出Excel文件的一个基本操作。jxl是一个Java库,它允许开发者读取、写入和修改Excel文件,尤其在处理批量数据时非常方便。在这个示例中,我们将探讨如何...
`jxl`库是一个广泛使用的开源库,它允许开发者方便地读取和写入Microsoft Excel文件。本文将详细介绍如何使用`jxl`库创建一个导出Excel的工具类,以及这个工具类如何帮助我们简化代码,提高效率。 首先,`jxl`库...
`jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Microsoft Excel文件。本篇文章将深入探讨如何利用`jxl`库来创建和导出Excel表格。 首先,我们需要在项目中引入`jxl`库。如果你的项目是Maven项目,...
jxl库正是解决这一问题的关键,它允许Java程序创建、读取和修改Excel文件,极大地拓展了Java在数据处理上的能力。 jxl库是由JExcelAPI项目提供的,它是一个开源的Java库,专门用于处理Microsoft Excel文件。在本文...
根据提供的文件信息,我们可以总结并深入探讨以下几个与...以上是关于如何使用Java JXL库导出Excel文件的详细介绍,涵盖了从环境准备到具体实现步骤的全过程。希望这些知识点能够帮助您更好地理解和应用Java JXL库。
JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...
通过学习JXL API文档和示例,开发者可以轻松地在Java项目中处理Excel文件,无论是读取数据、分析报表还是生成自定义的Excel文件,JXL都提供了一个强大且易于使用的工具集。对于需要处理Excel的Java开发者来说,熟悉...
标题“jxl操作excel文件例子”指的是利用JXL库进行Excel文件处理的实际应用。描述中提到的“通过jxl操作excel,简单方便”,暗示了JXL库的一个关键优点——简洁易用的API,使得对Excel文件的操作变得相当直观。 JXL...
总之,使用jxl库在Android上快速导出Excel表格需要理解jxl的API,处理Android特有的文件操作和线程管理,以及适当地设置单元格内容和样式。通过实践和参考示例项目,你将能够有效地实现这一功能。
在Java编程环境中,处理Excel文件是一项常见的任务,而JXL库提供了一个简洁的API来实现这一功能。JXL是一个开源的Java库,专门用于读取和写入Microsoft Excel文件(.xls格式)。在这个"JXL读写Excel小例子"中,我们...
标题中的“jxl导出excel”指的是使用JExcelApi(简称jxl)库来生成和导出Microsoft Excel格式的文件。JExcelApi是一个开源Java库,允许开发者在Java应用程序中读取、写入和修改Excel文件。这个工具类在处理大量数据...
jxl导出Excel基础,非常有用的一个东西,漫漫看
在Java编程环境中,JXL库是一个非常流行的工具,用于读取和写入Excel文件。它提供了简单易用的API,使得开发者能够方便地处理Excel数据,而无需依赖Microsoft Office套件。本文将深入探讨如何使用JXL进行Excel的导入...
JXL库是一个广泛使用的开源库,它提供了方便的方式来读取、写入和操作Excel文件。下面我们将深入探讨如何使用JXL库实现导出Excel数据。 首先,你需要在你的项目中引入JXL库。可以通过Maven或Gradle来添加依赖,如果...
在Java编程环境中,JXL库是一个非常流行...总之,使用JXL库在Java中导出Excel文件是一项常见的任务,尤其在数据分析和报表生成场景下。通过熟悉JXL的API,你可以轻松地定制化Excel文件的格式和内容,满足各种业务需求。
JXL库是一个Java库,专门用于读写Microsoft Excel文件,它为开发者提供了一种便捷的方式来处理Excel数据,无需依赖Microsoft Office。本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其...
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图