`
hypgr
  • 浏览: 276912 次
社区版块
存档分类
最新评论

web中使用POI导入导出EXCEL文件的例子

阅读更多

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((short) 0);
   
   HSSFCell cell1 = row.createCell((short) 0);// 第一列
   HSSFCell cell2 = row.createCell((short) 1);
   HSSFCell cell3 = row.createCell((short) 2);
   // 定义单元格为字符串类型
   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((short) 0) == null) {
                     name = "";
                    } else if (hssfrow.getCell((short) 0).getCellType() == 0) {
                     name = new Double(hssfrow.getCell((short) 0).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else {
                     name = hssfrow.getCell((short) 0).getStringCellValue().trim();
                    }
                    /** *//**将EXCEL中的第 j 行,第二列的值插入到实例中*/
                    //姓名
                    if(hssfrow.getCell((short) 1) == null){
                     sex = "";
                    } else if(hssfrow.getCell((short) 1).getCellType() == 0) {
                        sex = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else {
                        sex = hssfrow.getCell((short) 1).getStringCellValue().trim();
                    }
                    /** *//**将EXCEL中的第 j 行,第三列的值插入到实例中*/
                    //姓名
                    if(hssfrow.getCell((short) 1) == null){
                     age = "";
                    } else if(hssfrow.getCell((short) 1).getCellType() == 0) {
                        age = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else {
                        age = hssfrow.getCell((short) 1).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>
 下传文件 <a href="<%=download %>" name="下载">下载</a>
</html>

 

分享到:
评论

相关推荐

    SpringMvc 使用poi导入导出Excel

    本篇文章将详细介绍如何在Spring MVC项目中使用Apache POI库来实现Excel的导入和导出。 Apache POI是Apache软件基金会的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,POI提供了API...

    poi导入导出excel

    下面将详细解释如何使用 POI 实现 Excel 的导入导出功能。 首先,为了导出 Excel,我们需要创建一个 `HSSFWorkbook` 对象,这是 POI 中表示 Excel 工作簿的类。然后,我们可以创建一个或多个 `HSSFSheet` 对象来...

    Java使用POI实现Excel报表的导入和导出

    利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...

    poi 导出EXCEL 例子

    本例子将详细介绍如何使用Apache POI库导出Excel文件。 首先,我们需要添加Apache POI库到我们的项目中。在给定的文件列表中,我们看到`poi-2.5.1.jar`,这是Apache POI的一个早期版本。现代项目通常会使用更新的...

    poi报表导入导出.zip

    利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...

    struts2+poi实现导出Excel文件.pdf

    在这个例子中,开发者使用的是`poi-3.2.jar`版本。POI库提供了对Excel文件操作的API,使得我们能够创建、修改和读取Excel文件。 在Struts2框架中,导出Excel功能主要通过一个Action类实现。Action类是Struts2的核心...

    java导入导出excel(自己的例子)

    在Java编程中,导入和导出Excel数据是常见的需求,特别是在数据分析、报表生成或数据交换等场景。本示例将探讨如何使用Java处理Excel文件,主要依赖于Apache POI库和JExcelAPI库。这两个库提供了对Microsoft Excel...

    springmvc+poi 导入导出文件controller以及工具类

    在这个例子中,`importExcel`方法接收上传的Excel文件,将其转换为`InputStream`,然后传递给`ExcelService`进行数据解析。`exportExcel`方法则根据业务需求生成数据列表,调用`writeToExcel`方法将数据写入到响应流...

    POI导入excel大数据处理,支持excel2003,2007

    Apache POI是一个开源项目,主要用于读取和写入Microsoft Office格式...在JavaWeb项目中,结合POI处理Excel文件可以极大地提高数据导入导出的效率和灵活性。如果你正在处理这样的任务,了解和掌握POI将是非常有价值的。

    ssm+ maven+excel导入导出源码

    5. **Excel导入导出**:在Java中,通常使用Apache POI库来处理Excel文件。POI提供了API,可以创建、修改和读取Excel文件。在导入时,程序会读取Excel文件中的数据,可能经过验证和转换,然后通过MyBatis保存到数据库...

    jsp 导入 excel的例子

    在这个例子中,我们首先获取上传的文件,然后使用`WorkbookFactory.create()`方法创建一个`Workbook`对象来代表Excel文件。接着,我们访问第一个工作表,并遍历每一行,读取每行的第一列和第二列的值。注意,这里...

    javaPOI ssm导入导出

    这个小Demo展示了Java POI在SSM项目中的基本应用,可以帮助开发者快速搭建Excel导入导出功能。通过学习和实践,你可以根据实际需求扩展功能,如验证数据、自定义样式、处理不同类型的单元格等。

    java web项目中通过apache poi将本地excel文件导入到系统中并打印到控制台

    在这个例子中,提供的压缩包包含了一个名为"一个excel.xls"的文件,你可以替换上述代码中的文件路径,运行程序来测试导入和打印Excel内容的功能。此外,"poiProject"可能是一个包含整个项目源代码的文件夹,你可以在...

    springboot + poi导出指定格式Excel模板

    在本文中,我们将深入探讨如何使用SpringBoot和Apache POI库来导出指定格式的Excel模板。Apache POI是Java领域广泛使用的库,用于读写Microsoft Office格式的文件,其中包括Excel(.xlsx 和 .xls)文件。SpringBoot...

    domino xpags 开发 Excel导入导出完整例子

    在这个"domino xpags 开发 Excel导入导出完整例子"中,我们将深入探讨如何利用XPAGS来实现Excel文件的导入与导出功能,这对于企业级应用中数据管理和分析至关重要。 首先,让我们关注"导出excel.doc"文件。这个文档...

    NOPI网页excul导入导出例子

    4. **Web集成**:理解如何在Web环境中使用NOPI,可能涉及到Servlets、JSP或者Spring MVC等Web框架,以及如何处理用户上传的Excel文件和生成下载的Excel响应。 5. **注释与文档**:由于描述中提到注释清晰,所以例子...

    excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    总的来说,这个项目涵盖了Java Web开发、数据库操作和Excel文件处理等多个方面,是学习和实践数据导入导出功能的好例子。通过这个项目,开发者可以深入理解SpringBoot的自动化配置、MyBatis的映射机制,以及Apache ...

    poi +jsp 实现excel的上传下载的小例子

    标题中的“poi+jsp 实现excel的上传下载的小例子”是指使用Apache POI库与Java Server Pages(JSP)技术来处理Excel文件的上传和下载功能。Apache POI是一个流行的开源项目,它允许开发者在Java应用程序中创建、修改...

Global site tag (gtag.js) - Google Analytics