首先需要在web项目中导入jxl.jar 包

//action中代码

public String downloadReport(){
        String path = System.getProperty("java.io.tmpdir") + "\\xlsx"+ (new java.util.Date().getTime());

    List<User> users=new ArrayList<User>();//查询结果集
            users.add(new User(1, "屌丝1", 18, "男"));
            users.add(new User(2, "妹子2", 19, "女"));
            users.add(new User(3, "屌丝3", 20, "男"));
            users.add(new User(4, "妹子4", 21, "女"));
            users.add(new User(5, "屌丝5", 22, "男"));

     try {
         createExcel(path,List<User> users);//方法代码在下面
        //下载文件
        response().setContentType("application/x-msdownload;charset=UTF-8"); // 设置响应类型为下载
        response().setCharacterEncoding("UTF-8");//页面乱码问题
        String docName = java.net.URLEncoder.encode("report_case.xls", "UTF-8");//文件名称设置
        response().setHeader("Content-Disposition", "attachment; filename="+ new String(docName.getBytes("UTF-8"), "UTF-8"));
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(path));
        byte[] buf = new byte[1024];
        int len = 0;
        OutputStream out = response().getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);//把下载的文档写入本地电脑中去

  } catch (IOException e) {
        e.printStackTrace();
     }finally{

  out.close();
        br.close();

  }

  return null;

}

//下载调用方法
       
    /**
     * 设置表格标题和风格
     * @param path
     * @param users
     */
    public static void createExcel(String path,List<User> users){
        
        try {
            //创建工作薄
            WritableWorkbook workbook = Workbook.createWorkbook(new File(path));
            //创建工作表
            WritableSheet sheet=workbook.createSheet("测试表格", 0);
            //置页眉、页脚
            sheet.setHeader("页眉", "", "第   &P   页,共   &N   页"); // 设置页眉
            sheet.setFooter("", "", "&D   &T"); // 设置页脚
            //设置第几列的的列宽
            sheet.setColumnView(0, 20);
            sheet.setColumnView(1, 20);
            sheet.setColumnView(2, 20);
            sheet.setColumnView(3, 20);
            //指定几种单元格的字体样式
            WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
            WritableFont BoldFont12 = new WritableFont(WritableFont.ARIAL, 12,WritableFont.BOLD);//加粗12号字体
            WritableFont BoldFont20 = new WritableFont(WritableFont.ARIAL, 20,WritableFont.BOLD);//加粗18号字体
            
            //用于台头
            WritableCellFormat wcf_head=new WritableCellFormat(BoldFont20);
            wcf_head.setBorder(Border.ALL, BorderLineStyle.THIN);//线条
            wcf_head.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐
            wcf_head.setAlignment(Alignment.CENTRE);//水平对齐
            wcf_head.setWrap(false);//是否换行
            
            // 用于标题
            WritableCellFormat wcf_title = new WritableCellFormat(BoldFont12);
            wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
            wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_title.setAlignment(Alignment.CENTRE); // 水平对齐
            wcf_title.setWrap(false); // 是否换行
            
            // 用于正文
            WritableCellFormat wcf_text = new WritableCellFormat(NormalFont);
            wcf_text.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
            wcf_text.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_text.setAlignment(Alignment.CENTRE); // 水平对齐
            wcf_text.setWrap(false); // 是否换行
            
            
            // 用于跨行
            WritableCellFormat wcf_merge = new WritableCellFormat(NormalFont);
            wcf_merge.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
            wcf_merge.setVerticalAlignment(VerticalAlignment.TOP); // 垂直对齐
            wcf_merge.setAlignment(Alignment.LEFT);
            wcf_merge.setWrap(true); // 是否换行
            
            
            sheet.setRowView(0, 800);//设置行高
            sheet.setRowView(1, 500);
            sheet.addCell(new Label(0, 0, "保险信息", wcf_head));
            sheet.mergeCells(0,0,4,0);//合并第一行的第1列到第一行的第4列
            sheet.addCell(new Label(0, 1, "编号", wcf_title));
            sheet.addCell(new Label(1, 1, "姓名", wcf_title));
            sheet.addCell(new Label(2, 1, "年龄",wcf_title));
            sheet.addCell(new Label(3, 1, "性别", wcf_title));
            
            //把上面缓存中内容写到文件中去  2表示从第几行开始标题除外
            addCellFreezeOrder(2,users,sheet,wcf_text);
            
            workbook.write();
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

/**
     * 把缓存中的数据写到文件当中去
     * @param i
     * @param users
     * @param sheet
     * @param wcf_text
     */
    private static void addCellFreezeOrder(int i, List<User> users,
            WritableSheet sheet, WritableCellFormat wcf_text) {
        
        WritableFont wcf_font=(WritableFont) wcf_text.getFont();//用于正文、
        //设置文字格式类型按照文本格式输出
        WritableCellFormat wcf_numberformat=new WritableCellFormat(wcf_font,NumberFormats.TEXT);
        try {
            wcf_numberformat.setBorder(Border.ALL, BorderLineStyle.THIN);
            wcf_numberformat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_numberformat.setAlignment(Alignment.LEFT); // 水平对齐
            wcf_numberformat.setWrap(false); // 是否换行
            
            for(User s:users){
                  sheet.addCell(new Label(0,i,s.getSequen()+"",wcf_text));
                  sheet.addCell(new Label(1,i,s.getName(),wcf_text));
                  sheet.addCell(new Label(2,i,s.getAge()+"",wcf_text));
                  sheet.addCell(new Label(3,i,s.getSex(),wcf_text));
                  i++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
       
}

//实体类
class User{
    private int sequen;
    private String name;
    private int age;
    private String sex;
    public User(int sequen, String name, int age, String sex) {
        super();
        this.sequen = sequen;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public int getSequen() {
        return sequen;
    }
    public void setSequen(int sequen) {
        this.sequen = sequen;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
}

JAVA创建并写入内容到xlsx文件的更多相关文章

  1. 在C#程序中,创建、写入、读取XML文件的方法

    一.在C#程序中,创建.写入.读取XML文件的方法 1.创建和读取XML文件的方法,Values为需要写入的值 private void WriteXML(string Values) { //保存的 ...

  2. Java读取、写入、处理Excel文件中的数据(转载)

    原文链接 在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对Excel中的数据进行读取操作,本文将介绍Excel读写的常用方法,希望对大家学习Java读写Ex ...

  3. 二、点击导出按钮创建excle写入内容后下载功能实现

    /*涉及的jar包1)biframework.jar用于实现分页功能2)poi-3.7-20101029.jar:读取.创建.修改excle.word.ppt的Java APIApache POI是创 ...

  4. python从命令窗口启动脚本 创建并写入内容到文件示例

    写入到文件示例: #!/usr/bin/env python3 from math import exp, log, sqrt import re from datetime import date, ...

  5. java写入内容到本地文件 -读取文件内容

    /** 日志记录 * @author sys * @param content 要写入的类容 * @param path 目标路径 c:/log/ * @param filename 文件名 log. ...

  6. Java创建、重命名、删除文件和文件夹(转)

    Java的文件操作太基础,缺乏很多实用工具,比如对目录的操作,支持就非常的差了.如果你经常用Java操作文件或文件夹,你会觉得反复编写这些代码是令人沮丧的问题,而且要大量用到递归. 下面是的一个解决方 ...

  7. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定.其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx这里介绍的使用poi方式(XSSF ...

  8. java 注解方式 写入数据到Excel文件中

    之前有写过一点关于java实现写Excel文件的方法,但是现在看来,那种方式用起来不是太舒服,还很麻烦.所以最近又参考其他,就写了一个新版,用起来不要太爽. 代码不需要解释,惯例直接贴下来: publ ...

  9. 关于java中创建文件,并且写入内容

    以下内容完全为本人原创,如若转载,请注明出自:http://www.cnblogs.com/XiOrang/ 前两天在项目中因为要通过http请求获取一个比较大的json数据(300KB左右)并且保存 ...

随机推荐

  1. objective-c常用方法列表(总结)

    第1章 Objective-C学习环境准备 1.1 Objective-C基础 1.1.1 Objective-C的发展历程 1.1.2 Objective-C语言的特点 1.1.3 技术架构 1.2 ...

  2. Java学习笔记(七)——对象

    一.类与对象 1.类的定义 类就是模型,确定对象将会拥有的特征(属性)和行为(方法). 2.类的特点 (1)类是对象的类型 (2)具有相同属性和方法的一组对象的集合. 3.对象的属性: 对象具有的各种 ...

  3. android之SharedPreferes

    Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

  4. pig的各种运行模式与运行方式详解

    一.pig的运行模式: Pig 有两种运行模式: Local 模式和 MapReduce 模式.当 Pig 在 Local 模式运行的时候, Pig 将只访问本地一台主机:当 Pig 在 MapRed ...

  5. 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中

    问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:  问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...

  6. mac OS X操作 -- 常用

    显示/隐藏默认隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true/false 重置ROOT密码: http://www. ...

  7. sqlmap使用手册

    转自:http://hi.baidu.com/xkill001/item/e6c8cd2f6e5b0a91b7326386 SQLMAP 注射工具用法 1 . 介绍1.1 要求 1.2 网应用情节 1 ...

  8. BZOJ3740 : pku2842 N-dimension Matching N维匹配

    做$n$次递推求出$n$维Hash值即可,时间复杂度$O(nk)$. #include<cstdio> #define N 500010 int n,i,j,t,delta,ca,cb,a ...

  9. win7 删除Windows服务的方法

    http://www.jb51.net/os/windows/25090.html 一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和W ...

  10. 对只转发结果集的无效操作 first

    今天只用jdbc连接Oracle查询结果时,出现了一个: 对只转发结果集的无效操作 first 的错误java.sql.sqlexception. 出现这个结果的原因是:使用 Statement st ...