poi实现excel的导入导出

import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;

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

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import com.alibaba.fastjson.JSONObject;

/**
 *
* @ClassName: ImportInfo
* @Description: TODO(用户数据 导入)
* @author liubf
* @date 2015年12月24日 下午3:50:19
*
 */
@SuppressWarnings("serial")
public class CustManageAction extends BaseServlet {

    CustManageService custManageService = new CustManageServiceImpl();

    /**
     *
    * @Title: importInfo
    * @Description: TODO(批量导入数据)
    * @param @param req
    * @param @param resp    设定文件
    * @return void    返回类型
     * @throws Exception
    * @throws
    * @author liubf
    * @date 2015年12月24日 下午3:50:40
     */
    @SuppressWarnings("rawtypes")
    public void importInfo(HttpServletRequest request, HttpServletResponse response) throws Exception{

        try {
            String sellerId = (String)request.getSession().getAttribute("sellerId");
            ArrayList<HashMap<String,Object>> infoList = new ArrayList<HashMap<String,Object>>();
            String tempPath  = getServletContext().getRealPath("/temp");//缓存地址
            HashMap<String, Object> fileMap = FileUpload.fileToStream(request, tempPath);
            InputStream stream = (InputStream)fileMap.get("inputStream");
            String suffix = (String)fileMap.get("suffix");
            Workbook rwb = null;
                if((".xlsx").equals(suffix)){
                        rwb = new XSSFWorkbook(stream);//Excel 2007
                } else {
                    rwb = new HSSFWorkbook(stream);//Excel 2003
                }
                Sheet sheet = rwb.getSheetAt(0);
                //校验各列的数据准确性
                String title_userPhone= sheet.getRow(4).getCell(0).toString().trim();//手机号
                String title_userName = sheet.getRow(4).getCell(1).toString().trim();//姓名
                String title_userSex = sheet.getRow(4).getCell(2).toString().trim();//性别
                String title_carModel = sheet.getRow(4).getCell(3).toString().trim();//车型
                String title_carNumber = sheet.getRow(4).getCell(4).toString().trim();//车牌号
                String title_remarks = sheet.getRow(4).getCell(5).toString().trim();//备注
            if ( !"手机号".equals(title_userPhone) || !"姓名".equals(title_userName)
                    || !"性别".equals(title_userSex) || !"车型".equals(title_carModel)
                    || !"车牌号".equals(title_carNumber)|| !"备注".equals(title_remarks)) {
                throw new AppException("请检查模板是否正确,或下载使用新模板!");
            }
                for(int i=5;i<sheet.getPhysicalNumberOfRows();i++){
                    HashMap<String,Object> map = new HashMap<String,Object>();
                    String userPhone     = sheet.getRow(i).getCell(0).toString();
                    if(StringUtils.isEmpty(userPhone)){
                        throw new AppException("第"+i+1+"行手机号不能为空!");
                    }
                    String userName     = sheet.getRow(i).getCell(1).toString();
                    if(StringUtils.isEmpty(userName)){
                        throw new AppException("第"+i+1+"行姓名不能为空!");
                    }
                    String userSex         = sheet.getRow(i).getCell(2).toString();
                    String carModel     = sheet.getRow(i).getCell(3).toString();
                    String carNumber = sheet.getRow(i).getCell(4).toString();
                    String remarks         = sheet.getRow(i).getCell(5).toString();
                    map.put("userPhone", userPhone);
                    map.put("userName", userName);
                    map.put("userSex", userSex);
                    map.put("sellerId", sellerId);
                    map.put("carModel", carModel);
                    map.put("carNumber", carNumber);
                    map.put("remarks", remarks);
                    infoList.add(map);
                }
                if(infoList.size()<1){
                    throw new AppException("上传表格不能为空");
                }
                String msg = custManageService.importInfo(infoList);
                JSONObject jsonObject = new JSONObject();
                if(StringUtils.isEmpty(msg)){
                    msg = "导入成功!";
                }else{
                    msg = "导入成功!部分已存在的数据未进行导入,未导入的手机号为:"+msg;
                }
                jsonObject.put("msg", msg);
                jsonObject.put("success", "true");
                print(response, jsonObject);
        } catch (AppException e) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("msg", "导入失败!错误原因:"+e);
            jsonObject.put("success", "false");
            print(response, jsonObject);
            e.printStackTrace();
        }catch (Exception e) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("msg", "导入失败!请稍后重试.");
            jsonObject.put("success", "false");
            print(response, jsonObject);
            e.printStackTrace();
        }

    }

    /**
     *
    * @Title: exportInfo
    * @Description: TODO(用户信息导出)
    * @param @param request
    * @param @param response
    * @param @throws Exception    设定文件
    * @return void    返回类型
    * @throws
    * @author liubf
    * @date 2015年12月30日 下午2:42:00
     */
    public void exportInfo(HttpServletRequest request,HttpServletResponse response) throws Exception{
                String sellerId = "1061"  ;   // (String)request.getSession().getAttribute("sellerId");  写完登陆后改回来
                String fileName = "userInfo.xls";
                //根据浏览器进行判断文件名转码方式>>>>>>>
                String agent = request.getHeader("USER-AGENT");
                if ((null != agent && -1 != agent.indexOf("MSIE")) || (null != agent   && -1 != agent.indexOf("Trident"))) {// ie
                    fileName = URLEncoder.encode("用户信息表.xls","utf-8");
                } else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等
                    fileName = new String("用户信息表.xls".getBytes("UTF-8"), "iso-8859-1");
                //根据浏览器进行判断文件名转码方式<<<<<<<<<<
                HSSFWorkbook wb = custManageService.exportInfo(sellerId);
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-disposition", "attachment;filename="+fileName);
                OutputStream ouputStream = response.getOutputStream();
                wb.write(ouputStream);
                ouputStream.flush();
                ouputStream.close();
           }
}
}

service代码

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class CustManageServiceImpl  implements CustManageService{
    CustManageDao custManageDao= new CustManageDaoImpl();
    public String importInfo(ArrayList<HashMap<String,Object>> infoList) throws Exception {
        Connection conn = null;
        StringBuffer stringBuffer = new StringBuffer();
        try{
            conn = JDBCUtils.getConnection();
            conn.setAutoCommit(false);
            String sql_query = "select userPhone, userName from cbb_sellerMember where userPhone = ?";
            String sql_insert = "insert into cbb_sellerMember(userPhone,userName,userSex,sellerId,carModel,carNumber,remarks) values(?,?,?,?,?,?)";
            for(int i=0; i<infoList.size(); i++){
                HashMap<String,Object> rowMap = infoList.get(i);//取出每一行的数据
                String userPhone = String.valueOf(rowMap.get("userPhone"));
                String userName = String.valueOf(rowMap.get("userName"));
                String userSex = String.valueOf(rowMap.get("userSex"));
                String sellerId = String.valueOf(rowMap.get("sellerId"));
                String carModel = String.valueOf(rowMap.get("carModel"));
                String carNumber = String.valueOf(rowMap.get("carNumber" ));
                String remarks = String.valueOf(rowMap.get("remarks"));
                Object[] params = {userPhone};
                Map<String, Object> existInfo = custManageDao.query(conn,sql_query, params);//根据手机号查是否有此记录
                if(null == existInfo || null == existInfo.get("userPhone") ){
                    Object[] in_params = {userPhone,userName,userSex,sellerId,carModel,carNumber,remarks};
                    custManageDao.update(conn,sql_insert,in_params);//没有此记录的话则插入一条记录
                }else{
                    stringBuffer.append(userPhone).append(",");
                }
            }
            DbUtils.commitAndCloseQuietly(conn);
        }catch(Exception e){
            DbUtils.rollbackAndCloseQuietly(conn);
                throw e;
            }
        return stringBuffer.substring(0, stringBuffer.length()-1).toString();
    }

    public HSSFWorkbook exportInfo(String sellerId) throws Exception {
         String[] excelHeader = { "手机号", "姓名", "性别","车型","车牌号","备注"};
                HSSFWorkbook wb = new HSSFWorkbook();
                HSSFSheet sheet = wb.createSheet("会员信息");
                HSSFRow row = sheet.createRow((int) 0);
                HSSFCellStyle style = wb.createCellStyle();
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                //设置header栏
                for (int i = 0; i < excelHeader.length; i++) {
                    HSSFCell cell = row.createCell(i);
                    cell.setCellValue(excelHeader[i]);
                    cell.setCellStyle(style);
                    sheet.autoSizeColumn(i);
                    sheet.setColumnWidth(i, 5000);
                }    

                List<Map<String, Object>> customerList = custManageDao.querySellerMember( sellerId);
                for (int i = 0; i < customerList.size(); i++) {
                    row = sheet.createRow(i + 1);
                    Map<String, Object> customer = customerList.get(i);
                    row.createCell(0).setCellValue(String.valueOf(customer.get("userPhone")));
                    row.createCell(1).setCellValue(String.valueOf(customer.get("userName")) == null ? "" : String.valueOf(customer.get("userName")));
                    String sex = String.valueOf(customer.get("userSex"));
                    if("1".equals(sex)){
                        sex = "男";
                    }else if("0".equals(sex)){
                        sex = "女";
                    }else{
                        sex = "";
                    }
                    row.createCell(2).setCellValue(sex);
                    row.createCell(3).setCellValue(String.valueOf(customer.get("carModel")) == null ? "" : String.valueOf(customer.get("carModel")) );
                    row.createCell(4).setCellValue(String.valueOf(customer.get("carNumber"))== null ? "" : String.valueOf(customer.get("carNumber")));
                    row.createCell(5).setCellValue(String.valueOf(customer.get("remarks")) == null ? "" : String.valueOf(customer.get("remarks")) );
                }
                return wb;
    }

}
时间: 2024-10-08 23:23:55

poi实现excel的导入导出的相关文章

java实现excel的导入导出(poi详解)[转]

java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava 经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了.是比较好用的excel导出工具. 下面来认识一下这个它吧. 我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类. 一个excel表格: HSS

excel的导入导出的实现

1.创建Book类,并编写set方法和get方法 1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.out.println("调用了类型方法"); 11 return type; 12 } 13 14 pu

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri

Excel格式导入导出数据(单语言版本)

Excel格式导入导出数据(单语言版本) 可以使用常用的excel格式导入导出相关数据,包含: 1. 商品分类: 2. 筛选组: 3. 筛选: 4. 商品资料: 5. 商品附加图片资料,(不包含图片本身的上传或抓取): 6. 商品选项: 7. 商品属性: 8. 产品特价数据: 9. 商品折扣数据: 10. 商品奖励积分数据: 特色: 1. 常用excel软件编辑商品数据后导入: 2. 导出的文件名称包含日期和时间,便于备份存档: 3. 由于涉及到服务器的内存,以及数据的多寡,可以将数据按照商品I

excel数据导入导出数据库

第一种方法: 先把Excel另存为.csv格式文件,如test.csv,再编写一个insert.ctl 用sqlldr进行导入! insert.ctl内容如下: load data          --1.控制文件标识 infile ‘my.csv‘          --2.要输入的数据文件名为my.csv append into table "tbl_test"   --3.向表table_name中追加记录 fields terminated by ‘,‘          

Excel jxl导入导出

JAVA EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为是使用Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的访问. 现在发布的稳定版本是V2.0,提供以下功能: 从Excel 95.97.2000等格式的文件中读取数据: 读取Exc

aspose.cells excel表格导入导出

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Reflection; using System.IO; using Aspose.Cells; using System.Data; using System.ComponentModel; using System.Configuration; namespace src.Common { publ

ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例

这篇文章主要介绍了ThinkPHP使用PHPExcel实现Excel数据导入导出,非常实用的功能,需要的朋友可以参考下 本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错造成的,如果有问题大家务必要对路劲是否引用正确进行测试. 具体操作步骤如下: (一)导入Excel 第一,在前台html页面进行上传文件:如: <form method="post"

Poi实现Excel的导入

前面写过一篇HSSF(实际上就是Poi)实现Excel导出的随笔,正好最近也有做导入的需求,那么就索性再写一篇Poi导入Excel的随笔吧. 其实,poi导入Excel和Poi导出Excel在实现步骤上是大同小异的,但是做这个之前,有一个问题需要搞清楚,Excel文件的分类,Excel有2003板,后缀为.xls和2007板,后缀为.xlsx,而Poi解析这两种文件的时候,使用的类是不同的,前者使用的是HSSFWorkBook,后者是XSSFWorkBook; 搞清楚了这个,接下来就可以开始Ex