`
pengjianbo1
  • 浏览: 232469 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JXL导入excel数据

    博客分类:
  • J2EE
阅读更多

         项目中经常会用到Excel数据批量导入,这里总结一下使用JXL导入Excel数据。

我们可以到http://sourceforge.net/projects/jexcelapi/files/  下载它的Jar包。我们先写一个JXL操作xls的工具类。

 

package com.pjb.sys.util;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * 提供对XLS格式类型的文件进行处理
 * 
 * @author Administrator
 * 
 */
public class XlsTools {
	private Workbook readBook;

	private int currIndex;

	private ArrayList<String> alLineContent;

	private Cell cell;

	private int firstDataCount;

	private boolean isFirst;

	private Sheet sheet;

	private WritableWorkbook writeBook;

	private WritableSheet writeSheet;

	private Label label;

	/**
	 * 初始化xls文件的读取参数
	 * 
	 * @param filePath
	 *            xls文件路径
	 * 
	 */
	public void read(String filePath) throws Exception {
		try {
			// 创建xls工作表对象
			readBook = Workbook.getWorkbook(new File(filePath));
			// 只读取第一个工作表中的内容
			sheet = readBook.getSheet(0);
			currIndex = 0;
			isFirst = true;
		} catch (Exception e) {
			throw new Exception(e);
		}
	}

	/**
	 * 
	 * @param is
	 *            初始化xls文件的读取参数
	 * @throws Exception
	 */

	public void read(InputStream is) throws Exception {
		try {
			// 创建xls工作表对象
			readBook = Workbook.getWorkbook(is);
			// 只读取第一个工作表中的内容
			sheet = readBook.getSheet(0);
			currIndex = 0;
			isFirst = true;
		} catch (Exception e) {
			throw new Exception(e);
		}
	}

	/**
	 * 读取一行xls文件中的数据
	 * 
	 * @return 包含数据的String列表
	 */
	public ArrayList<String> readLine() {
		alLineContent = new ArrayList<String>();
		int i = 0;
		String content = null;
		while (true) {
			if (!isFirst && i >= firstDataCount)
				break;
			try {
				// 读取一个单元格的数据
				cell = sheet.getCell(i, currIndex);
				i++;
			} catch (Exception e) {
				// 没有数据可读取
				if (i == 0)
					return null;
				// 读取首行
				if (isFirst) {
					firstDataCount = i;
					isFirst = false;
					break;
				} else
					content = "";
			}
			content = cell.getContents();
			// 首行存在空值时认为提取数据完毕
			if (isFirst && "".equals(content)) {
				firstDataCount = i - 1;
				isFirst = false;
				break;
			}
			alLineContent.add(content);
		}
		currIndex++;
		return alLineContent;
	}

	/**
	 * 读取xls文件中的所有可读取数据
	 */
	public ArrayList<ArrayList<String>> readAll() {
		ArrayList<ArrayList<String>> alAllData = new ArrayList<ArrayList<String>>();
		ArrayList<String> data = null;
		while (true) {
			data = this.readLine();
			if (data == null)
				break;
			alAllData.add(data);
		}
		return alAllData;
	}

	public void closeRead() {
		readBook.close();
	}

	/**
	 * 创建一个xls文件并初始化写入参数
	 * 
	 * @param filePath
	 *            xls文件路径
	 */
	public void write(String filePath) throws Exception {
		try {
			// 打开.xls文件
			writeBook = Workbook.createWorkbook(new File(filePath));
			// 创建一个工作表
			writeSheet = writeBook.createSheet("Sheet1", 0);
			currIndex = 0;
		} catch (Exception e) {
			throw new Exception(e);
		}
	}

	/**
	 * 将一条数据写入xls文件中
	 * 
	 * @param dataLine
	 *            需要写入的数据集合
	 */
	public void writeLine(ArrayList<String> dataLine) throws Exception {
		try {
			for (int i = 0; i < dataLine.size(); i++) {
				label = new Label(i, currIndex, dataLine.get(i));
				writeSheet.addCell(label);
			}
			currIndex++;
		} catch (Exception e) {
			throw new Exception(e);
		}
	}

	/**
	 * 将所有数据写入xls文件
	 * 
	 * @param data需要写入的数据
	 */
	public void writeAll(ArrayList<ArrayList<String>> data) throws Exception {
		for (int i = 0; i < data.size(); i++) {
			this.writeLine(data.get(i));
		}
	}

	public void closeWrite() throws Exception {
		try {
			// 将值写到文件中
			writeBook.write();
			writeBook.close();
		} catch (Exception e) {
			throw new Exception(e);
		}
	}
}

 

接下来,我们以Struts1.2的FormFile做文件上传。编写如下Form

 

package com.pjb.struts.form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

@SuppressWarnings("serial")
public class UploadForm extends ActionForm {

	private FormFile formFile;

	public FormFile getFormFile() {
		return formFile;
	}

	public void setFormFile(FormFile formFile) {
		this.formFile = formFile;
	}
}

 

 

 JSP页面

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ include file="/page/importTag.jsp"%>
<html>
	<head>
		<%
			String str = "<script type='text/javascript'>" + "\n alert('操作成功');" + "\n</script>";
			String reuslt = (String) request.getAttribute("result");
			if ("1".equals(reuslt))
				out.println(str);
		%>
	</head>
	<body>
		<div align="center">
			<html:form action="/ExcelImport.do?method=upload" method="post" enctype="multipart/form-data">
				选择导入文件<html:file property="formFile" onkeydown="javascrpit:return false;" />
				<input type="submit" value="导入数据" />
			</html:form>
		</div>
	</body>
</html>

 

 

Struts Action代码如下。

 

	/**
	 * 读XLS数据
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 * @throws Exception
	 */
	public ActionForward readXls(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		try {
			UploadForm uploadForm = (UploadForm) form;
			FormFile file = uploadForm.getFormFile();
			InputStream is = file.getInputStream();
			XlsTools xlsTools = new XlsTools();
			xlsTools.read(is);
			//读Xls行所有数据并封装
			ArrayList<ArrayList<String>> listAll = xlsTools.readAll();
			xlsTools.closeRead();
			List<UserBean> userList = new ArrayList<UserBean>();
			for (int i = 1; i < listAll.size(); i++) {
				ArrayList<String> aList = listAll.get(i);
				UserBean user = new UserBean();
				user.setUserName(aList.get(0));
				userList.add(user);
			}
			logger.info(userList);
			//调用Service写入数据库......
			request.setAttribute("result", "1");
			return mapping.getInputForward();
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage());
			request.setAttribute("errMsg", e.getMessage());
		}
		return mapping.findForward("error");

	}

 

 


 

分享到:
评论
1 楼 reinsoft 2011-03-24  
谢谢!

相关推荐

    jxl 实现excel导入导出

    在Java编程环境中,处理Excel数据是一项常见的任务,无论是读取...总之,`jxl`库是Java开发者处理Excel文件的一个有力工具,它简化了读取、写入和修改Excel数据的过程,使得在Java应用中集成Excel功能变得更加便捷。

    jxl导入导出excel

    三、导入Excel数据 1. **读取工作簿** 使用`Workbook`类的静态方法`Workbook.getWorkbook(File)`读取Excel文件。例如: ```java File excelFile = new File("path_to_your_excel_file.xls"); Workbook workbook ...

    基于JXL的Excel数据导入工具

    在导入Excel数据时,我们通常会先打开文件,然后逐行读取数据。JXL中的`Workbook`类代表整个Excel工作簿,`Worksheet`类则表示工作簿中的单个工作表。通过`Workbook.read(File)`方法,我们可以加载Excel文件。接下来...

    Excel导入导出 jxl及Poi 工具类

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

    jxl读取excel数据(带实例)

    本文将详细介绍如何使用JXL库来读取Excel数据,并通过一个实际的代码示例进行演示。 首先,你需要在项目中引入JXL库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    利用jxl把excel中的数据导入数据库

    标题“利用jxl把excel中的数据导入数据库”指的是使用Java Excel API(jxl)这个库来读取Excel文件中的数据,并将这些数据批量地导入到关系型数据库中。这是一个常见的需求,特别是在处理大量结构化数据时,例如进行...

    java后台jxl将excel数据导入到MYSQL中

    在Java开发中,将Excel数据导入到MySQL数据库是一项常见的任务,尤其在数据处理、报表生成或数据分析场景下。本文将详细介绍如何使用jxl库来读取Excel文件,并将其内容存储到MySQL数据库中。 首先,我们需要了解jxl...

    struts2整合apache的jxl导入导出excel表格

    Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...

    用Jxls导入导出Excel2003和Excel2007数据3

    本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...

    Jxl实现Excel的导入导出

    使用Jxl对Excel进行导入导出,其中包含设置单元格样式以及数据有效性。

    jxl导出excel加水印.zip

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

    java使用jxl进行Excel导入导出

    Java 使用 JXL 进行Excel导入导出是一个常见的任务,特别是在数据处理和分析场景中。JXL 是一个 Java 库,允许开发者方便地读取、写入和操作 Excel 文件(.xls 格式)。以下是对这个主题的详细阐述: 1. **JXL 概述...

    jxl导入导出excel完美运行demo

    在Java编程领域,处理Excel数据是一项常见的任务,而`jxl`库则是一个非常实用的工具,用于读取和写入Excel文件。本示例"jxl导入导出excel完美运行demo"提供了一个完整的实现,使得开发者能够快速理解和应用Excel处理...

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

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

    数据导入Excel运用JXL的各类方法介绍

    ### 数据导入Excel运用JXL的各类方法介绍 在IT领域,特别是数据分析与处理工作中,Excel是一种广泛使用的工具,因其强大的数据处理能力和灵活的表格编辑功能而受到青睐。然而,当涉及到大量的数据导入或自动化处理...

    利用jxl操作excel文件

    4. **生成TXT文件**:在提取了Excel数据后,可以使用Java的`PrintWriter`类向TXT文件写入数据。创建一个`PrintWriter`对象,然后逐行写入数据。 ```java PrintWriter writer = new PrintWriter(new FileWriter(...

    struts2 poi,jxl向excel表中插入记录源代码

    这个项目的核心功能是允许用户通过前端界面提交数据,然后这些数据会被Struts2的Action处理,并使用POI或JXL库写入到指定的Excel文件中。为了实现这一功能,你需要理解以下几个关键知识点: 1. **Struts2 Action**:...

    java利用jxl导入Excel表格并保存到本地数据库

    在Java开发中,导入Excel数据并将其保存到本地数据库是一项常见的任务,特别是在处理大量结构化数据时。这里我们将深入探讨如何使用jxl库来实现这一功能。 jxl是一个流行的Java库,专门用于读写Microsoft Excel文件...

    jxl对excel添加水印(含有setWaterMarkImage方法).zip

    在Java编程环境中,处理Excel文件是一项常见的任务,特别是在数据导入导出、报表生成等领域。`jxl`库是一个广泛使用的开源库,它允许开发者用Java读取、写入和修改Excel文件。在这个特定的场景中,我们将探讨如何...

Global site tag (gtag.js) - Google Analytics