美文网首页java编程笔记
Java项目中表格处理的两种主要方式

Java项目中表格处理的两种主要方式

作者: 爱宝宝n | 来源:发表于2019-04-18 12:32 被阅读0次

一、JXL:

Jxl对中文支持非常好,操作简单,方法看名知意。
Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性,如支持单元格的阴影操作,以及颜色操作
小文件读取效率比较高
支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
缺点:效率低,图片支持部完善,对格式的支持不如POI强大

JXL新建表格的简单例子:

    String filePath = "C:/Users/moffice/Desktop/"+name+"经营报表.xls";
        String fileName = name+"经营报表.xls";
        System.out.println(filePath);
        //创建一个Excel文件
        WritableWorkbook book = Workbook.createWorkbook(new File(filePath));
        //创建Excel中的页面,设置页面名称,页面号由0开始,页面会按页面号从小到大的顺序在Excel中从左向右排列
        WritableSheet sheet1 = book.createSheet(name+"经营报表", 0);
        //设置要合并单元格的下标
        //作用是指定第i+1列的宽度,比如将第一列的宽度设为30
        //sheet1.setColumnView(1, 160);

        //设置单元格的样式
        WritableCellFormat cellFormat = new WritableCellFormat();
        //设置水平居中
        cellFormat.setAlignment(jxl.format.Alignment.CENTRE);
        //设置垂直居中
        cellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
        //设置自动换行
        cellFormat.setWrap(true);
        //设置显示的字体样式,字体,字号,是否粗体,字体颜色
        cellFormat.setFont(new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD,false,
                UnderlineStyle.NO_UNDERLINE));
        //设置单元格背景色
    //cellFormat.setBackground(jxl.format.Colour.BRIGHT_GREEN);

        //创建一个单元格,并按行列坐标进行指定的内容写入 ,最后加入显示的样式
        Label label = new Label(0, 0, "姓名",cellFormat);
        sheet1.addCell(label);
        Label label1 = new Label(1, 0, "年龄",cellFormat);
        sheet1.addCell(label1);
        
       
        label = new Label(0, 1, "小东",cellFormat);
        sheet1.addCell(label);
        label = new Label(1, 1, "18",cellFormat);
        sheet1.addCell(label);
        label = new Label(0, 2, "小李",cellFormat);
        sheet1.addCell(label);
        label = new Label(1, 2, "16",cellFormat);
        sheet1.addCell(label);
        //开始执行写入操作
        book.write();
        //关闭流
        book.close();

二、POI

能保持Excel里原有的宏(但不能用它写新的宏),支持公式,宏,一些企业应用上会非常实用。
不支持跨平台(主要就是Java语言)
在一些业务场景中代码相对复杂,但是API丰富,支持多种模式的读写。
支持比较新版本的excel,能够修饰单元格属性。
读写的时候比较占内存。
读写的时候比较占内存。
支持大数量大文件的读写操作。但是需要熟悉API,支持字体、数字、日期操作。
效率高,这点不错

POI新建表格的简单例子:

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet();
        HSSFRow row = null;
        HSSFCell cell = null;

        //创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle styleMain = wb.createCellStyle();
        //水平居中
        styleMain.setAlignment(HorizontalAlignment.CENTER);
        //垂直居中
        styleMain.setVerticalAlignment(VerticalAlignment.CENTER);

        String[] titles = new String[]{"姓名", "年龄"};
        row = sheet.createRow(0);
        for (int i = 0; i < titles.length; i++) {
            row.createCell(i).setCellValue(titles[i]);
        }
    row = sheet.createRow((1));
    //姓名
        HSSFCell name = row.createCell(0);
        name.setCellValue("小东");
        name.setCellStyle(styleMain);
    //年龄
    HSSFCell name = row.createCell(1);
        name.setCellValue("18");
        name.setCellStyle(styleMain);

    row = sheet.createRow((2));
    //姓名
        HSSFCell name = row.createCell(0);
        name.setCellValue("小李");
        name.setCellStyle(styleMain);
    //年龄
    HSSFCell name = row.createCell(1);
        name.setCellValue("16");
        name.setCellStyle(styleMain);

    //合并单元格 第二行和第三行的第第一列合并
    //sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 0));

        for (int i = 0; i <= titles.length; i++) {
            sheet.autoSizeColumn(i, true);
        }

        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
            byteArrayOutputStream = new ByteArrayOutputStream();
            wb.write(byteArrayOutputStream);

            String suffix = ".xls";
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + new String((fileName + suffix).getBytes(), "iso-8859-1"));

            OutputStream outputStream = response.getOutputStream();
            outputStream.write(byteArrayOutputStream.toByteArray());
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (byteArrayOutputStream != null) {
                    byteArrayOutputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                wb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

总体来说

JXL支持比较低版本的excel,比如Excel 95 ,97 ,2000,2003
由于Excel版本比较低,导致最大行有限制,无法导出65535以上量级的数据
对于内存,和时间的花费也比POI基于内存+磁盘的方式高。
对于简单的单表excel导入导出的需求,建议使用JXL。数据量稍微小点,占用内存少,速度快。
对于报表类的,涉及月份数据量,多表数据聚合在一起建议使用POI。

相关文章

  • Java项目中表格处理的两种主要方式

    一、JXL: Jxl对中文支持非常好,操作简单,方法看名知意。Jxl是纯javaAPI,在跨平台上表现的非常完美,...

  • JavaSE Day09、10 异常

    1. Java 中的异常都继承自哪个类?异常处理方式通常有两种,是哪两种? java.lang.Throwable...

  • Android 面试7——Parcelable

    Android 中对数据的序列化处理,有两种方式: 实现 Serializable 接口,这时 Java SE 中...

  • if和when条件语句

    if的用法 Kotlin中的条件语句主要有两种实现方式: if 和whenKotlin中if和Java的if区别不...

  • 第10章 异常处理

    常规B/S结构网站的异常处理主要有两种方式 根据HTTP协议码 根据异常类型 SpringBoot中关于两种方式异...

  • 2-Java中如何创建进程

    Java中如何创建进程 在Java中,可以通过两种方式来创建进程,总共涉及到5个主要的类。 第一种方式是通过Run...

  • Java & Groovy & Scala & Kotlin -

    Overview 本章主要介绍各语言中异常声明和处理方式。 Java 篇 分类 在 Java 中异常是种特殊对象,...

  • Android网络访问的基本方法

    Android访问网络的两种主要方式:1、标准Java接口(java.net) ----HttpURLConnec...

  • Runnable的使用说明

    前言 Java中实现多线程主要由以下两种方式:继承Thread类和实现Runnable接口,本文主要说明Runna...

  • Java多线程知识点

    1.java中实现多线程的几种方式 java中实现多线程的方式主要有两种,第一种是继承Thread类,第二种是实现...

网友评论

    本文标题:Java项目中表格处理的两种主要方式

    本文链接:https://www.haomeiwen.com/subject/fitowqtx.html