`

批量新增_(struts2文件上传、下载,jxl读取Excel等)

    博客分类:
  • java
阅读更多
项目中的应用,有一个“批量新增”的按钮,点击时包括的处理:Excel文档上传,读取Excel数据等。

Excel上传部分,用Struts2文件上传实现,关键代码如下:
package com.eshore.itsm.common;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * UploadUtil 文件上传工具类
 * 
 * @author Musoon
 *
 */

public class UploadUtil{
	
	private static final long serialVersionUID = 572146812454l;
	private static final int BUFFER_SIZE = 16 * 1024;

	public void upload(File src, File des){
		InputStream in = null;
		OutputStream out = null;
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(src);
			fos = new FileOutputStream(des);
			in = new BufferedInputStream(fis, BUFFER_SIZE);
			out = new BufferedOutputStream(fos, BUFFER_SIZE);
			
			byte[] buffer = new byte[BUFFER_SIZE];
			while (in.read(buffer) > 0) {
				out.write(buffer);
			}
			out.flush();
		} catch (Exception e) {
			System.out.println("上传文件失败!");
			e.printStackTrace();
		} finally {
			if (null != in) {
				try {
					in.close();
				} catch (IOException e) {
					System.out.println("关闭InputStream失败!");
					e.printStackTrace();
				}
			}
			if (null != out) {
				try {
					out.close();
				} catch (IOException e) {
					System.out.println("关闭OutputStream失败!");
					e.printStackTrace();
				}
			}
		}
	}
	
	public String getFilePath(File src, File dest) {
		upload(src, dest);
		return dest.getAbsolutePath();
	}


	
}


读取Excel的工具类:
/**
 * 
 */
package com.eshore.itsm.common;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

/**
 * ExcelUtil 读取Excel工具类
 * 
 * @author Musoon
 *
 */
public class ExcelUtil {

	/**
	 * 读取单个sheet的Excel,
	 * @param path
	 * @return list的第一个值是map的key值
	 */
	public static List<Map<String, String>> readExcel(String path) {

		File file = null;
		Workbook book = null;
		Sheet[] sheets = null;
		Sheet sheet = null;
		Map<String, String> map = null;
		List<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
		
		Map<String, String> keyMap = new HashMap<String, String>();
		
		try {
			file = new File(path);
			book = Workbook.getWorkbook(file);
			//获取到所有工作表
			sheets = book.getSheets();
			if (null != sheets && 0 != sheets.length) {
				sheet = sheets[0];
				System.out.println("工作表对象的名字:" + sheet.getName() + "\n" 
						+ "工作表对象的行数:" + sheet.getRows() + "\n" 
						+ "工作表对象的列数:" + sheet.getColumns());
				
				//第一行即所有map的键值
				for (int i = 0; i < sheet.getColumns(); i++) {
					String mapKey = sheet.getCell(i, 0).getContents();
					keyMap.put(String.valueOf(i), handleKey(mapKey));
				}
				mapList.add(keyMap);
				
				//行循环,一行就一个map
				for (int j = 1; j < sheet.getRows(); j++) {
					map = new HashMap<String, String>();
					//列循环
					for (int k = 0; k < sheet.getColumns(); k++) {
						//标题栏
						String key = sheet.getCell(k, 0).getContents();
						Cell value = sheet.getCell(k, j);
						System.out.println("坐标为 (" + k + ", " + j + ") 的值为 == > " + value.getContents());
						map.put(handleKey(key), value.getContents());
					}
					mapList.add(map);
				}
			}
			book.close();
		} catch (Exception e) {
			System.out.println("读取Excel失败!");
			e.printStackTrace();
		}
		return mapList;
	}
	
	/**
	 * 处理key,形如"XX(XX)",变为"XX"
	 * @param key
	 * @return
	 */
	public static String handleKey(String key) {
		String str = "";
		if (null != key && 0 != key.trim().length()) {
			int i = 0;
			//英文括号
			if (-1 != key.indexOf("(")) {
				i = key.indexOf("(");
				str = key.substring(0, i);
			//中文括号
			} else if (-1 != key.indexOf("(")) {
				i = key.indexOf("(");
				str = key.substring(0, i);
			} else {
				str = key;
			}
		}
		return str.trim().toString();
	}
	
}



上传接口jsp页面:
<div style="float:none;padding-top:5px;line-height:normal;" class="button_b">
	<a href="#" id="downLoadTemplate"><span>模板下载</span></a>
</div>
<form action=""  method ="POST" enctype ="multipart/form-data" id="billItemExcelUploadForm">
<input type="hidden" id="billParentId" name="billParentId" value="<%=request.getParameter("billParentId")%>"/>
<table>
<tr>
	<td>
			<input type="text" id="txt" name="txt" readonly="readonly">&nbsp;
	</td>
	<td>
	
		<div align="left" style="padding-top:2px; padding-bottom:2px; line-height:normal;display:inline;" class="button_a"  onclick="billItemFile.click()" >
			<a id="toInsert" href="#"><span>浏&nbsp;&nbsp;览</span></a>
		</div>
		<input type="file" id="billItemFile" onchange="txt.value=this.value" name="billItemFile" class="file" hidefocus> 
	</td>
	<td><div align="left" style="padding-top:2px; padding-bottom:2px; line-height:normal;display:inline;" class="button_a" >
			<a id="billItemFileSubmit" href="#" ><span>批量导入</span></a>
		</div></td>
	
</tr> 
</table>
</form>


action部分:
	private File billFormatFile;
	private String contentType;
	private String fileName;

	public String getFileName() {
		return fileName;
	}

	public void setBillFormatFileContentType(String contentType) {
		this.contentType = contentType;
		System.out.println("上传类型为==>" + contentType);
	}

	public void setBillFormatFileFileName(String fileName) {
		this.fileName = fileName;
		System.out.println("上传的文件名为==>" + fileName);
	}

	public void setBillFormatFile(File billFormatFile) {
		this.billFormatFile = billFormatFile;
	}


	/**
	 * 批量新增
	 * @return NONE
	 */
	public String saveBillFormatBatch() {

		//记录读取Excel得到的所有数据
		List<Map<String, String>> list = null;
		//记录Excel中第一行之后的每一行数据
		Map<String, String> m = null;
		//记录Excel中第一行数据,即行头作为每一个字段的key
		Map<String, String> keyMap = null;
		//记录新增出错的所有数据
		List<BillFormatVo> errorList = new ArrayList<BillFormatVo>();
		//出错的具体数据
		BillFormatVo billFormatVo = null;
		//批量新增成功的记录条数
		int successCount = 0;
		//批量新增失败的记录条数
		int failCount = 0;
		//记录批量新增失败的原因
		StringBuffer sb = null;
		
		//把批量新增的Excel上传到服务器
		File file = new File(ServletActionContext.getServletContext().getRealPath("/common/excelModule") + "/" + fileName);
		UploadUtil uu = new UploadUtil();
		//读取上传路径
		String path = uu.getFilePath(billFormatFile, file);
		
		try {
			//根据上传路径读取Excel数据
			list = ExcelUtil.readExcel(path);
                    //省略对list数据的相关操作
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		return NONE;
	}


4
0
分享到:
评论
3 楼 clmgwan 2013-03-11  
clmgwan 写道
楼主你好,这个代码少一个BillFormatVo的pojo类,可否提供下?还有能否把上传的excel文件模版附带下?希望看到后与我联系  QQ:476603723    谢谢

Action类也有点儿不完整,如果是struts2的话,缺少execute()方法
2 楼 clmgwan 2013-03-11  
楼主你好,这个代码少一个BillFormatVo的pojo类,可否提供下?还有能否把上传的excel文件模版附带下?希望看到后与我联系  QQ:476603723    谢谢
1 楼 JavaEthan 2011-11-17  
大师 您好!您发的这个对我非常要帮助,但是我是个菜鸟,这里面还有我有几个不懂的地方,比如连接mysql以及一些xml的配置问题,希望您看到能与我联系 406036686 不胜感激

相关推荐

    java利用jxl读取excel文件

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

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    本文将深入探讨Java编程语言中如何使用Apache POI库和JExcelAPI(JXL)来读取、写入及操作Excel文件,同时也包括设置列宽以及处理合并或拆分的单元格内容。 首先,Apache POI是Apache软件基金会的一个开源项目,专...

    JXL 读取EXCEL

    标题 "JXL 读取EXCEL" 涉及到的是使用Java Excel Library(简称JXL)这个开源库来处理Microsoft Excel文件。JXL是一个强大的工具,它允许开发者在Java程序中读取、写入和修改Excel文件。下面将详细介绍JXL库以及如何...

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

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

    Struts2+JXL 下载 Excel 文档

    在"Struts2+JXL 下载 Excel 文档"的场景中,开发者通常会创建一个Action,这个Action负责生成Excel文档并提供下载。用户通过浏览器访问特定URL,Struts2框架接收到请求后,会路由到相应的Action。Action内部会利用...

    struts2+jxl导出excel

    在"struts2+jxl导出excel"的场景中,我们将讨论如何利用Struts2框架与JXL库配合,实现从web应用中导出数据到Excel的工作。 首先,我们需要理解Struts2的动作(Action)和结果(Result)。动作是处理用户请求的核心...

    jxl读取Excel文件

    NULL 博文链接:https://zhouyq.iteye.com/blog/272883

    使用jxl读取Excel表格数据

    此外,jxl库还支持读取不同类型的单元格数据,如日期、数字等,只需适当地解析返回值即可。例如,对于日期类型,你可以使用`DateCell`: ```java if (sheet.getCell(colIndex, rowIndex) instanceof DateCell) { ...

    jexcelapi_2_6_2 java 读取excel java操作excel jxl API

    FileInputStream fis = new FileInputStream("path_to_your_excel_file.xls"); Workbook workbook = Workbook.getWorkbook(fis); ``` 在获取Workbook之后,我们可以访问其包含的工作表,通过`workbook.getSheets()`...

    利用jxl读取Excel代码的完整内容,包括jar包

    要使用jxl,你需要下载jxl.jar文件,并将其添加到你的项目类路径中。如果你使用的是Eclipse IDE,可以通过右键点击项目 -&gt; Build Path -&gt; Configure Build Path -&gt; Libraries -&gt; Add JARs 或 External JARs 来添加这...

    用jxl下载excel文件

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

    [转]java struts2+jxl生成并导出Excel

    Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建应用程序,而JXL则是一个Java库,用于读取、写入和修改Excel电子表格文件。这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成...

    jxl读取excel数据(带实例)

    在这里,"path_to_your_excel_file.xls"是你要读取的Excel文件的路径。`WorkbookSettings`对象可以用来设置一些高级选项,如字符编码等,但在这个简单的例子中,我们只需要默认设置。 接下来,获取工作表(Sheet)...

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

    7. **部署与运行**: 下载项目后,你需要将所有依赖的库(如Struts2、POI或JXL的jar文件)添加到项目的类路径中,然后将项目部署到支持Servlet容器(如Tomcat)的服务器上,根据提示修改Excel文件路径,即可运行程序...

    操作Excel文件(读取和生成)jxl和poi

    JXL和Apache POI是两个广泛使用的库,分别提供了对Excel文件的读取和生成的支持。本篇文章将深入探讨这两个库的使用方法及其特点。 首先,JXL是一个Java API,主要用于读写Excel 97-2003格式的工作簿,即.xls文件。...

    jxl读取Excel报表

    在Java编程环境中,处理Excel数据是一项常见的任务,而“jxl”库则为开发者提供了方便的接口来读取和写入Excel文件。标题中的“jxl读取Excel报表”指的是利用jxl库来操作Excel文件,特别是从Excel文件中提取数据以...

    jxl读取excel的java代码小程序

    在这个"jxl读取excel的java代码小程序"中,我们将探讨如何利用JXL库来实现Excel文件的读取操作。 首先,我们需要在项目中引入JXL库。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

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

    首先,让我们明确一下标题"jxl.zip_excel_jxl_jxl.biff.drawing.dg_jxl.biff.drawingdg"所涉及的关键概念。"jxl.zip"指的是包含JXL库的压缩文件,它是一个Java库,用于处理Excel文件。"jxl.biff.drawing.dg"和"jxl....

    JXL_API.rar_jxl_jxl api_jxl api chm_jxl help

    6. **读取文件**:对于读取操作,`Workbook.getWorkbook()`方法用于打开已存在的Excel文件,然后可以获取其中的工作表,再逐个读取单元格内容。 JXL API的灵活性和易用性使其在Java开发中受到广泛欢迎。它允许...

Global site tag (gtag.js) - Google Analytics