JAVA—咖啡馆

——欢迎访问rogerfan的博客,常来《JAVA——咖啡馆》坐坐,喝杯浓香的咖啡,彼此探讨一下JAVA技术,交流工作经验,分享JAVA带来的快乐!本网站部分转载文章,如果有版权问题请与我联系。

BlogJava 首页 新随笔 联系 聚合 管理
  447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
struts1.x的例子,struts2.x可以参考自己修改

1.action的写法

 

import java.io.*;
import java.sql.*;
import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import org.apache.commons.beanutils.BeanUtils;

public class Action {
 
/*
  * 把数据库中的字段导入到Excel ,并生成Excel文档
  *
*/

 
public ActionForward getDownload(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) 
throws Exception {
  Form fm 
= (Form) actionForm;
  
// Excel 文件存放在服务器的相对路径下
  String outputFile = request.getRealPath("/tmp/Excel.xls");
  
  
try {
   
// 创建新的Excel 工作簿
   HSSFWorkbook workbook = new HSSFWorkbook();
   
// 在Excel 工作簿中建一工作表
   HSSFSheet sheet = workbook.createSheet("Sheet1");
   
// 设置单元格格式(文本)
   HSSFCellStyle cellStyle = workbook.createCellStyle();
   cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(
"@"));
   
   
// 在索引0的位置创建行(第一行)
   HSSFRow row = sheet.createRow((short0);
   
   HSSFCell cell1 
= row.createCell((short0);// 第一列
   HSSFCell cell2 = row.createCell((short1);
   HSSFCell cell3 
= row.createCell((short2);
   
// 定义单元格为字符串类型
   cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell2.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell3.setCellType(HSSFCell.CELL_TYPE_STRING);
   
   cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
   
// 在单元格中输入数据
   cell1.setCellValue("姓名");
   cell2.setCellValue(
"性别");
   cell3.setCellValue(
"年龄");
   
   Connection connection 
= session.connection();
   
   String sql 
= "Select t.name, t.sex, t.age from table t where t.sex = ?";
   
   
try {
    PreparedStatement ps 
= connection.prepareStatement(sql);
    ps.setString(
1, fm.getSex());// 传入查询条件
    ResultSet rs = ps.executeQuery();// 查询结果存入rs
    connection.commit();// 执行SQL
    
    
while (rs.next()) {
    
//设置j行从第二行开始
     int j = 1;
     row 
= sheet.createRow((short) j);
     
//设置i列从第二列开始
     for (int i = 1; i <= 3; i++{
      HSSFCell cell 
= row.createCell((short) (i-1));
      
// 设置单元格格式
      cell.setCellStyle(cellStyle);
      cell.setCellType(HSSFCell.CELL_TYPE_STRING);
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);
      cell.setCellValue(rs.getString(i));
     }

     
     j
++;
    }

    
    request.setAttribute(
"message""文件生成成功!");
   }
 catch (SQLException e) {
    request.setAttribute(
"message""创建文件失败!");
    e.printStackTrace();
   }

   
// 删除路径下同名的Excel 文件
   File path = new File(outputFile);
   path.delete();
   
   
// 新建一输出文件流
   FileOutputStream fOut = new FileOutputStream(outputFile);
   
// 把相应的Excel 工作簿存盘
   workbook.write(fOut);
   
// 操作结束,关闭文件
   fOut.flush();
   fOut.close();
    
//该处如果Excel过大会影响效率,谁有好的想法可以提出来参考(不过从页面下载完后就会清空)
   request.getSession().setAttribute("Download", outputFile);
   
  }
 catch (Exception ioexception) {
   request.setAttribute(
"message""创建文件失败!");
   
return actionMapping.findForward("outJSP");
  }

  
  
return actionMapping.findForward("outJSP");
 }

 
 
/*
  * 从Excel文件中读取数据,并导入到数据库中
  *
*/

  
public ActionForward getUpload(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) 
throws Exception {
  
// 获取excel 文件
  Form fm = (Form) actionForm;
  FormFile formfile 
= fm.getUploadfile();
  InputStream inputstream 
= formfile.getInputStream();
  fm.clear();
// 清空
  Session session = HibernateSession.currentSession();
  ArrayList list 
= new ArrayList();
  
int input = 0//导入记数
  String name = null;
  String sex 
= null;
  String age 
= null;
  
  
try {
   
//通过得到的文件输入流inputstream创建一个HSSFWordbook对象
         HSSFWorkbook hssfworkbook = new HSSFWorkbook(inputstream);
         HSSFSheet hssfsheet 
= hssfworkbook.getSheetAt(0);//第一个工作表
   HSSFRow hssfrow = hssfsheet.getRow(0);//第一行
   
   
//遍历该表格中所有的工作表,i表示工作表的数量 getNumberOfSheets表示工作表的总数
            for (int i = 0; i < hssfworkbook.getNumberOfSheets(); i++{
             hssfsheet 
= hssfworkbook.getSheetAt(i);
             
             
//遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
                for (int j = 1; j < hssfsheet.getPhysicalNumberOfRows(); j++{
                 hssfrow 
= hssfsheet.getRow(j);
                 
//判断是否还存在需要导入的数据
                    if (hssfrow == null{
                     System.out.println(
"这里已没有数据,在第"+i+"列,第"+j+"");
                     
break;
                    }

                    
/**将EXCEL中的第 j 行,第一列的值插入到实例中*/
                    
if (hssfrow.getCell((short0== null{
                     name 
= "";
                    }
 else if (hssfrow.getCell((short0).getCellType() == 0{
                     name 
= new Double(hssfrow.getCell((short0).getNumericCellValue()).toString();
                    }

                    
//如果EXCEL表格中的数据类型为字符串型
                    else {
                     name 
= hssfrow.getCell((short0).getStringCellValue().trim();
                    }

                    
/**将EXCEL中的第 j 行,第二列的值插入到实例中*/
                    
//姓名
                    if(hssfrow.getCell((short1== null){
                     sex 
= "";
                    }
 else if(hssfrow.getCell((short1).getCellType() == 0{
                        sex 
= new Double(hssfrow.getCell((short1).getNumericCellValue()).toString();
                    }

                    
//如果EXCEL表格中的数据类型为字符串型
                    else {
                        sex 
= hssfrow.getCell((short1).getStringCellValue().trim();
                    }

                    
/**将EXCEL中的第 j 行,第三列的值插入到实例中*/
                    
//姓名
                    if(hssfrow.getCell((short1== null){
                     age 
= "";
                    }
 else if(hssfrow.getCell((short1).getCellType() == 0{
                        age 
= new Double(hssfrow.getCell((short1).getNumericCellValue()).toString();
                    }

                    
//如果EXCEL表格中的数据类型为字符串型
                    else {
                        age 
= hssfrow.getCell((short1).getStringCellValue().trim();
                    }

                    
                    name 
= name.trim();
                    sex 
= sex.toUpperCase();
                    
                    
if (name.equals("")) {
                     error.setName(name);
                     error.setMessage(
"姓名不能为空");
                     
                     list.add(error);
                     
continue;
                    }
 else {
                     fm.setName(name);
                     fm.setSex(sex);
                     fm.setAge(age);
                     
                     session.save(fm);
                    }

                    
//导入成功加1
                    input++;
                }

            }

            
            session.saveObjs(list.toArray());
        }
 catch () {
         
        }

 }

}



2.Form的写法

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

public class Form extends ActionForm {
 
// 上传的文件
 private FormFile _flddo;
 
 
public void setUploadfile(FormFile formfile) {
  _flddo 
= formfile;
 }

 
 
public FormFile getUploadfile() {
  
return _flddo;
 }

 
 
public void clear() {
  _flddo 
= null;
 }

}





3.上传页面Upload.jsp



<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>

<html>
 
<html:form action="/Action.do?method=getUpload" method="POST" enctype="multipart/form-data">
  
<html:file property="uploadfile" size="80%" />
  
<input type="button" value="导 入" onclick="upload(this.form)" class="buttonGray">
 
</html:form>
</html>

<script language="javascript">
function upload(obj)
{
 
if(confirm("您现在选择的是XXX,您确定要导入吗?"))
 
{
  
var uploadfile = document.all.uploadfile.value;
  
if((null == uploadfile) ||"" == uploadfile))
  
{
   alert(
"上传文件没有指定!");
   
return false;
  }

     obj.action 
= '<html:rewrite page="/Action.do?method=getUpload"/>';
     obj.submit();
 }

}

</script>


4.下载页面Download.jsp



<%@ page contentType="text/html; charset=GBK"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>

<%
//获取下载文件
 
String download = (String) request.getSession().getAttribute("Download");
//清空文件
 request.getSession().removeAttribute(
"Download");
%>

<html>
 下传文件 
<href="<%=download %>" name="下载">下载</a>
</html>
posted on 2008-08-27 13:41 rogerfan 阅读(13875) 评论(19)  编辑  收藏 所属分类: 【Java知识】

Feedback

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2008-12-30 11:01 huahua
感谢楼主!
麻烦你把import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.hssf.usermodel.*;
这俩个jar包发给我好吗?邮箱luzhihua866@yahoo.com.cn  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2008-12-30 11:05 huahua
还有你这个EXCEL文件是什么样的? 三个字段吗?  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2009-03-04 11:19 yueyue
麻烦楼主把完整的例子给我发到我的邮箱好吗?
 yuechengkun@126.com  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2009-05-18 15:36 飞飞
您好,麻烦楼主把完整的例子给我发到我的邮箱好吗?
hexinteng@yahoo.cn  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2010-05-21 19:24 谭李
大哥、 把完整的例子发我下 tanlideai@126.com 谢谢了  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2011-08-02 11:37 cyt
可以给itcyt123@163.com发一份例子吗,谢谢了  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2011-08-10 17:48 fslong
fslong0459@126.com 麻烦把完整项目传一下,非常感谢,这个缺少一些类和配置文件  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-02-05 14:44 胡启明
能传个完整的项目么 121637791@qq.com 非常感谢!  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-02-06 18:15 wd
麻烦吧例子发到我的邮箱里!谢谢你了!
yanshuailong8917@163.com  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-05-30 11:52 admin
多谢楼主麻烦你把完整的例子发到957803796@qq.com好吗?谢谢了!  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-07-03 17:13 huangshuang
多谢楼主麻烦你把完整的例子发到273556298@qq.com好吗?谢谢了  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2012-07-12 10:38 yang
烦你把完整的例子发到752139325@qq.com好吗?谢谢了  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-07-14 21:56 jsp
多谢楼主麻烦你把完整的例子发到1053577162@qq.com好吗?谢谢了  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2012-08-13 11:40 小白
麻烦楼主也发给我一份完整的代码470024581@qq.com@jsp
  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2012-08-13 11:41 小白
470024581@qq.com就这么多,后面的jsp不是,  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子[未登录] 2012-10-23 14:28 finly
能够发一份完整的项目给我吗?155363287@qq.com  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-11-02 15:25 依然如此一个人
272025694@qq.com 可以发一份完整的项目给我嘛?、谢谢。  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2012-11-09 09:17 iorn
iorn2002@163.com 可以发一份完整的项目嘛?谢谢  回复  更多评论
  

# re: web中使用POI导入导出EXCEL文件的例子 2013-05-03 16:11 yzw
313585862@qq.com 麻烦lz给我发一份吧 真心谢谢了   回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: