JAVA-SSM 导出Excel

本文介绍了如何在Java Spring-Struts-MyBatis(SSM)框架下实现Excel导出功能。通过创建一个ExcelService工具类,并在Controller中注入并调用该服务,配合UserInfoService来获取需要导出的数据。只需在目标表中添加一个查询所有数据的接口,即可完成导出。测试时,可以通过接口下载文件,后缀为.bin,建议使用WPS或类似软件打开,显示正常即表示导出成功。

 

导出Excel   也就是一个工具类的性质

直接上代码 

Controller

package com.mj.zhibo.excel.controller;

import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mj.util.ExcelUtil;
import com.mj.util.IdUtils;
import com.mj.zhibo.excel.service.ExcelService;
import com.mj.zhibo.userinfo.pojo.Userinfo;
import com.mj.zhibo.userinfo.service.UserInfoService;

import javax.servlet.http.HttpServletResponse;

/**
 * @author Mr.Wen
 * @description 导出excel
 * @date 2018/3/19
 */
@Controller
public class ExcelController {
    private final static Logger LOGGER = LoggerFactory.getLogger(ExcelController.class);
    @Autowired
    private ExcelService excelService;
    
    
    @Autowired
    private UserInfoService userInfoService;
    

    /**
     * 订单表导出excel
     *
     * @param response
     */
    @RequestMapping(value = "exportfeedbackTwo")
    @ResponseBody
    public void exportFeedBack2(
            HttpServletResponse response,

            @RequestParam(value = "clientname", required = false) String tel,
            @RequestParam(value = "startTime", required = false) Long startTime,
            @RequestParam(value = "endTime", required = false) Long endTime) {

        String fileName = IdUtils.genImageName() + ".xls"; // 文件名
        String sheetName = "客户用餐";// sheet名

        String[] title = new String[] { "姓名", "用户头像", "密码", "电话号", "账户",
                "时间" };// 标题

        Map<String, String> map = new HashMap<String, String>();
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        map.put("tel", tel);
        map.put("startTime", startTime != null ? sdf1.format(startTime) : null);
        map.put("endTime", endTime != null ? sdf1.format(endTime) : null);
        try {
            List<Userinfo> list = userInfoService
                    .selectByDateAndTel(map);// 内容list

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            String[][] values = new String[list.size()][];
            for (int i = 0; i < list.size(); i++) {
                values[i] = new String[title.length];
                // 将对象内容转换成string
                Userinfo obj = list.get(i);
                values[i][0] = String.valueOf(obj.getUsername());
                values[i][1] = String.valueOf(obj.getHeadimage());
                values[i][2] = String.valueOf(obj.getPwd());
                values[i][3] = String.valueOf(obj.getPhone());
                values[i][4] = String.valueOf(obj.getAccount());
                values[i][5] = sdf1.format(obj.getCreated());

            }
            HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title,
                    values, null);

            // 将文件存到指定位置
            this.setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    
    
    
    
    
    
    
    
    @RequestMapping(value = "exportfeedbackPhone")
       @ResponseBody
       public void exportfeedbackPhone(
               HttpServletResponse response,

               @RequestParam(value = "clientname", required = false) String tel,
               @RequestParam(value = "startTime", required = false) Long startTime,
               @RequestParam(value = "endTime", required = false) Long endTime) {

           String fileName = IdUtils.genImageName() + ".xls"; // 文件名
           String sheetName = "客户用餐";// sheet名

           String[] title = new String[] {"电话号"};// 标题

           Map<String, String> map = new HashMap<String, String>();
           SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
           map.put("tel", tel);
           map.put("startTime", startTime != null ? sdf1.format(startTime) : null);
           map.put("endTime", endTime != null ? sdf1.format(endTime) : null);
           try {
               List<Userinfo> list = userInfoService
                       .selectByDateAndTel(map);// 内容list

               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

               String[][] values = new String[list.size()][];
               for (int i = 0; i < list.size(); i++) {
                   values[i] = new String[title.length];
                   // 将对象内容转换成string
                   Userinfo obj = list.get(i);
                   values[i][0] = String.valueOf(obj.getPhone());
               }
               HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title,
                       values, null);

               // 将文件存到指定位置
               this.setResponseHeader(response, fileName);
               OutputStream os = response.getOutputStream();
               wb.write(os);
               os.flush();
               os.close();

           } catch (Exception e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }

       }
       
       
    
    
    
    
    
    

    private void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

 

  @Autowired
    private ExcelService excelService;
    
    
    @Autowired
    private UserInfoService userInfoService;

 

上面的代码中    ExcelService 下面会有说明    UserInfoService这个就是你要导出的表  

接着上代码

ExcelService

public interface ExcelService {
	/**
     * 用户表导出excel
     * @param response
     */

	List<Userinfo> selectByDateAndName(Map<String, String> map)throws Exception;


}

 

ExcelServiceImpl


@Service
public class ExcelServiceImpl implements ExcelService {
	
	
	    @Autowired 
		private  UserInfoService userInfoService;
	private void setResponseHeader(HttpServletResponse response, String fileName) {{
        try {
            try {
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }}
	@Override
	public List<Userinfo> selectByDateAndName(Map<String, String> map)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

}

到这的话,基本上就完了,你想导出哪张表, 就是在那个表里面写一个查询全部的接口

 

还有一个,就是关于你怎么测试这个接口

点Send And Download

 

这样就是成功的了  后缀是bin

我是用的WPS表格打开的   就是这样子

成功!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值