`
蹲街吃豆腐
  • 浏览: 6996 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jxl方式解析Excel文件

阅读更多

最近在做excel的导入导出功能,写了个比较通用的方法,贴上来记录一下、、

工具包用的是韩国棒子写的JavaExcel(jxl),配置比较简单,对中文的支持也不错,就是不支持07或以上的excel版本,原作者貌似也没有打算出新版本的意思,这个比较纠结。

相关的jar包是 jxl.jar,网上到处都是、

  1. 读取excel文件
    /**
    	 * 读取excel文件
    	 * @param file excel文件
    	 * @param headerConvert 转换头
    	 * @return 记录列表
    	 * @throws Exception
    	 */
    	public static List<Map<String, Object>> import2Excel(File file, Map<String, String> headerConvert) throws Exception {
    		InputStream is = null;
    		Workbook workbook = null;
    		//记录list
    		List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
    		try {
    			is = new FileInputStream(file);
    			workbook = Workbook.getWorkbook(is);
    			Sheet sheet = workbook.getSheet(0);
    			int column = sheet.getColumns();
    			int row = sheet.getRows();
    			//转换map
    			Map<String, Object> convertMap = new HashMap<String, Object>();
    			// 记录
    			Map<String, Object> recordMap = new HashMap<String, Object>();
    			// 读取头
    			for (int i = 0; i < column; i++) {
    				Cell cell = sheet.getCell(i, 0);
    				String temp = cell.getContents();
    				convertMap.put("" + i, headerConvert.get(temp));
    			}
    				for (int i = 1; i < row; i++) {
    					for (int j = 0; j < column; j++) {
    					Cell cell = sheet.getCell(j, i);
    					Object content = new Object();
    					if (cell.getType().equals(CellType.LABEL)) {
    						content = cell.getContents();
    					} else if (cell.getType().equals(CellType.NUMBER)) {
    						NumberCell numberCell = (NumberCell) cell;
    						content = numberCell.getValue();
    					} else if (cell.getType().equals(CellType.DATE)) {
    						DateCell dateCell = (DateCell) cell;
    						content = dateCell.getDate();
    					}
    					recordMap.put(""+convertMap.get(""+j), content);
    				}
    				list.add(recordMap);
    			}
    			// 操作完成时,关闭对象,释放占用的内存空间
    			workbook.close();
    			is.close();
    			return list;
    		} catch (Exception e) {
    			e.printStackTrace(System.out);
    		} finally {
    			if (is != null) {
    				is.close();
    			}
    		}
    		return list;
    	}
     
  2. 创建excel

 

public static void exportExcel(Map<String,String> title,List<Map<String,Object>> dataSet, String filename,String sheetname)throws Exception{
		// 得到项目的根目录
		String path = ServletActionContext.getServletContext().getRealPath("/");
		// 在服务器创建临时文件
		File file = new File(path + "temp");
		if(!file.isDirectory()){
			file.mkdirs();
		}
		file = new File(file.getPath()+File.separator+filename);
		// 创建工作表
		WritableWorkbook workbook = null;
		try {
			 workbook = Workbook.createWorkbook(file);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//获取工作簿
		WritableSheet sheet = workbook.createSheet(sheetname, 0);
		WritableFont font0 = new WritableFont(WritableFont.TIMES, 13,
				WritableFont.NO_BOLD);
		WritableFont font = new WritableFont(WritableFont.TIMES, 13,
				WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
				Colour.RED);
		WritableCellFormat format0 = new WritableCellFormat(font0);
		WritableCellFormat format = new WritableCellFormat(font);
		// 水平居中
		format.setAlignment(Alignment.CENTRE);
		format0.setAlignment(Alignment.CENTRE);
		//写表头
		int col = 0;
		for(Map.Entry<String,String> entry : title.entrySet()){
			Label label = new Label(col, 0, entry.getValue(), format0);
			sheet.addCell(label);
			col++;
		}	
		
		int row = 1;
		for(Map<String,Object> data : dataSet){
			int _col = 0;
			for(Map.Entry<String,String> entry : title.entrySet()){
				Label label = new Label(_col, row, StringUtil.filterNull(data.get(entry.getKey())), format0);
				sheet.addCell(label);
				_col++;
			}
			row++;
		}
		// 保存
		workbook.write();
		workbook.close();
		//输出到前台
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-disposition", "attachment; filename="
				+ java.net.URLEncoder.encode(filename, "UTF-8"));
		// 创建excel文件的输入输出流
		InputStream is = new FileInputStream(file);
		OutputStream os = response.getOutputStream(); 
		byte[] buf= new byte[1024];
		int size = is.read(buf);
		while (size > 0) {
			os.write(buf, 0, size);
			size = is.read(buf);
		}
		is.close();
		os.close();
		file.delete();
	}
大概就这样吧、挺简单的,不过不支持07还得想想别的办法,毕竟03是个过时产品了、、以后维护也不怎么方便、、、

 

分享到:
评论

相关推荐

    使用jxl解析excel(.xls)固定模板(智联简历为例)

    3. **解析保存**:使用JXL库读取并解析Excel文件。以下是一个简单的示例代码片段,展示如何打开文件并遍历工作表: ```java Workbook workbook = Workbook.getWorkbook(new File("path_to_your_excel_file")); ...

    jxl JAVA Excel解析

    Java中的JXL库是一个非常实用的工具,它允许开发者在应用程序中读取、写入和修改Excel文件。这个库特别适合那些需要处理大量数据并希望将数据格式化为表格的项目。下面我们将深入探讨JXL库在Java Excel解析中的应用...

    jxl解析excel

    三、解析Excel文件 1. 导入依赖 ```java import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write....

    jxl解析EXCEl2003

    在Java编程环境中,处理Excel文件...通过学习和实践使用JXL解析Excel文件,你不仅可以提升Java编程能力,还能在数据处理领域拓展自己的技能树。无论是数据导入、报表生成还是自动化测试,这都将是一个非常实用的工具。

    jxl模版生成excel

    "jxl模版生成excel" 指的是使用JExcelAPI(简称jxl)这个Java库来创建基于模板的Excel文件。JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可...

    android 解析 excel 文件

    以上就是使用JXL库在Android中解析Excel文件的基本方法和关键知识点。通过这些,你可以构建起一个基本的Excel数据读取功能,进一步可以根据需求进行数据处理、转换或展示。在实际开发中,还可以结合Android的数据...

    用jxl下载excel文件

    ### 使用JXL库下载并处理Excel文件 #### 知识点概述 本文将详细介绍如何使用JXL库结合Java网络编程技术来实现从指定URL下载Excel文件,并将其保存到本地指定目录的功能。此外,我们还将简单介绍如何使用JXL库读取...

    java解析excel文件 jxl.jar

    Java解析Excel文件是Java开发中常见的任务,尤其是在处理数据导入导出、数据分析或者报表生成时。JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。在Java中,JXL.jar库提供了一种简单且高效的...

    解析EXCEL 工具 JXL JAR包

    在这个场景下,JXL是一个非常实用的Java库,专门用于读取、写入和操作Excel文件。本文将深入探讨JXL库,解析其核心功能,以及如何在项目中使用JAR包进行Excel处理。 JXL全称为Java Excel API,它为Java开发者提供了...

    jxl解析Excel包

    在这个场景中,我们主要关注如何使用JXL库来解析Excel文件。首先,我们需要确保已经将JXL库引入到我们的项目中,这里提供的"jxl.jar"就是这个库的实现。 JXL库的使用步骤大致如下: 1. **导入依赖**:在Java项目中...

    jxl操作excel文件例子

    在Java编程环境中,JXL库是一个非常实用的工具,它允许开发者轻松地读取、写入和修改Excel文件。标题“jxl操作excel文件例子”指的是利用JXL库进行Excel文件处理的实际应用。描述中提到的“通过jxl操作excel,简单...

    EXCEL文件解析工具JXL

    EXCEL文件解析工具 jxl.jar 支持xls格式excel文件读写

    jxl.zip_excel_jxl_jxl.biff.drawing.dg_jxl.biff.drawingdg

    本文将深入探讨JXL库的核心功能及其在解析Excel文件中的应用。 首先,让我们明确一下标题"jxl.zip_excel_jxl_jxl.biff.drawing.dg_jxl.biff.drawingdg"所涉及的关键概念。"jxl.zip"指的是包含JXL库的压缩文件,它是...

    jxl导出excel总结

    jxl库正是解决这一问题的关键,它允许Java程序创建、读取和修改Excel文件,极大地拓展了Java在数据处理上的能力。 jxl库是由JExcelAPI项目提供的,它是一个开源的Java库,专门用于处理Microsoft Excel文件。在本文...

    使用jxl操作Excel

    `jxl`是Java Excel API的缩写,它提供了一个方便的接口,允许开发者以编程方式处理Excel文件。这个库支持多种Excel操作,包括创建新的工作簿、添加工作表、写入单元格数据、读取单元格内容、格式化单元格样式等。 ...

    java利用jxl读取excel文件

    `jxl`库是一个广泛使用的第三方库,它允许开发者轻松地读取、写入和修改Excel文件。本篇文章将深入探讨如何利用`jxl.jar`包来实现这一功能。 首先,确保你已经正确地将`jxl.jar`文件添加到你的项目类路径中。这可以...

    JXL操作EXCEL的各个类的解析.doc

    JXL 操作 EXCEL 的各个类的解析是 Java 语言中操作 Excel 文件的主要方法之一。JXL 通过提供了多种类来实现对 Excel 文件的读写操作。 首先,JXL 提供了一个抽象类 Workbook,该类相当于是一个工具类,用于生成 ...

    浅谈jxl解析excel —————复制、修改excel表

    本文将围绕“浅谈jxl解析excel ——复制、修改excel表”这一主题,深入探讨JXL库的使用方法和关键知识点。 首先,JXL库提供了丰富的API,使得开发人员可以方便地操作Excel文件的各个部分,如工作表、单元格、样式等...

    excel 解析,jxl 实现,通用

    JXL是一个开源库,专门设计用来读写Excel文件(.xls格式),使得在Java环境中解析Excel数据变得简单易行。 首先,让我们深入了解JXL库的基本用法。JXL支持多种操作,包括读取、创建、修改和写入Excel文件。以下是...

    JXL解析和生成Excel文件

    在描述中提到了一个博客链接,虽然具体内容未给出,但我们可以推测这篇博客可能详细介绍了如何使用JXL库来解析和生成Excel文件。通常,这样的教程会涵盖以下知识点: 1. **安装JXL**:介绍如何将JXL库添加到Java...

Global site tag (gtag.js) - Google Analytics