`
yangmeng_3331
  • 浏览: 91735 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java使用jxl进行Excel导入导出

    博客分类:
  • jxl
阅读更多
导入Excel
/**
	 * 
	 * @author ym
	 * 描述:导入excel文件
	 * @param i_class:导入的文件中存放实体类的class
	 * @param map:导入的模板(excel里的表头和实体类里的列对应)
	 * @param file:需要导入的文件
	 */
	public static Object Import(Class i_class,Map<String,String> map, File file){
		List<Object> list = new ArrayList<Object>();
		int wrong=0;
		String[] attrs = null;
		Workbook wb = null;
		StringBuffer message = new StringBuffer();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			wb = Workbook.getWorkbook(file);
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//得到所有工作表
		Sheet[] sheets = wb.getSheets();
		//判断所有工作表中有无错误的列名
		List<String[]> ColNames=new ArrayList<String[]>();
		String wrongCols="出错列名为:";
		for(Sheet s : sheets){
			//获取这一行的单元格
			Cell[] cells = s.getRow(0);
			attrs = new String[cells.length];
			//判断excel中的列和实体类中的属性是否对照
			for(int i=0;i<cells.length;i++){
				Cell c = cells[i];
				if(!map.containsKey(c.getContents())){
					if (!wrongCols.equals("出错列名为:"))
						wrongCols+=",";
					wrongCols+=c.getContents();
				}else{
					attrs[i]=map.get(c.getContents());
				}
			}
			ColNames.add(attrs);
		}
		//当列名有误时返回特定字符
		if(!wrongCols.equals("出错列名为:")){
			return wrongCols;
		}
		String MethodName;
		Method method;
		//判断有无数据类型错误
		for(int t=0;t<sheets.length;t++){
			int row = 1;
			//单元格数据内容
			Cell[] cells = sheets[t].getRow(row++);
			//列名
			Cell[] top = sheets[t].getRow(0);
			attrs = ColNames.get(t);
			int result=0;
			for(int i=0;i<top.length;i++){
				if("".equals(top[i])){
					result++;
				}
			}
			if(result!=top.length){
				message.append("第"+(t+1)+"张工作表:");
			}
			while(cells!=null&&cells.length>0){
				try {
					Object o = i_class.newInstance();
					for(int i=0;i<attrs.length;i++){
						if(cells[i].getContents()==null||"".equals(cells[i].getContents())){
							continue;
						}
						MethodName = "set"+attrs[i];
						//Integer类型
						try{
							method = i_class.getMethod(MethodName,Integer.class);
							Integer.parseInt(cells[i].getContents());
							continue;
						}catch(NoSuchMethodException e){
							
						}catch(Exception e){
							wrong++;
							message.append(attrs[i]+"列,"+row+"行;");
							continue;
						}
						//Double类型
						try{
							method = i_class.getMethod(MethodName, Double.class);
							Double.parseDouble(cells[i].getContents());
							continue;
						}catch(NoSuchMethodException e){
							
						}catch(Exception e1){
							e1.printStackTrace();
							wrong++;
							message.append(attrs[i]+"列,"+row+"行;");
							continue;
						}
						//Date类型
						try{
							method = i_class.getMethod(MethodName, Date.class);
							format.format(format.parse(cells[i].getContents()));
							continue;
						}catch(NoSuchMethodException e){
							
						}catch(Exception e2){
							wrong++;
							message.append(attrs[i]+"列,"+row+"行;");
							continue;
						}
						//String类型
						try{
							method = i_class.getMethod(MethodName, String.class);
						}catch(NoSuchMethodException e){
							wrong++;
							message.append(attrs[i]+"列,"+row+"行;");
						}
					}
					cells = sheets[t].getRow(row++);
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (SecurityException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				}  catch (Exception e) {
					break;
				}
			}
			message.append("\n");
		}
		if(wrong>0){
			return "数据出错总数为:"+wrong+"\n分别为:"+message.toString();
		}
		
		//验证文件无错误后,开始插入
		for(int t=0;t<sheets.length;t++){
			attrs = ColNames.get(t);
			Cell[] cells = sheets[t].getRow(1);
			int row = 2;
			while(cells!=null&&cells.length>0){
				try {
					Object o = i_class.newInstance();
					for(int i=0;i<attrs.length;i++){
						if(cells[i].getContents()==null||"".equals(cells[i].getContents())){
							continue;
						}
						MethodName = "set"+attrs[i];
						//得到该属性对应的set方法,参数有可能是Integer、Double、Date、String
						try{
							method = i_class.getMethod(MethodName,Integer.class);
							method.invoke(o, Integer.parseInt(cells[i].getContents()));
						}catch(Exception e){
							try{
								method = i_class.getMethod(MethodName, Double.class);
								method.invoke(o, Double.parseDouble(cells[i].getContents()));
							}catch(Exception e1){
								try{
									method = i_class.getMethod(MethodName, Date.class);
									method.invoke(o, format.format(format.parse(cells[i].getContents())));
								}catch(Exception e2){
									method = i_class.getMethod(MethodName, String.class);
									method.invoke(o, cells[i].getContents());
								}
							}
						}
					}
					list.add(o);
					cells = sheets[t].getRow(row++);
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (SecurityException e) {
					e.printStackTrace();
				} catch (NoSuchMethodException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				} catch (Exception e) {
					break;
				}
			}
		}
		return list;
	}

导出Execl
/**
	 * 
	 * @author ym
	 * 描述:导出Excel文件
	 * @param list:实体类的集合
	 * @param path:导出excel文件的路径名
	 * @param name:导出excel文件的文件名
	 * @param columnName:要导出的列名(开头第一个字母大写)
	 */
	public static void Export(List list, String path, String name, String[] columnName, String[] columnTitle){
		OutputStream os = null;
		try {
			os = new FileOutputStream(path+name+".xls");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Class bean = list.get(0).getClass();
		try {
			//建立excel文件 
			WritableWorkbook wbook = Workbook.createWorkbook(os);
			String bean_name = bean.getName();
			bean_name = bean_name.substring(bean_name.lastIndexOf(".")+1);
			//生成名为bean_name所代表的工作表,参数0表示这是第一页
			WritableSheet wsheet = wbook.createSheet(bean_name, 0);
			//是否显示网格
			//wsheet.getSettings().setShowGridLines(true); 
			//设置列宽
			//wsheet.getSettings().setDefaultColumnWidth(10);
			//设置行高
			//wsheet.getSettings().setDefaultRowHeight(15);
			//设置Excel字体
			WritableFont wfont = new WritableFont(WritableFont.ARIAL, 9,  
					WritableFont.BOLD, false,  
					jxl.format.UnderlineStyle.NO_UNDERLINE,  
					jxl.format.Colour.BLACK);
			WritableCellFormat titleFormat = new WritableCellFormat(wfont);
			titleFormat.setAlignment(jxl.format.Alignment.CENTRE);
			//设置Excel表头,如果标题为null则用列名代替标题  
			if(columnTitle==null){
				columnTitle = columnName;
			}
			//循环设置列名
			for (int i = 0; i < columnTitle.length; i++) {
				Label excelTitle = new Label(i, 0, columnTitle[i], titleFormat);  
				wsheet.addCell(excelTitle);  
			}
			//用于循环时Excel的行号
			int line = 1;
			String value;
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			for(Object b:list){
				for(int i=0;i<columnName.length;i++){
					Method method = bean.getMethod("get"+columnName[i]);
					//判断是否是日期属性
					Object o = method.invoke(b);
					if(o!=null){
						if(o instanceof Date){
							value = format.format(format.parse(o.toString()));
						}else{
							value = o.toString();
						}
					}else{
						value="";
					}
					//根据不同单元格样式要求可以定义多个WritableCellFormat进行设定
					Label content = new Label(i, line, value);  
					wsheet.addCell(content);  
				}
				line++;
			}
			wbook.write();   
			wbook.close();  
			os.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

  • jxl.jar (708.7 KB)
  • 下载次数: 2
分享到:
评论

相关推荐

    Excel导入导出 jxl及Poi 工具类

    在Java开发中,处理Excel数据是一项常见的任务,无论是读取大量数据进行分析,还是批量导入导出信息。这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入...

    jxl 实现excel导入导出

    接下来,我们将讨论如何使用`jxl`库进行Excel文件的导入和导出。 **Excel导入**: 导入Excel文件主要是读取其中的数据。以下是一段基本的导入代码示例: ```java import jxl.*; public class ExcelImporter { ...

    java_jxl导入导出

    综上所述,Java JXL库是Java开发者处理Excel文件的强大工具,尤其在数据导入导出、报表生成等场景下,其简洁的API和丰富的功能使其成为不可或缺的选择。然而,对于需要处理.xlsx格式的新版Excel文件,开发者可能需要...

    java使用JXL导入导出excel

    Java使用JXL库进行Excel导入导出是一种常见的技术实践,特别是在需要在Java应用程序或Web应用中处理Excel数据时。JXL是一个轻量级的库,它允许开发人员以纯Java方式读取、创建和修改Excel文件,而无需依赖于Windows...

    jxl导出excel加水印.zip

    在Java编程环境中,我们经常需要处理数据的导入和导出,Excel作为一种常见的数据存储和展示格式,被广泛应用。`jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库...

    java实现excel导入导出.pdf

    在 Java 中,实现 Excel 导入导出可以使用多种方式,本文将介绍使用 JXL 和 POI 两个库实现 Excel 导入导出的方法。 使用 JXL 库实现 Excel 导入导出 JXL(Java Excel API)是一个开源的 Java 库,用于读写 Excel ...

    java_Jxl(导入导出Excel)

    java_Jxl(导入导出Excel) 导入导出Excel的jar包,与大家共同分享,互相学习

    apache以及jxl对excel的导入导出

    以下是一些使用Apache POI和JXL进行Excel导入导出的基本步骤: 1. **导入库**: - 对于Apache POI,你需要引入`poi`, `poi-ooxml`, 和 `poi-ooxml-schemas`库。 - 对于JXL,只需引入`jxl.jar`。 2. **创建工作簿...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    JXL、POI实现Excel导入导出

    以上就是关于使用JXL和Apache POI实现Excel导入导出的基本知识。根据实际需求,你可以结合这两个库的功能,灵活地处理各种Excel文件操作。在实际项目中,通常会根据性能、功能需求以及文件兼容性等因素选择适合的库...

    JAVA中excel导入导出通用方法

    JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...

    jxl导入导出excel

    本文将深入探讨如何使用JXL进行Excel的导入与导出。 一、JXL库介绍 JXL是一个开源的Java库,它支持读取和写入多种Excel文件格式,包括老版本的.BIFF8格式和较新的.XLSX格式。这个库不仅提供了对单元格、工作表和...

    java_Jxl(导入导出Excel).pdf

    Java JXL Excel导入导出API Java JXL 是一个纯 Java 的API,用于导入导出Excel文件。它支持Excel 95-2000的所有版本,生成Excel 2000标准格式。该API还支持字体、数字、日期操作,并能够修饰单元格属性。另外,JXL...

    jxl包-JAVA轻松处理EXCEL导入及导出

    本篇文章将深入探讨jxl包在JAVA中如何轻松处理EXCEL的导入与导出,以及如何对单元格进行格式化操作。 首先,`jxl`是一个开源的Java库,它允许开发者在Java应用程序中创建、读取和修改Excel文件。这个库支持多种...

    java_Jxl(导入导出Excel).doc

    Java Jxl库是一个专门用于处理Excel文件的开源Java库,它允许开发者在Java应用程序中进行Excel文件的读取、创建和修改。Jxl支持多种Excel版本,包括从Excel 95到2000,而且生成的文件格式符合Excel 2000的标准。这个...

    jxl.jar包(java导入导出Excel文件)

    在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...

    java用jxl包导出excel表格

    总结来说,JXL是Java中处理Excel文件的一个强大工具,通过它可以轻松实现数据的导入导出。通过理解并实践上述代码,你可以快速掌握使用JXL创建Excel表格的基本技巧。记住,不断学习和实践是提升编程技能的关键,希望...

Global site tag (gtag.js) - Google Analytics