ssh导出数据库的数据到Excel表格

最近在项目开发过程中,实现了一个excel表格导入数据到数据库,最近又在开发一个功能就是把数据库的数据导出来到excel表格中,觉得这个功能不错,便写出来和大家分享一下,

第一步:导入所需要的poi的jar包,这些jar包有网上整理好的,直接去网上下载就好,先创建一个功能类,用来设置excel表格的形式,和导出数据的功能实现代码,在这里附上我测试成功的代码

package com.oracle.match.util;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFHeader;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;

import com.oracle.match.po.Sign;
import com.oracle.match.service.SignService;

public class ExportUtil {
    /*因为我这里这个函数要在action类里调用,下面要导出的数据要在数据库里先查询出来,所以里面的函数要传过来一个service对象,也就是业务逻辑类的对象,以用来实现相应的业务逻辑*/
    
    public String export(SignService signService)throws Exception
    {  
    List<Sign> SignList=new ArrayList<Sign>();
    System.out.println(signService);
    SignList=signService.querysignById(1);

    
                 /*设置表头:对Excel每列取名
                  *(必须根据你取的数据编写)
                  */
    String []tableHeader={"学号","姓名","赛事名","性别","班级","比赛时间"};
    /*
                 *下面的都可以拷贝不用编写
                 */
    short cellNumber=(short)tableHeader.length;//表的列数
    HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个excel
    HSSFCell cell = null; //Excel的列
    HSSFRow row = null; //Excel的行
    HSSFCellStyle style = workbook.createCellStyle(); //设置表头的类型
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    HSSFCellStyle style1 = workbook.createCellStyle(); //设置数据类型
    style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    HSSFFont font = workbook.createFont(); //设置字体
    HSSFSheet sheet = workbook.createSheet("sheet1"); //创建一个sheet
    HSSFHeader header = sheet.getHeader();//设置sheet的头
    try {              /**
                         *根据是否取出数据,设置header信息
                         *
                         */
    if(SignList.size() < 1 ){
    header.setCenter("查无资料");
    }else{
    header.setCenter("学生表");
    row = sheet.createRow(0);
    row.setHeight((short)400);
    for(int k = 0;k < cellNumber;k++){
    cell = row.createCell(k);//创建第0行第k列
    cell.setCellValue(tableHeader[k]);//设置第0行第k列的值
    sheet.setColumnWidth(k,8000);//设置列的宽度
    font.setColor(HSSFFont.COLOR_NORMAL); // 设置单元格字体的颜色.
    font.setFontHeight((short)350); //设置单元字体高度
    style1.setFont(font);//设置字体风格
    cell.setCellStyle(style1);
    }
                            /*
                             * // 给excel填充数据这里需要编写
                             *    
                             */
    for(int i = 0 ;i < SignList.size() ;i++){   
    Sign sign = (Sign)SignList.get(i);//获取sign对象
        row = sheet.createRow((short) (i + 1));//创建第i+1行
        row.setHeight((short)400);//设置行高
       
        if(sign.getStunum() != null){
        cell = row.createCell(0);//创建第i+1行第0列
        cell.setCellValue(sign.getStunum());//设置第i+1行第0列的值
    cell.setCellStyle(style);//设置风格
        }
        if(sign.getUname() != null){
        cell = row.createCell(1); //创建第i+1行第1列

        cell.setCellValue(sign.getUname());//设置第i+1行第1列的值

        cell.setCellStyle(style); //设置风格
        }
    //由于下面的和上面的基本相同,就不加注释了
        if(sign.getMatchname() != null){
        cell = row.createCell(2);
        cell.setCellValue(sign.getMatchname());
        cell.setCellStyle(style);
        }
        if(sign.getUsex()!= null){
        cell = row.createCell(3);
        cell.setCellValue(sign.getUsex());
        cell.setCellStyle(style);
        }
        if(sign.getSclass() != null){
        cell = row.createCell(4);
        cell.setCellValue(sign.getSclass());
        cell.setCellStyle(style);
        }
        if(sign.getMdate()!= null){
            cell = row.createCell(5);
            cell.setCellValue(sign.getMdate());
            cell.setCellStyle(style);
            }
       
    }

    }

    } catch (Exception e) {
    e.printStackTrace();
    }

      /*
       *下面的可以不用编写,直接拷贝
       *
       */
    HttpServletResponse response = null;//创建一个HttpServletResponse对象
    OutputStream out = null;//创建一个输出流对象
    try {
    response = ServletActionContext.getResponse();//初始化HttpServletResponse对象
    out = response.getOutputStream();//
            response.setHeader("Content-disposition","attachment; filename="+"student"+SignList.get(0).getUsex()+SignList.get(0).getMatchname()+".xls");//filename是下载的xls的名,建议最好用英文
            response.setContentType("application/msexcel;charset=UTF-8");//设置类型
            response.setHeader("Pragma","No-cache");//设置头
            response.setHeader("Cache-Control","no-cache");//设置头
            response.setDateHeader("Expires", 0);//设置日期头
            workbook.write(out);
            out.flush();
    workbook.write(out);
    } catch (IOException e) {
    e.printStackTrace();
    }finally{
    try{

    if(out!=null){
    out.close();
    }

    }catch(IOException e){
    e.printStackTrace();
    }

    }

    return null;
    }
}




上面的功能类是根据我需要导出的数据库的表里的字段设计的,大家在用的时候可以根据自己的需要,在更改

第二步:编写完功能类之后,要在action里调用,同时传过去一个service对象,代码如下:

public String export()
    {
        ExportUtil Export=new ExportUtil();
        try {
            Export.export(signService);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("导出数据有误");
        }
        return "export";
    }


最后在需要把action在struts.xml文件里配置,最后只需要在前台调用就可以了,希望上面说的那些对你们会有帮助。。。。。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值