zoukankan      html  css  js  c++  java
  • java生成简单Excel工作薄

    前言:

      代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院、图片URL、等信息制作为excel表格,把每次同步过来的数据给他分析。

    jxl:全称JavaExcelAPI,是一个用来读写修改EXCEL的JAVA开源类库,使用起来相对简单。

      jar包下载地址: http://www.andykhan.com/jexcelapi/download.html 


     下面是刚写完的一个简单不能再简单的Demo了,没有任何附加样式,下班了,样式这周末再慢慢调吧

    Demo代码:

    package com.java.jexcel;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.Calendar;
    import java.util.Date;
    import jxl.Workbook;
    import jxl.write.DateFormats;
    import jxl.write.DateTime;
    import jxl.write.Label;
    import jxl.write.Number;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    
    /**
     * @author liuyt
     * @date   2014-11-20 下午5:04:48
     * bolgs   http://www.cnblogs.com/liuyitian/
     */
    public class SimpleExcelDemo {
        /**
         * java生成Excel工作薄文件至本地目录
         * @param fileName 文件名
         * @return
         * @throws Exception
         */
        public static String exportExcel(String fileName) throws Exception {
            
            // 首先创建一个用于保存excel表格的文件
            File file = new File("D:\data\" + fileName +".xls");
            
            // 创建一个文件输出流,用于写出表格到本地文件夹
            OutputStream out = new FileOutputStream(file);
            
            // 创建一个可读写入的工作薄(相当于创建了一个excel表格。抽象类,不能用new来创建)
            WritableWorkbook workbook = Workbook.createWorkbook(out); 
            
            // 创建一个新页(一个excel文件可以包含多页哦。参数一:本页名称;参数二:页数,第一页为0)
            WritableSheet sheet =  workbook.createSheet("简单excel制作", 0);
            
            /**
             *  创建一个标签,相当于单元格,用于填充到本页中
             *  (参数一:列坐标,0开始; 参数二:行坐标,0开始; 参数三:单元格内容;参数四:可选,一个格式工具-之后介绍)
             *  所以行坐标为0的时候,可以理解为表头哦。
             */
            Label cell = new Label(0, 0, "姓名"); // 1行1列
            
            // 添加单元格至本页中(目前表格最左上角应该有一个“步骤一”的单元格)
            sheet.addCell(cell);
            
            // 一鼓作气先把表头制作出来
            cell = new Label(1, 0, "年龄");  // 1行2列
            sheet.addCell(cell);
            cell = new Label(2, 0, "生日"); // 1行3列
            sheet.addCell(cell);
            cell = new Label(3, 0, "博客地址"); // 1行4列
            sheet.addCell(cell);
            
            /**
             * 接下来填充内容,记住表头的设置哦,别对混淆了。
             * cell并非只有Lable一种类型,还有其他三种分别为:Number,Boolean,DateTime。  分别对应了字符串,数字,布尔和时间格式
             * 设计这么多类型多余吗?NO,你在写入的时候无所谓,但当你读取一个excel到程序中,没有这些类型帮助你判断,..各种转换异常..
             */
            cell = new Label(0, 1, "刘一天"); // 2行1列
            sheet.addCell(cell);
            
            Number age = new Number(1, 1, 23); // 2行2列  (年龄:Number类型)
            sheet.addCell(age);
            
            /** 
             * 对于日期格式,你可以直接写入一个java.util.Date类型的时间,但格式可能不是你想要的
             * jxl自己有单元格格式化类:WritableCellFormat,它可以设置单元格背景颜色、文字换行、边框和样式等
             * 也可以传入一个DisplayFormat(显示形式)来构造一个格式工具类
             */
            WritableCellFormat  wf = new WritableCellFormat(DateFormats.FORMAT1);
            Calendar c = Calendar.getInstance();
            c.set(1991, 5, 16);
            Date d = c.getTime();
            DateTime birthday = new DateTime(2, 1, d, wf); // 2行3列  (生日:DateTime类型)
            sheet.addCell(birthday);
            
            cell = new Label(3, 1, "http://www.cnblogs.com/liuyitian/"); // 2行4列  
            sheet.addCell(cell);
            
            workbook.write(); // 写入Excel工作表
            workbook.close(); // 关闭Excel工作表,同时也会关闭IO流,勿忘。
            return "写入完成,就是这么简单,自己亲自试一下吧?";
        }
        
        /** 简单test **/
        public static void main(String[] args) {
            try {
                System.out.println(SimpleExcelDemo.exportExcel("简单excel制作"));
            } catch (Exception e) {
                System.out.println("写入失败"+e.getMessage());
            }
        }
    }

    效果图:


      下班了,赶紧撤。

      ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4111451.html

                              写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐


                                             每天多学一点点     代码少敲一点点

  • 相关阅读:
    Django Form组件的扩展
    Python TCP与UDP的区别
    Python三次握手和四次挥手
    网络基础之网络协议
    Python 类方法、实例方法、静态方法的使用与及实例
    python深浅拷贝
    2021牛客寒假算法基础集训营1 题解
    01 Trie 专题
    MOTS:多目标跟踪和分割论文翻译
    牛客巅峰赛S2第6场题解
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4111451.html
Copyright © 2011-2022 走看看