项目中的应用,有一个“批量新增”的按钮,点击时包括的处理: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">
</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>浏 览</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;
}
分享到:
相关推荐
`jxl`库是一个广泛使用的第三方库,它允许开发者轻松地读取、写入和修改Excel文件。本篇文章将深入探讨如何利用`jxl.jar`包来实现这一功能。 首先,确保你已经正确地将`jxl.jar`文件添加到你的项目类路径中。这可以...
本文将深入探讨Java编程语言中如何使用Apache POI库和JExcelAPI(JXL)来读取、写入及操作Excel文件,同时也包括设置列宽以及处理合并或拆分的单元格内容。 首先,Apache POI是Apache软件基金会的一个开源项目,专...
标题 "JXL 读取EXCEL" 涉及到的是使用Java Excel Library(简称JXL)这个开源库来处理Microsoft Excel文件。JXL是一个强大的工具,它允许开发者在Java程序中读取、写入和修改Excel文件。下面将详细介绍JXL库以及如何...
Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...
在"Struts2+JXL 下载 Excel 文档"的场景中,开发者通常会创建一个Action,这个Action负责生成Excel文档并提供下载。用户通过浏览器访问特定URL,Struts2框架接收到请求后,会路由到相应的Action。Action内部会利用...
在"struts2+jxl导出excel"的场景中,我们将讨论如何利用Struts2框架与JXL库配合,实现从web应用中导出数据到Excel的工作。 首先,我们需要理解Struts2的动作(Action)和结果(Result)。动作是处理用户请求的核心...
NULL 博文链接:https://zhouyq.iteye.com/blog/272883
此外,jxl库还支持读取不同类型的单元格数据,如日期、数字等,只需适当地解析返回值即可。例如,对于日期类型,你可以使用`DateCell`: ```java if (sheet.getCell(colIndex, rowIndex) instanceof DateCell) { ...
FileInputStream fis = new FileInputStream("path_to_your_excel_file.xls"); Workbook workbook = Workbook.getWorkbook(fis); ``` 在获取Workbook之后,我们可以访问其包含的工作表,通过`workbook.getSheets()`...
要使用jxl,你需要下载jxl.jar文件,并将其添加到你的项目类路径中。如果你使用的是Eclipse IDE,可以通过右键点击项目 -> Build Path -> Configure Build Path -> Libraries -> Add JARs 或 External JARs 来添加这...
### 使用JXL库下载并处理Excel文件 #### 知识点概述 本文将详细介绍如何使用JXL库结合Java网络编程技术来实现从指定URL下载Excel文件,并将其保存到本地指定目录的功能。此外,我们还将简单介绍如何使用JXL库读取...
Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建应用程序,而JXL则是一个Java库,用于读取、写入和修改Excel电子表格文件。这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成...
在这里,"path_to_your_excel_file.xls"是你要读取的Excel文件的路径。`WorkbookSettings`对象可以用来设置一些高级选项,如字符编码等,但在这个简单的例子中,我们只需要默认设置。 接下来,获取工作表(Sheet)...
7. **部署与运行**: 下载项目后,你需要将所有依赖的库(如Struts2、POI或JXL的jar文件)添加到项目的类路径中,然后将项目部署到支持Servlet容器(如Tomcat)的服务器上,根据提示修改Excel文件路径,即可运行程序...
JXL和Apache POI是两个广泛使用的库,分别提供了对Excel文件的读取和生成的支持。本篇文章将深入探讨这两个库的使用方法及其特点。 首先,JXL是一个Java API,主要用于读写Excel 97-2003格式的工作簿,即.xls文件。...
在Java编程环境中,处理Excel数据是一项常见的任务,而“jxl”库则为开发者提供了方便的接口来读取和写入Excel文件。标题中的“jxl读取Excel报表”指的是利用jxl库来操作Excel文件,特别是从Excel文件中提取数据以...
在这个"jxl读取excel的java代码小程序"中,我们将探讨如何利用JXL库来实现Excel文件的读取操作。 首先,我们需要在项目中引入JXL库。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
首先,让我们明确一下标题"jxl.zip_excel_jxl_jxl.biff.drawing.dg_jxl.biff.drawingdg"所涉及的关键概念。"jxl.zip"指的是包含JXL库的压缩文件,它是一个Java库,用于处理Excel文件。"jxl.biff.drawing.dg"和"jxl....
6. **读取文件**:对于读取操作,`Workbook.getWorkbook()`方法用于打开已存在的Excel文件,然后可以获取其中的工作表,再逐个读取单元格内容。 JXL API的灵活性和易用性使其在Java开发中受到广泛欢迎。它允许...