JXL以下载方式导出excel(JSP调用方式)

时间:2022-12-17 22:14:17
-----------------------collectCorrectExp.jsp-------------------------------------------

<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@page import="java.io.OutputStream"%>
<%@page import="com.datacollect.DataCollectCorrectExp"%>
<%
 OutputStream os = response.getOutputStream(); // 取得输出流
 response.reset();// 清空输出流

 //不能用用中文设置 filename,会出错
    response.setHeader("Content-disposition", "attachment; filename=student.xls");// 设定输出文件头
 response.setContentType("application/msexcel");// 定义输出类型
 
 DataCollectCorrectExp dccExp = new DataCollectCorrectExp();
 dccExp.createXls(os);
%>

 

 -----------------------collectCorrectExp.jsp-------------------------------------------

 

package com.datacollect;

import java.io.FileOutputStream;     
import java.io.IOException;
import java.io.OutputStream;     
import java.text.SimpleDateFormat;     
import java.util.ArrayList;     
import java.util.Date;     
import java.util.List;  

import jxl.*;     
import jxl.format.Alignment;     
import jxl.format.Border;     
import jxl.format.BorderLineStyle;     
import jxl.format.CellFormat;     
import jxl.write.Boolean;     
import jxl.write.Label;     
import jxl.write.Number;     
import jxl.write.WritableCellFormat;     
import jxl.write.WritableFont;     
import jxl.write.WritableSheet;     
import jxl.write.WritableWorkbook;     

/**
 * 汇总数据抵消模版导出
 * @author yangning
 *
 */
public class DataCollectCorrectExp {

 public void createXls(OutputStream os) {
     // 准备设置excel工作表的标题     
     String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};
    try {     
        // 获得开始时间     
        long start = System.currentTimeMillis();     
        // 输出的excel的路径     
//             String filePath = "c:/test.xls";     
        // 创建Excel工作薄     
         WritableWorkbook wwb;     
        // 新建立一个jxl文件,即在C盘下生成test.xls     
//           OutputStream os = new FileOutputStream(filePath);     
         wwb=Workbook.createWorkbook(os);     
        // 添加第一个工作表并设置第一个Sheet的名字     
         WritableSheet sheet = wwb.createSheet("产品清单", 0);     
         Label label;     
        for(int i=0;i<title.length;i++){     
            // Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y     
            // 在Label对象的子对象中指明单元格的位置和内容     
             label = new Label(i,0,title[i]);
            
            // 将定义好的单元格添加到工作表中     
             sheet.addCell(label);     
         }     
        // 下面是填充数据     
        /* 
          * 保存数字到单元格,需要使用jxl.write.Number 
          * 必须使用其完整路径,否则会出现错误 
          * */    
        // 填充产品编号     
        jxl.write.Number number = new jxl.write.Number(0,1,20071001);     
         sheet.addCell(number);     
        // 填充产品名称     
         label = new Label(1,1,"金鸽瓜子");     
         sheet.addCell(label);     
        /* 
          * 定义对于显示金额的公共格式 
          * jxl会自动实现四舍五入 
          * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45 
          * */    
        jxl.write.NumberFormat nf = new jxl.write.NumberFormat(" .  ");     
        jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);     
        // 填充产品价格     
        jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);     
         sheet.addCell(nb);     
        // 填充产品数量     
        jxl.write.Number numb = new jxl.write.Number(3,1,200);     
         sheet.addCell(numb);     
        /* 
          * 定义显示日期的公共格式 
          * 如:yyyy-MM-dd hh:mm 
          * */    
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
         String newdate = sdf.format(new Date());     
        // 填充出产日期     
         label = new Label(4,1,newdate);     
         sheet.addCell(label);     
        // 填充产地     
         label = new Label(5,1,"陕西西安");     
         sheet.addCell(label);     
        /* 
          * 显示布尔值 
          * */    
        jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);     
         sheet.addCell(bool);     
        /* 
          * 合并单元格 
          * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的 
          * 表示将从第x+1列,y+1行到m+1列,n+1行合并 
          * 
          * */    
         sheet.mergeCells(0,3,2,3);     
         label = new Label(0,3,"合并了三个单元格");     
         sheet.addCell(label);     
        /* 
          * 
          * 定义公共字体格式 
          * 通过获取一个字体的样式来作为模板 
          * 首先通过web.getSheet(0)获得第一个sheet 
          * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体 
          * */    
         CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();     
         WritableCellFormat wc = new WritableCellFormat();     
        // 设置居中     
         wc.setAlignment(Alignment.CENTRE);     
        // 设置边框线     
         wc.setBorder(Border.ALL, BorderLineStyle.THIN);     
        // 设置单元格的背景颜色     
         wc.setBackground(jxl.format.Colour.RED);     
         label = new Label(1,5,"字体",wc);     
         sheet.addCell(label);     

        // 设置字体     
        jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);     
         WritableCellFormat font = new WritableCellFormat(wfont);     
         label = new Label(2,6,"隶书",font);     
         sheet.addCell(label);     
             
        // 写入数据     
         wwb.write();     
        // 关闭文件     
         wwb.close();     
        long end = System.currentTimeMillis();     
         System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);     
     } catch (Exception e) {     
         System.out.println("---出现异常---");     
         e.printStackTrace();     
     }   
 }
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

 

========================================================================