EOS导出EXCEL

//通用导出jsp页面

<%@page import="com.tenglong.bidmanage.BidSituation"%>
<%@ page contentType="text/html;charset=utf-8" %>

<%
    BidSituation.exportBidSituation(request, response);
    out.clear();
    out = pageContext.pushBody();
%>


//导出按钮jsp页面

<a class="nui-button" onclick="exportInfo()">导出</a>
        <script type="text/javascript">
              function exportInfo(){
              
              var batchcode= nui.get("batchcode").getValue();
              var tendercode= nui.get("tendercode").getValue();
              var tendername= nui.get("tendername").getValue();
              var packagenum= nui.get("packagenum").getValue();
              var suppliername= nui.get("suppliername").getValue();
              var dbsuppliername= nui.get("dbsuppliernamess").getValue();
              var ecpsuppliername= nui.get("ecpsuppliernames").getValue();
                       window.open("<%=request.getContextPath()%>/bidmanage/BidSituation/BidSituationExport.jsp?batchcode="
                       +batchcode+"&tendercode="+tendercode+"&tendername="+tendername+"&packagenum="+packagenum+"&suppliername="
                       +suppliername+"&dbsuppliername="+dbsuppliername+"&ecpsuppliername="+ecpsuppliername,'newwindow');
                }
        </script>

//java代码

package com.tenglong.bidmanage;

import java.awt.Color;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

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

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;

import com.eos.foundation.database.DatabaseUtil;
import com.eos.system.annotation.Bizlet;

import commonj.sdo.DataObject;
import commonj.sdo.helper.DataFactory;

public class BidSituation {
    static com.eos.system.logging.Logger log = com.eos.runtime.core.TraceLoggerFactory.getLogger(BidSituation.class);
    
    /**
     * 创建字体
     *
     * @param workbook
     * @param size
     *            字体大小
     * @return
     */
    public static XSSFFont createFont(XSSFWorkbook workbook, short size) {
        XSSFFont font = workbook.createFont();
        // 字体样式
        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
        // 字体颜色
        font.setColor(XSSFFont.COLOR_NORMAL);
        // 字体大小
        if (0 == size) {
            font.setFontHeightInPoints(XSSFFont.DEFAULT_FONT_SIZE);
        } else {
            font.setFontHeightInPoints(size);
        }
        font.setFontName("宋体");
        return font;
    }
    
    /**
     * 创建CellStyle
     *
     * @param workbook
     * @param XSSFColor
     *            color 颜色
     */
    public static XSSFCellStyle createStyle(XSSFWorkbook workbook, XSSFColor color,XSSFFont font) {

        XSSFCellStyle cellStyle = workbook.createCellStyle();
        // 对齐样式
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置颜色
        //cellStyle.setFillForegroundColor(color);
        //cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        cellStyle.setBorderTop(BorderStyle.MEDIUM);
        cellStyle.setBorderBottom(BorderStyle.MEDIUM);
        cellStyle.setBorderLeft(BorderStyle.MEDIUM);
        cellStyle.setBorderRight(BorderStyle.MEDIUM);
        // 设置边框颜色
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.TOP, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.LEFT, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, new XSSFColor(Color.BLACK));
        cellStyle.setBorderTop((short) 1);
        cellStyle.setBorderBottom((short) 1);
        cellStyle.setBorderLeft((short) 1);
        cellStyle.setBorderRight((short) 1);
        // 设置字体
//        cellStyle.setFont(font);
        // 设置自动换行
        cellStyle.setWrapText(true);
        return cellStyle;
    }
    public static XSSFCellStyle createStyles(XSSFWorkbook workbook, XSSFColor color,XSSFFont font) {

        XSSFCellStyle cellStyle = workbook.createCellStyle();
        // 对齐样式
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置颜色
        //cellStyle.setFillForegroundColor(color);
        //cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        cellStyle.setBorderTop(BorderStyle.MEDIUM);
        cellStyle.setBorderBottom(BorderStyle.MEDIUM);
        cellStyle.setBorderLeft(BorderStyle.MEDIUM);
        cellStyle.setBorderRight(BorderStyle.MEDIUM);
        // 设置边框颜色
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.TOP, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.LEFT, new XSSFColor(Color.BLACK));
        cellStyle.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, new XSSFColor(Color.BLACK));
        // 设置字体
        cellStyle.setFont(font);
        // 设置自动换行
        cellStyle.setWrapText(true);
        return cellStyle;
    }
    
    /**
     * 写详细数据
     * @param sheet
     * @param list0  初评数据    
     * @param rownum 数据从第几行开始写(首行为0)
     * @param style
     * @return
     * @author chenqf
     * @date  2016年8月15日 上午11:38:39
     */
    public static XSSFSheet writeData(XSSFSheet sheet,Object[] list,int rownum,XSSFCellStyle style){
        style.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255)));
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        
        Row row = sheet.createRow(rownum+1);//创建数据行
        //Cell cell0 =  row.createCell(0);            
        //初评数据
        if(list.length>0){
            for(int i=0;i<list.length;i++){
                Cell cell =  row.createCell(i);
                cell.setCellStyle(style);                            
                cell.setCellValue(list[i]==null?"":list[i].toString());
                setCellWidth(cell);
            }
        }
        return sheet;
    }
    
    /**
     * 得到i和j对应的要合并的ii和jj
     * @param allCell
     * @param i
     * @param j
     * @param mergeTagetIj
     */
    public static void getMergeTaget(Cell[][] allCell, int i, int j, int[] mergeTagetIj) {
        int jj = j+1;
        int ii = i+1;
        for (; jj < allCell[i].length; jj++) {
            if(allCell[i][j]!=null&&allCell[i][jj]!=null){
                if(!allCell[i][j].getStringCellValue().equals(allCell[i][jj].getStringCellValue())){
                    break;
                }else{
                    allCell[i][jj]=null;
                    mergeTagetIj[0]=i;
                    mergeTagetIj[1]=jj;
                }
            }else{
                break;
            }
        }
        for (; ii < allCell.length; ii++) {
            if(allCell[i][j]!=null&&allCell[ii][j]!=null){
                if(!allCell[i][j].getStringCellValue().equals(allCell[ii][j].getStringCellValue())){
                    break;
                }else{
                    if((jj-1)<allCell[i].length&&allCell[ii][jj-1]!=null&&allCell[i][j].getStringCellValue().equals(allCell[ii][jj-1].getStringCellValue())){
                        allCell[ii][j]=null;
                        mergeTagetIj[0]=ii;
                        mergeTagetIj[1]=jj-1;
                    }
                }
            }
        }
        allCell[i][j]=null;
    }
    
    /**
     * 功能:合并单元格
     *
     * @param sheet
     *            XSSFSheet
     * @param firstRow
     *            int
     * @param lastRow
     *            int
     * @param firstColumn
     *            int
     * @param lastColumn
     *            int
     * @return int 合并区域号码
     */
    public static int mergeCell(XSSFSheet sheet, int firstRow, int lastRow, int firstColumn, int lastColumn) {
        return sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstColumn, lastColumn));
    }
    
    /**
     * 设置单元格宽度
     * @param cell
     * @author chenqf
     * @date  2016年9月23日 下午4:28:39
     */
    public static void setCellWidth(Cell cell){
        Sheet sheet = cell.getRow().getSheet();
        int cellNum = cell.getColumnIndex();
        sheet.autoSizeColumn(cellNum);
        if(sheet.getColumnWidth(cellNum)<20*256){
            sheet.setColumnWidth(cellNum, 20*256);
        }else if(sheet.getColumnWidth(cellNum)>60*256&&sheet.getColumnWidth(cellNum)<120*256){
            sheet.setColumnWidth(cellNum, sheet.getColumnWidth(cellNum)/2+2*256);
        }else if(sheet.getColumnWidth(cellNum)>120*256&&sheet.getColumnWidth(cellNum)<180*256){
            sheet.setColumnWidth(cellNum, sheet.getColumnWidth(cellNum)/3+3*256);
        }else if(sheet.getColumnWidth(cellNum)>180*256){
            sheet.setColumnWidth(cellNum, sheet.getColumnWidth(cellNum)/4+4*256);
        }
    }
    /***
     * 结果导出
     * @param request
     * @param response
     * @throws UnsupportedEncodingException
     */
    public static void exportBidSituation(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        String batchcode = request.getParameter("batchcode") == null ? "" : request.getParameter("batchcode").toString();
        String tendercode = request.getParameter("tendercode") == null ? "" : request.getParameter("tendercode").toString();
        String tendername = request.getParameter("tendername") == null ? "" : request.getParameter("tendername").toString();
        String packagenum = request.getParameter("packagenum") == null ? "" : request.getParameter("packagenum").toString();
        String suppliername = request.getParameter("suppliername") == null ? "" : request.getParameter("suppliername").toString();
        String dbsuppliername = request.getParameter("dbsuppliername") == null ? "" : request.getParameter("dbsuppliername").toString();
        String ecpsuppliername = request.getParameter("ecpsuppliername") == null ? "" : request.getParameter("ecpsuppliername").toString();
        //获取管理部门
        DataObject criteriaEntity = DataFactory.INSTANCE.create("com.primeton.das.criteria", "criteriaType");
        criteriaEntity.set("_entity","com.tenglong.ztb.datasets.ztbData.BidSituation");
        criteriaEntity.set("_expr[1]/_op", "=");//
        criteriaEntity.set("_expr[1]/batchcode",batchcode );
        criteriaEntity.set("_expr[2]/_op", "=");//
        criteriaEntity.set("_expr[2]/tendercode",tendercode );
        criteriaEntity.set("_expr[3]/_op", "like");//
        criteriaEntity.set("_expr[3]/tendername",tendername );
        criteriaEntity.set("_expr[4]/_op", "=");//
        criteriaEntity.set("_expr[4]/packagenum",packagenum );
        criteriaEntity.set("_expr[5]/_op", "like");//
        criteriaEntity.set("_expr[5]/suppliername",suppliername );
        if(dbsuppliername != null && dbsuppliername != ""){
            if(dbsuppliername.equals("0")){
                criteriaEntity.set("_expr[6]/_op", "null");//
                criteriaEntity.set("_expr[6]/dbsuppliername", "");
            } else {
                criteriaEntity.set("_expr[6]/_op", "<>");//
                criteriaEntity.set("_expr[6]/dbsuppliername", "null");
            }
        }
        if(ecpsuppliername != null && ecpsuppliername != ""){
            if(ecpsuppliername.equals("0")){
                criteriaEntity.set("_expr[7]/_op", "null");
                criteriaEntity.set("_expr[7]/ecpsuppliername", "");
            } else {
                criteriaEntity.set("_expr[7]/_op", "<>");//
                criteriaEntity.set("_expr[7]/ecpsuppliername", "null");
            }
        }
        DataObject[] data = DatabaseUtil.queryEntitiesByCriteriaEntity("default", criteriaEntity);
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFFont font = createFont(workbook, (short) 0);
        XSSFColor color = new XSSFColor(new Color(28, 232, 123));
        XSSFCellStyle style = createStyle(workbook,color,font);
        XSSFCellStyle styles = createStyles(workbook,color,font);
        //设置sheet名称
        XSSFSheet sheet;
        sheet = workbook.createSheet("投标情况核对");
        sheet.setDefaultColumnWidth((short)30);
        if(data!=null && data.length>0){
            sheet = writeTitleBatch(sheet,style,styles);
            for (int i = 0; i < data.length; i++) {
                String state;
                String states;
                if(data[i].getString("dbsuppliername")!=null){
                    state = Character.toString((char)8730);
                } else {
                    state = Character.toString((char)215);
                }
                if(data[i].getString("ecpsuppliername")!=null){
                    states = Character.toString((char)8730);
                } else {
                    states = Character.toString((char)215);
                }
                    Object[] obj = new Object[]{data[i].getString("batchcode"),data[i].getString("tendercode"),
                            data[i].getString("tendername"),data[i].getString("packagenum"),data[i].getString("suppliername"),
                            state,states};
                    sheet = writeData(sheet, obj, i, style);    
                }
            
        }else{
            sheet = writeTitleBatch(sheet,style,styles);
        }
        //下载
        try {
            String fileName = new String(("投标情况核对数据.xlsx").getBytes(),"ISO-8859-1");
            response.setContentType("APPLICATION/OCTET-STREAM; charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            OutputStream oss = response.getOutputStream();
            workbook.write(oss);
            oss.flush();
            oss.close();
        } catch (IOException e) {
            log.error(e.getMessage(),e);
        }
        
        
        
    }
    //表头数据
        public static XSSFSheet writeTitleBatch(XSSFSheet sheet,XSSFCellStyle style,XSSFCellStyle styles){
                style.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255)));
                style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                String[] titleStr = {"招标批次编号","分标编号","分标名称","包号","投标人名称","电子标书上传情况","ECP投标情况"};
                int[] titleWidth = {12,12,12,12,12,12,12};
                Row row = sheet.createRow(0);//创建一个行
                row.setHeightInPoints(30);    
                //写基本信息表头
                for(int i=0;i<titleStr.length;i++){
                    Cell cell = row.createCell(i);//创建单元格            
                    cell.setCellStyle(styles);    
                    cell.setCellValue(titleStr[i]);
                    sheet.setColumnWidth(i, titleWidth[i]*256);//宽度为256分之一
                }
                return sheet;
        }
    
}

posted @ 2018-10-15 14:13  diyigejianhun  阅读(194)  评论(0编辑  收藏  举报