把数据导出到Excel表格中的方式

导出数据到Excel表格中,总的来说可以分为两种方式:


1、​Java导出(有很多成熟的开源类库可供使用,在此讲述由Apache提供的HSSFWookbook)


2、JSP导出​


首先说说JSP导出数据,因为JSP导出数据方式比较简单(但是 特别实用)。大概说下操作流程:


i.准备数据:所准备的数据要符合以下要求。考虑到导出数据的容量以及特征,Excel是一个长X宽的平面,对于每行数据(即对象VO)的数据结构应该相似,或者可以转化为相似的数据结构,对于每列数据,具有重复性,可循环性(即容器)。​包装数据的对象一般是Collection接口的实现类或者Collection接口子接口的实现类,如果它们不能满足当时的业务环境,可以考虑自己封装一个工具类,该工具类要继承自上面的接口或者其实现类(即在其基础上编写自己想要的方法)。


ii.ok!----一旦上面的数据准备好之后(一般放在作用域中或者Ajax回调),下面的事情就比较简单了,闲扯结束-------​用Excel设计好自己想要的样式——另存为,修改其保存类型为.html,保存单张工作表——用常用的Java编辑器打开保存后的.html类型的文件,将编码修改为和项目环境编码一致的编码,再次修改类型为.jsp格式——放入项目中,ok。



iii.加入重要两行java代码:


​//导出到EXCEL文档

response.reset();//清楚buffer设置页面不缓存


response.setHeader("Content-disposition","attachment;filename=文件名.xls");//客户端使用目标另存为对话框保存指定文件


response.setContentType("application/msexcel;charset=编码格式");//通知客户文件的MIME类型


//response.setHeader("Content_Length",length);//设置文件的长度为指定文件的长度


这有一篇文章解释的不错,具体参见:http://blog.csdn.net/clever027/article/details/7070304 奋斗




iv.在.jsp文件中写java代码,获取后台准备好的​数据,准备将数据循环拆分,放入Excel相应的位置


v.S!​


​下面来说Java方式导出数据,来段代码,以备日后使用:


下面来自:http://blog.csdn.net/hs6823/article/details/6608308


import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.PrintSetup;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

import com.sais.inkaNet.base.db.VOpbDateResult;
import com.sais.inkaNet.base.db.VOpbMonthResult;
import com.sais.inkaNet.base.db.VOpbWeekResult;
import com.sais.inkaNet.base.db.VOpbYearResult;

public class SummaryHSSF {   
//这个是创建和书写excel文档的代码。
public void outExcel(String sheetP,String[] titles,List list,int width,String address,String type,HttpServletResponse response) throws IOException {   
 
    //创建Workbook对象(这一个对象代表着对应的一个Excel文件)   
                 //HSSFWorkbook表示以xls为后缀名的文件   
    Workbook wb = new HSSFWorkbook();  
    Map<String, CellStyle> styles = createStyles(wb);
    //获得CreationHelper对象,这个应该是一个帮助类   
    CreationHelper helper = wb.getCreationHelper();   
    //创建Sheet并给名字(表示Excel的一个Sheet) 
      Sheet sheet = wb.createSheet(sheetP);
      PrintSetup printSetup = sheet.getPrintSetup();
      printSetup.setLandscape(true);
      sheet.setFitToPage(true);
      sheet.setHorizontallyCenter(true);
      sheet.setDefaultColumnWidth(width);
      Row titleRow = sheet.createRow(0);
      titleRow.setHeightInPoints(45);
      Cell titleCell = titleRow.createCell(0);
      titleCell.setCellValue(sheetP);
      titleCell.setCellStyle(styles.get("title"));
      sheet.addMergedRegion(CellRangeAddress.valueOf(address));
     

      //header row
      Row headerRow = sheet.createRow(1);
      headerRow.setHeightInPoints(60);
      Cell headerCell;
      for (int i = 0; i < titles.length; i++) {
       headerCell = headerRow.createCell(i);
       headerCell.setCellValue(titles[i]);
          headerCell.setCellStyle(styles.get("header"));
      }
      
      VOpbYearResult vOpbYearResult=new VOpbYearResult();
      VOpbWeekResult vOpbWeekResult=new VOpbWeekResult();
      VOpbDateResult vOpbDateResult=new VOpbDateResult();
      VOpbMonthResult vOpbMonthResult=new VOpbMonthResult();
     
    
      
      //表头的设置以及J列和K列的设置
      int rownum = 2;
      for (int i = 0; i < list.size(); i++) {
          Row row = sheet.createRow(rownum++);
          for (int j = 0; j < titles.length; j++) {
              Cell cell = row.createCell(j);

                  cell.setCellStyle(styles.get("cell"));
                  if("1".equals(type)){
                   vOpbYearResult=(VOpbYearResult) list.get(i);
                  
                   if(j==0){
                    cell.setCellValue(vOpbYearResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbYearResult.getObTotleNumber());
                   }
                  }else if("2".equals(type)){
                   vOpbMonthResult=(VOpbMonthResult) list.get(i);
                      
                   if(j==0){
                    cell.setCellValue(vOpbMonthResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbMonthResult.getObTotleNumber());
                   }
                  }else if("3".equals(type)){
                   vOpbWeekResult=(VOpbWeekResult) list.get(i);
                      
                   if(j==0){
                    cell.setCellValue(vOpbWeekResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbWeekResult.getObTotleNumber());
                   }
                  }else if("4".equals(type)){
                   vOpbDateResult=(VOpbDateResult) list.get(i);
                      
                   if(j==0){
                    cell.setCellValue(vOpbDateResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbDateResult.getObTotleNumber());
                   }
                  }
      
          }


      }
      //输出   
      response.setHeader("Content-disposition",  "attachment;  filename=test.xls");//设定输出文件头
      response.setContentType("application/vnd.ms-excel");//定义输出类型
      OutputStream os = response.getOutputStream();
      
     
      wb.write(os); 
      os.close();
     
//      response.flushBuffer();
      //response.reset();
      
//      response.resetBuffer();
    //  response.getWriter().close();
  }   
  /**  
   * 边框  
   * @param wb  
   * @return  
   */  
  public static CellStyle createStyleCell(Workbook wb){   
      CellStyle cellStyle = wb.createCellStyle();   
      //设置一个单元格边框颜色 
      //BORDER_SLANTED_DASH_DOT加粗虚线 
      //BORDER_DASH_DOT虚线 
      cellStyle.setBorderBottom(CellStyle.BORDER_DASH_DOT_DOT);   
      cellStyle.setBorderTop(CellStyle.BORDER_DASH_DOT_DOT);   
      cellStyle.setBorderLeft(CellStyle.BORDER_DASH_DOT_DOT);   
      cellStyle.setBorderRight(CellStyle.BORDER_DASH_DOT_DOT);   
      //设置一个单元格边框颜色   
      cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());   
      cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());   
      cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());   
      cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());           
      return cellStyle;   
  }   
  /**  
   * 设置文字在单元格里面的位置  
   * CellStyle.ALIGN_CENTER  
   * CellStyle.VERTICAL_CENTER  
     * @param cellStyle  
     * @param halign  
     * @param valign  
     * @return  
     */  
    public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){   
        //设置上下   
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);   
        //设置左右   
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);   
        return cellStyle;   
    }   
    /**  
     * 格式化单元格  
     * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找  
     * @param cellStyle  
     * @param fmt  
     * @return  
     */  
    public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){   
        //还可以用其它方法创建format   
        cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));   
        return cellStyle;   
    }   
    /**  
     * 前景和背景填充的着色  
     * @param cellStyle  
     * @param bg IndexedColors.ORANGE.getIndex();  
     * @param fg IndexedColors.ORANGE.getIndex();  
     * @param fp CellStyle.SOLID_FOREGROUND  
     * @return  
     */  
    public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){   
        //cellStyle.setFillBackgroundColor(bg);   
        cellStyle.setFillForegroundColor(fg);   
        cellStyle.setFillPattern(fp);   
        return cellStyle;   
    }   
    /**  
     * 设置字体  
     * @param wb  
     * @return  
     */  
    public static Font createFonts(Workbook wb){   
        //创建Font对象   
        Font font = wb.createFont();   
        //设置字体   
        font.setFontName("黑体");   
        //着色   
        font.setColor(HSSFColor.BLUE.index);   
        //斜体   
        font.setItalic(true);   
        //字体大小   
        font.setFontHeight((short)300);   
        return font;   
    }
    
    private static Map<String, CellStyle> createStyles(Workbook wb){
        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
        CellStyle style;
        Font titleFont = wb.createFont();
        titleFont.setFontHeightInPoints((short)18);
        titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setFont(titleFont);
        styles.put("title", style);

        Font monthFont = wb.createFont();
        monthFont.setFontHeightInPoints((short)11);
        monthFont.setColor(IndexedColors.WHITE.getIndex());
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setFont(monthFont);
        style.setWrapText(true);
        styles.put("header", style);

        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setWrapText(true);
        style.setBorderRight(CellStyle.BORDER_THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        styles.put("cell", style);

        return styles;
    }
}  

 

需要的jar包:easypoi-0.1.3.jar           poi-3.7-20101029

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值