1. 导入jxl.jar。
2. 修改JSP页面中<s:form>标签,务必把enctype设为"multipart/form-data",这样就可以以二进制形式上传Excel文档。
<s:form id="Form1" action="userInfoImport" method="post" enctype="multipart/form-data" theme="simple" namespace="/MainWeb/Admin/UserInfo">
......
<s:file cssStyle="width:80%" name="excel" id="fileUpload"></s:file>
<s:submit value="上传" cssClass="btnStyle" id="checkUpload" onclick="return checkExcel();"></s:submit>
</s:form>
3. 修改struts.xml,务必注意第3、8-12、15行,这几行非常重要。
<struts>
......
<constant name="struts.multipart.saveDir" value="/tmp"/>
......
<package name="UserInfo" extends="struts-default" namespace="/MainWeb/Admin/UserInfo">
......
<action name="userInfoImport" class="userInfoAction" method="userInfoImport">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">application/vnd.ms-excel</param>
<param name="maximumSize">409600</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="FAILURE">/MainWeb/Admin/UserInfo/UserInfo_Import.jsp</result>
<result name="SUCCESS">/MainWeb/Admin/UserInfo/UserInfo_Import.jsp</result>
<result name="INPUT">/MainWeb/Admin/UserInfo/UserInfo_Import.jsp</result>
</action>
</package>
</struts>
导入数据
List<UserInfo> userInfoList = new ArrayList<UserInfo>();
Workbook book = Workbook.getWorkbook(excel);
Sheet sheet = book.getSheet(0);
int row = sheet.getRows();
for (int i = 1; i < row; i++) {
UserInfo userInfo = new UserInfo();
//获取数据
userInfo.setUserId(0);
userInfo.setUserName(sheet.getCell(0, i).getContents());
userInfo.setUserPassword(sheet.getCell(1, i).getContents());
//检测是否存在相同的用户名
//UserId=1 Conflict Excel内部重复
if (userInfoList.size() != 0){
for (int iUserName=0; iUserName<userInfoList.size(); iUserName++){
if (userInfo.getUserName().toUpperCase().equals(userInfoList.get(iUserName).getUserName().toUpperCase())){
userInfoList.get(iUserName).setUserId(1);
userInfo.setUserId(1);
}
}
}
//检测是否存在相同的用户名
//UserId=2 Exist 数据库内部重复
List<UserInfo> userInfoListExist = new ArrayList<UserInfo>();
userInfoListExist = userInfoDao.findByUserName(userInfo.getUserName());
if (userInfoListExist.size() == 0 || userInfo.getUserId() == 1){
userInfoList.add(userInfo);
}else{
userInfo.setUserId(2);
userInfoList.add(userInfo);
}
}
导出数据
try{
//设置导出文件为Excel格式,文件名为UserInfo+yyyyMMddHHmmss
HttpServletResponse response = ServletActionContext.getResponse();
Date dt = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String sFileName = "UserInfo" + df.format(dt).toString();
OutputStream ops = response.getOutputStream();
response.reset();
response.setHeader("Content-Disposition", "attachment; filename="+ sFileName +".xls");
response.setContentType("application/msexcel");
//设置写入的数据表为Sheet1
WritableWorkbook wwb = Workbook.createWorkbook(ops);
WritableSheet ws = wwb.createSheet("Sheet1", 0);
//设置单元格格式
WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
WritableCellFormat wcf = new WritableCellFormat(wf);
wcf.setAlignment(jxl.format.Alignment.CENTRE);
wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//设置列宽
ws.setColumnView(0, 10);
ws.setColumnView(1, 20);
//写入第一行(标题行)
ws.addCell(new Label(0, 0, "UserName", wcf));
ws.addCell(new Label(1, 0, "UserPassword", wcf));
//从数据库中读取内容并依次从第二行写入Excel
List<UserInfo> userInfoList = userInfoDao.findAll();
if (userInfoList.size() > 0){
for (int i=0; i<userInfoList.size(); i++){
ws.addCell(new Label(0, i+1, userInfoList.get(i).getUserName(), wcf));
ws.addCell(new Label(1, i+1, userInfoList.get(i).getUserPassword(), wcf));
}
}else{
result = "FAILURE";
return result;
}
//正式写入
wwb.write();
//关闭连接
wwb.close();
ops.close();
result = "SUCCESS";
}catch(Exception e){
result = "FAILURE";
}
分享到:
相关推荐
JXL 操作 EXCEL 的各个类的解析 JXL 操作 EXCEL 的各个类的解析是 Java 语言中操作 Excel 文件的主要方法之一。JXL 通过提供了多种类来实现对 Excel 文件的读写操作。 首先,JXL 提供了一个抽象类 Workbook,该类...
利用jxl操作excel文件,提取exce文件数据生成txt文件。
jxl操作excel实例,jxl jar包下载 jxl操作excel实例,jxl jar包下载 jxl操作excel实例,jxl jar包下载
JXL操作EXCEL 数据库导出EXCEL相关文件一些详细资料
使用jxl操作Excel,可以作为一个帮助文件
JXL操作excel 字体 颜色 设置单元格 详解
jxl操作excel.pdf
jxl操作excel模板jar包,用于导出特定excel模板
jxl操作excel,jxl操作读写excel2003.
jxl操作excel文件示例,对于jxl的使用给出一个简单的示例,帮助大家快速入门
jxl操作excel说明以及jxl jar包
Excel的生成方式其实很简单,主要包括几个大的类,首先最重要的几个类就是WritableWorkbook,这个类代表的就是一个Excel文档,使用过Excel文档的都应该知道Excel文档的组成,都是由一个一个的sheet组成的,那么这个...
通过jxl操作excel,简单方便......................
java中jxl操作excel
jxl操作Excel说明,及API文档,编写jxl不用愁
JXL操作EXCEL公式,颜色,表格,百分比,小数点等等等等
Java jxl操作Excel97-2003 可运行实例
jxl操作EXCEL的好东西,大家学习一下,很简单好用