Java操作EXCEL文件
EXCEL是办公不可获取的一个常用工具,学生党不必说,平时也经常接触到EXCEL文件,虽然不会用EXCEL做复杂的各种统计,但是普通的信息汇总还是经常弄的。那么,当EXCEL文档遇到Java会如何呢?

日常开发中可能会遇到这样的需求:解析用户上传的EXCEL文件、将数据生成EXCEL文件供用户下载使用等等。所以说Java操作EXCEL文件还是有很大的现实意义的,虽然平时我们接触的网上下载的报表之类的大多数为PDF格式,但不同格式的文件的侧重点不同,应用场景也不同,各有优劣。

操作方式
常见的操作方法用三种,或者说三个工具:
(1)Apache POI ;(https://poi.apache.org/)
(2)JXL ;(http://www.quicklyjava.com/jexcel-jar-download/
  (3)  fastexcel ;(http://fastexcel.sourceforge.net/#download)
三种方式的对比网上已经有非常多的对比博文,这里不做测试。只是感慨一下Apache软件基金会的神存在,或者说整个Apache开源项目的牛X,感觉到哪都是Apache。言归正传,Apache POI不仅仅是针对EXCEL文件,而是一个针对微软文档的操作工具的大项目,提供了常见的文档如Word、Powerpoint、Visio等的支持,文档也非常齐全,打开上面的网址后可以看到详细的介绍,无论是新版还是旧版文件格式都提供了很好的支持,并且很多高级的特性如字体颜色等也有非常好的支持,官方提供的文档中有非常多的示例

后面两者则是针对EXCEL来开发的,比较轻量级,操作也很方便,fastexcel也提供了几个简单的操作实例,打开上面的网页也能看到。所以现在只是做一下JXL的简单使用测试。值得注意的是如果你不熟悉JXL,则下载JXL的时候最好连源码一起下载,一并导入IDE,否则其中一些方法的参数你在调用的时候可能无法一下子就联想到其含义,配合源码和注释使用会方便一些。


简单操作
下面以JXL为例来简单测试一下EXCEL文件的操作。且看如下示例代码:
package org.devsong;

import java.io.File;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * JXL简单测试
 * @author 12593
 */
public class JXLTest {

    /**
     * XLS文件简单创建
     * @throws Exception
     */
    public static void createFile() throws Exception {
        String[] head = { "id", "name", "gender", "email" };
        File file = new File("src/user.xls");

        file.createNewFile();
        // 创建工作簿
        WritableWorkbook workbook = Workbook.createWorkbook(file);
        // 创建sheet
        WritableSheet sheet = workbook.createSheet("sheet1", 0);

        Label label = null;
        // 组织表头字段 id name gender email
        for (int i = 0; i < head.length; i++) {
            // 参数:列, 行, 内容
            label = new Label(i, 0, head[i]);
            sheet.addCell(label);
        }

        // 组织内容写入,存入10个user
        for (int i = 1; i <= 10; i++) {
            // 每个单元格靠行列坐标来定位
            label = new Label(0, i, i + "");
            sheet.addCell(label);

            label = new Label(1, i, "user_" + i);
            sheet.addCell(label);

            label = new Label(2, i, "MALE");
            sheet.addCell(label);

            label = new Label(3, i, "xxxx@xx.com");
            sheet.addCell(label);
        }

        workbook.write();
        workbook.close();
    }

    /**
     * XLS文件简单读取
     * @throws Exception
     */
    public static void readFile() throws Exception {
        // 获取文件对象
        File file = new File("src/user.xls");
        Workbook workbook = Workbook.getWorkbook(file);

        // 获取sheet
        Sheet sheet = workbook.getSheet(0);
        for (int i = 0; i < sheet.getRows(); i++) {
            for (int j = 0; j < sheet.getColumns(); j++) {
                // 获取指定坐标的单元格
                Cell cell = sheet.getCell(j, i);
                System.out.print("      " + cell.getContents());
            }
            System.out.println();
        }
        workbook.close();
    }

    public static void main(String[] args) {
        try {
            createFile();
            readFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面只是做了简单的文件创建和读取测试,很多高级的特性如行高、列宽等并未涉及,并且工具本身提供了很多重载方法,可以根据需求使用。


结果
文档生成效果
文章正文图片

文档读取输出效果
      id      name      gender      email
      1      user_1      MALE      xxxx@xx.com
      2      user_2      MALE      xxxx@xx.com
      3      user_3      MALE      xxxx@xx.com
      4      user_4      MALE      xxxx@xx.com
      5      user_5      MALE      xxxx@xx.com
      6      user_6      MALE      xxxx@xx.com
      7      user_7      MALE      xxxx@xx.com
      8      user_8      MALE      xxxx@xx.com
      9      user_9      MALE      xxxx@xx.com
      10      user_10      MALE      xxxx@xx.com

It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门