您的位置:首页 > 编程语言 > Java开发

java使用poi实现导出复杂excel之后弹出保存提示框

2017-11-30 08:59 786 查看
//所需的类

import org.apache.poi.hssf.usermodel.HSSFWorkbook

import org.apache.poi.hssf.usermodel.HSSFCellStyle

import org.apache.poi.hssf.usermodel.HSSFFont

import org.apache.poi.hssf.usermodel.HSSFSheet

import org.apache.poi.hssf.usermodel.HSSFCell

import org.apache.poi.hssf.usermodel.HSSFRow

import org.apache.poi.hssf.util.Region

import java.text.DecimalFormat

import java.io.OutputStream

public class XLSReader {
     //主方法

     public static void main(String[] args)throws Exception {  

        HSSFWorkbook  book = new HSSFWorkbook();

        String str="728,731,745";

        String[] str1=str.split(",");

        for(int i=0;i<str1.length;i++){

        //样式设置        

        HSSFCellStyle cellStyle = book.createCellStyle();

        HSSFCellStyle cellTopStyle = book.createCellStyle();

        HSSFFont font = book.createFont();

        font.setFontName("方正仿宋简体");

        font.setFontHeight((short) 280);

        font.setFontHeightInPoints((short) 11);

        cellStyle.setFont(font);

        cellStyle.setWrapText(true);

        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);

        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);

        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);

        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);

        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//指定单元格垂直居中对齐

        //调用方法

        exportExcel(str1[i],book,cellTopStyle,cellStyle,i);//传入的参数

                            }

        //弹出下载框

        String fileName = new String("订单导出".getBytes(),"iso-8859-1");

        response.setCharacterEncoding("gbk");

        response.reset();

        response.setContentType("application/OCTET-STREAM;charset=gbk");

        response.setHeader("pragma", "no-cache");

        response.addHeader("Content-Disposition","attachment;filename=" + fileName+ ".xls");

        OutputStream os = response.getOutputStream();

        book.write(os);

        os.flush();

    }  

     //导出方法

    public void exportExcel(String id,HSSFWorkbook book,HSSFCellStyle cellTopStyle,HSSFCellStyle cellStyle,int a) throws Exception {

    weaver.conn.RecordSet rs=new weaver.conn.RecordSet();

    String detailsSql="select (select f.MATERIALSNUMBER from WW_MT_MATERIALS f where f.id=a.MATERIALSCODE)as MATERIALSCODE ,a.MATERIALSNAME,a.MATERIALSSTANDARD,a.MATERIALSUNIT,a.MATERIALSNUMBER,a.PRICE,a.TOTAL,a.CHECKSTANDARD,a.WARRANTYPERIOD,a.WARRANTYRATE
from WW_MT_ORDER_DT1 a where a.mainid="+id;

        String sql="select a.CONTRACTORDERTIME,a.APPLYCODE,a.ORDERCODE,a.ORDERDATE,a.DATEARRIVED,a.RECEIVER,a.TELEPHONE,a.DELIVERADDRESS,a.remark,a.status,b.SUPPLIERFULLNAME,b.CONTACTMAN,b.CONTACTTEL,b.CONTACTMOBILE,c.subcompanyname||'-'||d.departmentname deptname
from WW_MT_ORDER a "+

        "left join  WW_MT_SUPPLIER b on a.SUPPLIERID=b.id  left join hrmsubcompany c on a.APPLYSUBC=c.id left join hrmdepartment d on a.APPLYDEPT=d.id where a.id="+id;

    rs.executeSql(sql);

    rs.next();

    String pfcode = Util.null2String(rs.getString("APPLYCODE"));  //批复号

    String order_code = Util.null2String(rs.getString("ORDERCODE"));  //订单号

    String order_date = Util.null2String(rs.getString("ORDERDATE"));  //订单生成时间

    String date_arrived = Util.null2String(rs.getString("DATEARRIVED")); //到货时间

    String supplier_name = Util.null2String(rs.getString("SUPPLIERFULLNAME")); //供应商名称

    String contactman = Util.null2String(rs.getString("CONTACTMAN"));  //供应商联系人

    String contacttel = Util.null2String(rs.getString("CONTACTTEL"));  //供应商联系人电话

    String contactmobile = Util.null2String(rs.getString("CONTACTMOBILE"));  //供应商联系人手机

    String deptname = Util.null2String(rs.getString("deptname"));  //采购部门

    String receiver = Util.null2String(rs.getString("RECEIVER"));   //收货人

    String telephone = Util.null2String(rs.getString("TELEPHONE")); //收货人电话

    String deliver_address = Util.null2String(rs.getString("DELIVERADDRESS"));  //收货地址

    String remark= Util.null2String(rs.getString("remark")); //备注

    String deptid= Util.null2String(rs.getString("APPLYDEPT"));//采购部门

    String state =rs.getString("status"); //状态

    String CONTRACTORDERTIME =rs.getString("CONTRACTORDERTIME");

        HSSFSheet sheet = book.createSheet("导出数据"+id);

        book.setSheetName(0+a, "导出数据"+id, (short) 1);//注意设置页签的时候下表从0开始

        //sheet.setDefaultColumnWidth((short) 10);

        //设置列宽

        sheet.setColumnWidth((short)0, (short)1000);

        sheet.setColumnWidth((short)1, (short)2600);

        sheet.setColumnWidth((short)2, (short)3000);

        sheet.setColumnWidth((short)3, (short)2600);

        sheet.setColumnWidth((short)4, (short)3300);

        sheet.setColumnWidth((short)5, (short)1600);

        sheet.setColumnWidth((short)6, (short)2300);

        sheet.setColumnWidth((short)7, (short)2700);

        sheet.setColumnWidth((short)8, (short)2700);

        sheet.setColumnWidth((short)9, (short)2700);

        sheet.setColumnWidth((short)10, (short)2000);

        sheet.setColumnWidth((short)11, (short)2000);

        int row = 5;//下标从5行开始

        int cellsize = 11;//最大列

        HSSFCell headerTopCell = null;

        HSSFCell headerCell = null;

        HSSFCell headerCellTwo = null;

        HSSFCell headerCellThree = null;

        HSSFCell headerCellData = null;

        HSSFCell headerCellSix = null;

        

        HSSFRow headerTop = sheet.createRow((short) 0);

        HSSFRow headerRow = sheet.createRow((short) 1);

        HSSFRow headerRowTwo = sheet.createRow((short) 2);

        HSSFRow headerRowThree = sheet.createRow((short) 3);

        HSSFRow headerRowSix = sheet.createRow((short) 4);

        HSSFRow headerDataRow = null;

        for (int i = 0; i <= cellsize; i++) {

            headerTopCell = headerTop.createCell((short) i);

            headerTopCell.setCellStyle(cellTopStyle);

            headerTopCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCell = headerRow.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCellTwo = headerRowTwo.createCell((short) i);

            headerCellTwo.setCellStyle(cellStyle);

            headerCellTwo.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCellThree = headerRowThree.createCell((short) i);

            headerCellThree.setCellStyle(cellStyle);

            headerCellThree.setEncoding(HSSFCell.ENCODING_UTF_16);

            

            headerCellSix = headerRowSix.createCell((short) i);

            headerCellSix.setCellStyle(cellStyle);

            headerCellSix.setEncoding(HSSFCell.ENCODING_UTF_16);

        }<
4000
br />

        sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) cellsize));//合并第一行标题所有列

        //new Region 起始行,起始列,结束行,结束列

        //合并单元格

        sheet.addMergedRegion(new Region(1, (short) 7, 1, (short) 8));//批复号内容

        sheet.addMergedRegion(new Region(1, (short) 10, 1, (short) 11));//订单号内容

        

        sheet.addMergedRegion(new Region(2, (short) 0, 2, (short) 1));//订单时间

        sheet.addMergedRegion(new Region(2, (short) 2, 2, (short) 5));//订单时间 内容

        sheet.addMergedRegion(new Region(2, (short) 6, 2, (short) 7));//到货时间

        sheet.addMergedRegion(new Region(2, (short) 8, 2, (short) cellsize));//到货时间 内容

        

        sheet.addMergedRegion(new Region(3, (short) 0, 3, (short) 1));//合并供应商名称

        sheet.addMergedRegion(new Region(3, (short) 2, 3, (short) 5));//合并供应商名称 内容

        sheet.addMergedRegion(new Region(3, (short) 7, 3, (short) 8));//合并联系人内容

        sheet.addMergedRegion(new Region(3, (short) 10, 3, (short) 11));//合并联系电话内容 占2列

        

        //第一行标题

        headerTop.getCell((short) 0).setCellValue("物资采购订单");

        //第二行标题

        headerRow.getCell((short) 6).setCellValue("采购申请单:");

        headerRow.getCell((short) 7).setCellValue(pfcode);

        headerRow.getCell((short) 9).setCellValue("订单号:");

        headerRow.getCell((short) 10).setCellValue(order_code);

        //第三行标题

        headerRowTwo.getCell((short) 0).setCellValue("订单时间:");

        headerRowTwo.getCell((short) 2).setCellValue(order_date);

        headerRowTwo.getCell((short) 6).setCellValue("到货时间:");

        headerRowTwo.getCell((short) 8).setCellValue(date_arrived);

        //第四行标题

        headerRowThree.getCell((short) 0).setCellValue("供应商名称:");

        headerRowThree.getCell((short) 2).setCellValue(supplier_name);

        headerRowThree.getCell((short) 6).setCellValue("联系人:");

        headerRowThree.getCell((short) 7).setCellValue(contactman);

        headerRowThree.getCell((short) 9).setCellValue("联系电话:");

        headerRowThree.getCell((short) 10).setCellValue(contactmobile);

        

        //第5行 //new Region 起始行,起始列,结束行,结束列

        sheet.addMergedRegion(new Region(4, (short) 0, 4, (short) 1));

        headerRowSix.getCell((short)0).setCellValue("序号");

        //headerRowSix.getCell((short)1).setCellValue("物资编码");

        //headerRowSix.getCell((short)2).setCellValue("品牌");

        sheet.addMergedRegion(new Region(4, (short) 2, 4, (short) 3));//物资名称

        headerRowSix.getCell((short)2).setCellValue("物资名称");

        headerRowSix.getCell((short)4).setCellValue("规格");

        headerRowSix.getCell((short)5).setCellValue("单位");

        headerRowSix.getCell((short)6).setCellValue("配置数量");

        headerRowSix.getCell((short)7).setCellValue("单价");

        headerRowSix.getCell((short)8).setCellValue("金额");

        //headerRowSix.getCell((short)9).setCellValue("验收标准");

        sheet.addMergedRegion(new Region(4, (short) 8, 4, (short) 9));

        headerRowSix.getCell((short)10).setCellValue("保质期(月)");

        headerRowSix.getCell((short)11).setCellValue("保质金比率(%)");

        //第8行开始显示数据

        rs.executeSql(detailsSql);

        double money = 0.00;

        double count = 0.00;

        int num = 1;

        while(rs.next()){

            sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//

            sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 3));//物资名称

            sheet.addMergedRegion(new Region(row, (short) 8, row, (short) 9));//

            headerDataRow = sheet.createRow((short) row);

            for (int i = 0; i <= cellsize; i++) {

                headerCellData = headerDataRow.createCell((short) i);

                headerCellData.setCellStyle(cellStyle);

                headerCellData.setEncoding(HSSFCell.ENCODING_UTF_16);

            }

            headerDataRow.getCell((short) 0).setCellValue(num++);//序号

            //headerDataRow.getCell((short) 1).setCellValue(Util.null2String(rs.getString("MATERIALSCODE")));//物资编码

            //headerDataRow.getCell((short) 2).setCellValue(Util.null2String(rs.getString("brandname")));//品牌

            headerDataRow.getCell((short) 2).setCellValue(Util.null2String(rs.getString("MATERIALSNAME")));//物资名称

            headerDataRow.getCell((short) 4).setCellValue(Util.null2String(rs.getString("MATERIALSSTANDARD")));//规格

            headerDataRow.getCell((short) 5).setCellValue(Util.null2String(rs.getString("MATERIALSUNIT")));//单位

            headerDataRow.getCell((short) 6).setCellValue(Util.null2String(rs.getString("MATERIALSNUMBER")));//配置数量

            headerDataRow.getCell((short) 7).setCellValue(Util.null2String(rs.getString("PRICE")));//单价

            headerDataRow.getCell((short) 8).setCellValue(Util.null2String(rs.getString("TOTAL")));//金额

            //headerDataRow.getCell((short) 9).setCellValue(Util.null2String(rs.getString("CHECKSTANDARD")));//验收标准

            headerDataRow.getCell((short) 10).setCellValue(Util.null2String(rs.getString("WARRANTYPERIOD")));//保质期(月)

            headerDataRow.getCell((short) 11).setCellValue(Util.null2String(rs.getString("WARRANTYRATE")));//保质金比率(%)

            row++;

        }

        HSSFRow headerEnd = sheet.createRow((short) row);

        for(int i=0;i<=cellsize;i++){

            HSSFCell headerCellEnd = headerEnd.createCell((short) i);

            headerCellEnd.setCellStyle(cellStyle);

            headerCellEnd.setEncoding(HSSFCell.ENCODING_UTF_16);

        }

        String datasql="select sum(d.MATERIALSNUMBER) as amount,sum(d.TOTAL) as total from WW_MT_ORDER_DT1 d where d.MAINID="+id;

        rs.execute(datasql);

        rs.next();

        sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 5));

        headerEnd.getCell((short)0).setCellValue("合计数量:");

        headerEnd.getCell((short)6).setCellValue(rs.getString("amount"));    

        headerEnd.getCell((short)7).setCellValue("合计金额:");

        sheet.addMergedRegion(new Region(row, (short) 8, row, (short) 9));

        headerEnd.getCell((short)8).setCellValue(rs.getString("total")+"元");    

        row++;

        sheet.setRowBreak(5);

        HSSFRow headerRowLastSix = sheet.createRow((short) row);

        for (int i = 0; i <= cellsize; i++) {

            headerCell = headerRowLastSix.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

        }

        sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//备注

        sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 11));//备注内容

        //备注

        headerRowLastSix.getCell((short) 0).setCellValue("备注:");

        headerRowLastSix.getCell((short) 2).setCellValue(remark);

        row++;

        

        HSSFRow headerRowLastFive = sheet.createRow((short) row);

        HSSFRow headerRowLastFour = sheet.createRow((short) row+1);

        HSSFRow headerRowLastThree = sheet.createRow((short) row+2);

        HSSFRow headerRowLastTwo = sheet.createRow((short) row+3);

        HSSFRow headerRowLastOne = sheet.createRow((short) row+4);

        for (int i = 0; i <= cellsize; i++) {

            headerCell = headerRowLastFive.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCell = headerRowLastFour.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCell = headerRowLastThree.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            headerCell = headerRowLastTwo.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

            

            

            headerCell = headerRowLastOne.createCell((short) i);

            headerCell.setCellStyle(cellStyle);

            headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);

        }                

        sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//收货单位

        sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 11));//收货单位内容

        //new Region 起始行,起始列,结束行,结束列

        //合并单元格

        sheet.addMergedRegion(new Region(row+1, (short) 0, row+1, (short) 1));//收货单位

        sheet.addMergedRegion(new Region(row+1, (short) 2, row+1, (short) 3));//收货单位

        sheet.addMergedRegion(new Region(row+1, (short) 5, row+1, (short) 6));//收货单位

        

        sheet.addMergedRegion(new Region(row+2, (short) 0, row+2, (short) 1));//收货单位

        sheet.addMergedRegion(new Region(row+2, (short) 2, row+2, (short) 6));//收货单位内容

        

        sheet.addMergedRegion(new Region(row+3, (short) 0, row+3, (short) 1));//申请单位

        sheet.addMergedRegion(new Region(row+3, (short) 2, row+3, (short) 3));//申请单位 内容

        sheet.addMergedRegion(new Region(row+3, (short) 5, row+3, (short) 6));//电话 内容

        

        sheet.addMergedRegion(new Region(row+4, (short) 0, row+4, (short) 1));//采购单位

        sheet.addMergedRegion(new Region(row+4, (short) 2, row+4, (short) 3));//采购单位 内容

        sheet.addMergedRegion(new Region(row+4, (short) 5, row+4, (short) 6));//联系方式 内容        

        //第一行标题        

        headerRowLastFive.getCell((short) 0).setCellValue("收货单位:");

        headerRowLastFive.getCell((short) 2).setCellValue(deptname);

        //第二行标题

        headerRowLastFour.getCell((short) 0).setCellValue("收货人:");

        headerRowLastFour.getCell((short) 2).setCellValue(receiver);

        headerRowLastFour.getCell((short) 4).setCellValue("电话");

        headerRowLastFour.getCell((short) 5).setCellValue(telephone);

        //第三行标题

        headerRowLastThree.getCell((short) 0).setCellValue("收货地址:");

        headerRowLastThree.getCell((short) 2).setCellValue(deliver_address);

        //第四行

        headerRowLastTwo.getCell((short) 0).setCellValue("申请单位:");

        headerRowLastTwo.getCell((short) 2).setCellValue(deptname);

        headerRowLastTwo.getCell((short) 4).setCellValue("电话");

        headerRowLastTwo.getCell((short) 5).setCellValue(telephone);

        //第五行

        headerRowLastOne.getCell((short) 0).setCellValue("采购单位:");

        headerRowLastOne.getCell((short) 2).setCellValue(deptname);

        headerRowLastOne.getCell((short) 4).setCellValue("联系方式");

        headerRowLastOne.getCell((short) 5).setCellValue(telephone);

    }
}

//类型判断

     public  String formatCell(HSSFCell cell) {  

        if (cell == null) {  

            return "";  

        }  

        switch (cell.getCellType()) {  

        case HSSFCell.CELL_TYPE_NUMERIC:  

            //日期格式的处理  

            if (HSSFDateUtil.isCellDateFormatted(cell)) {  

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

                return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();  

            }  

            return String.valueOf(cell.getNumericCellValue());  

            //字符串  

        case HSSFCell.CELL_TYPE_STRING:  

            return cell.getStringCellValue();  

            // 公式  

        case HSSFCell.CELL_TYPE_FORMULA:  

            return cell.getCellFormula();  

            // 空白  

        case HSSFCell.CELL_TYPE_BLANK:  

            return "";  

            // 布尔取值  

        case HSSFCell.CELL_TYPE_BOOLEAN:  

            return cell.getBooleanCellValue() + "";  

            //错误类型  

        case HSSFCell.CELL_TYPE_ERROR:  

            return cell.getErrorCellValue() + "";  

        }

        return "";  

    } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: