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

来源:互联网 发布:苹果电脑软件下载 编辑:程序博客网 时间:2024/05/16 16:59
//所需的类
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);
        }

        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);
    }
}
阅读全文
0 0