首先要记得引入两个包:jxl.jar和jspsmartupload.jar......并在JSP中引入它们
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="jxl.*,jxl.write.*,java.sql.*,java.io.*,java.text.SimpleDateFormat,com.jspsmart.upload.*,jxl.*,java.util.Date,java.text.DateFormat,java.util.Locale,java.util.TimeZone,java.text.*,java.util.ArrayList"%>
<%
request.setCharacterEncoding("gb2312");
InputStream inputStream = null; /// 字节流
SmartUpload su = new SmartUpload(); /// 上传文件组件
jxl.Workbook rwb = null;
// 上传初始化
su.initialize(pageContext);
try
{
// 上传文件
su.upload();
com.jspsmart.upload.File file = su.getFiles().getFile(0);
if (file.isMissing())
{
%>
<script>
alert("File is missing..!");
</script>
<%
return;
}
if(file.getSize() == 0)
{
%>
<script>
alert("选择的导入文件不存在,请重新选择!");
</script>
<%
return;
}
// 转化成字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int j = 0; j < file.getSize(); j++)
{
baos.write(file.getBinaryData(j));
}
inputStream = new ByteArrayInputStream(baos.toByteArray());
try{
rwb = Workbook.getWorkbook(inputStream);
}catch(Exception e){
e.printStackTrace();
}
Sheet sheet = rwb.getSheet(0);
int iRow = sheet.getRows();
int iColumn = sheet.getColumns();
%>
<script> 这是测试的
alert("iRow iRow iRow = " + "<%=iRow%>" + " and iColumn iColumn iColumn = " + "<%=iColumn%>");
</script>
<%
System.out.println("iRow iRow iRow = " + iRow + " and iColumn iColumn iColumn = " + iColumn);
rwb.close();
inputStream.close();
}catch(Exception e){
e.printStackTrace();
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>首页</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="dscription" content="This is my page">
</head>
<body>
<form action="ExcelDeal.jsp" method="post"
enctype="multipart/form-data">
<table>
<tr>
<td width="120" align="center">路径:</td>
<td width="180"><input type="file" name="file" class="from_len21" contenteditable="false"></td>
</tr>
<tr>
<td>
<input type="submit" value="确定" />
</td>
</tr>
</table>
</form>
</body>
</html>
红字是要注意的地方:
表单中enctype="multipart/form-data "的意思, 是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data ,才能完整的传递文件数据,进行下面的操作.
enctype="multipart/form-data "是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的:
SmartUpload su = new SmartUpload();//新建一个SmartUpload对象
su.getRequest().getParameterValues();取数组值
su.getRequest().getParameter( );取单个参数单个值。
另外,如果是两个页面的交互,也要注意作用域的问题。
如果不注意上面两个问题,就会报Files' name is invalid or does not exist的错误
如果要获取某个单元格的内容 :
String titleValue = sheet.getCell(0, 0).getContents();
if(titleValue == null || !titleValue.trim().equals("车牌号码"))
getCell(0,0) 其中,第一个0表示列,第二个0表示行
另外:如果报:Unable to recognize OLE stream的问题,其中的一种解决方法就是把07版的Excel转化为03,再试试。。反正我的试完就好用了。