Excel解析的几种实现方式

Java读写Excel的方法

有三种方式:

  1. POI
  2. JXL
  3. FASTEXCEL

POI

是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office 格式档案读和写的功能。
HSSF 是Horrible SpreedSheet Format的缩写,也即“讨厌的电子表格格式”。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

需要注意的是HSSF只能读写Microsoft Excel格式的档案,即2003~2007的Excel版本;要想读取2007以上版本的档案,就需要使用XSSF了。

当然POI还可以对不同的word文档进行操作,还有ppt、visio也可以读写。

API类目标类型
HSSFMicrosoft Excel格式的档案
XSSFMicrosoft Excel OOXML格式的档案
HWPFMicrosoft Word格式的档案
HSLFMicrosoft PowerPoint格式的档案
HDGFMicrosoft Visio格式的档案

JXL

Java Excel是一个开源的源码项目,可以读、写、修改Excel文件。包括常见的格式的设置:字体、颜色、背景、合并单元格等等。

POIJXL
效率高效率低
操作相对复杂操作简单
支持公式、宏、图像图表,一些企业应用上会非常实用部分支持
能够修饰单元格属性能,格式支持不如POI强大
支持字体、数字、日期操作支持字体、数字、日期操作

FastExcel

FastExcel是一个采用纯Java开发的excel文件读写组件,支持Excel97~2003文件格式。
FastExcel只能读写单元格的字符信息,而其它的属性如颜色、字体等就不支持了,因此FastExcel只需很小的内存。

读写PDF

通过iText不仅可以生成PDF或rtf文档,而且还可以将XML、Html文件转化为PDF。

下载iText.jar文件后,只需要在系统的classpath中加入iText.jar的路径,在程序中就可以使用iText类库了。

JXL的使用

写Excel文档

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

import java.io.File;

public class JXLDemo {
    public static void main(String[] args) {
        //创建Excel文件
        File file=new File("e:/excel/jxl_test.xls");
        try {
            System.out.println(file.exists());
            file.getParentFile().mkdirs();
            file.createNewFile();
            //创建工作薄
            WritableWorkbook workbook= Workbook.createWorkbook(file);
            //创建Sheet
            WritableSheet sheet=workbook.createSheet("sheet1",0);
            Label label=null;
            //第一行设置表头
            String [] title={"id","name","sex"};
            for(int i=0;i<title.length;i++){
                label=new Label(i,0,title[i]);//列,行,列值
                sheet.addCell(label);
            }
            //第二行开始追加数据
            for(int i=1;i<10;i++){
                label=new Label(0,i,"a"+i);
                sheet.addCell(label);
                label=new Label(1,i,"user"+i);
                sheet.addCell(label);
                label=new Label(2,i,"男");
                sheet.addCell(label);
            }
            //写入文件
            workbook.write();
            workbook.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行效果
在这里插入图片描述

读取Excel

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import java.io.File;

public class JXLReadDemo {
    public static void main(String[] args) {
        try {
            //创建workbook
            Workbook workbook = Workbook.getWorkbook(new File("e:/excel/jxl_test.xls"));
            //获取工作表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();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行效果

id name sex 
a1 user1 男 
a2 user2 男 
a3 user3 男 
a4 user4 男 
a5 user5 男 
a6 user6 男 
a7 user7 男 
a8 user8 男 
a9 user9 男 

POI使用

写入Excel

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.10.1</version>
</dependency>
<dependency>
   <groupId>commons-io</groupId>
   <artifactId>commons-io</artifactId>
   <version>2.2</version>
</dependency>
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class POIDemo {
    public static void main(String[] args) {
        //创建Excel工作薄
        HSSFWorkbook workbook=new HSSFWorkbook();
        //创建一个工作表sheet
        HSSFSheet sheet=workbook.createSheet();
        //创建第一行表头
        HSSFRow row=sheet.createRow(0);
        //定义表头
        String [] title={"id","name","sex"};
        HSSFCell cell=null;
        for(int i=0;i<title.length;i++){
            cell=row.createCell(i);
            cell.setCellValue(title[i]);
        }
        //追加数据
        for(int i=1;i<10;i++){
            HSSFRow nextRow=sheet.createRow(i);
            HSSFCell cell2=nextRow.createCell(0);
            cell2.setCellValue("a"+i);
            cell2=nextRow.createCell(1);
            cell2.setCellValue("user"+i);
            cell2=nextRow.createCell(2);
            cell2.setCellValue("男");
        }
        //创建文件
        File file=new File("e:/excel/poi_test.xls");
        file.getParentFile().mkdirs();
        try {
            file.createNewFile();
            //数据存盘
            FileOutputStream stream= FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行效果
在这里插入图片描述

读取Excel

import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class POIReadExcel {
    public static void main(String[] args) {
        //需要解析的Excel文件
        File file=new File("e:/excel/poi_test.xls");
        try {
            //创建Excel,读取文件内容
            HSSFWorkbook workbook=new HSSFWorkbook(FileUtils.openInputStream(file));
            //获取Sheet方式一
            HSSFSheet sheet=workbook.getSheet("Sheet0");
            //获取sheet方式二 下标
            sheet=workbook.getSheetAt(0);
            //读取第一行
            int firstRowNum=0;
            int lastRowNum=sheet.getLastRowNum();
            for(int i=0;i<=lastRowNum;i++){
                HSSFRow row=sheet.getRow(i);
                int lastCellNum=row.getLastCellNum();
                for(int j=0;j<lastCellNum;j++){
                    HSSFCell cell=row.getCell(j);
                    String value=cell.getStringCellValue();
                    System.out.print(value+" ");
                }
                System.out.println();
            }

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

    }
}

运行效果

id name sex 
a1 user1 男 
a2 user2 男 
a3 user3 男 
a4 user4 男 
a5 user5 男 
a6 user6 男 
a7 user7 男 
a8 user8 男 
a9 user9 男 

创建高版本的Excel

我们还需要导入
只需要再在创建低版本的Excel文档的代码上做下改动,将HSSF改为XSSF就可以,最后再修改下文件名的后缀为.xlsx。

public class POICreateXlsx {
    public static void main(String[] args) {
        //创建Excel工作薄
        XSSFWorkbook workbook=new XSSFWorkbook();
        //创建一个工作表sheet
        XSSFSheet sheet=workbook.createSheet();
        //创建第一行表头
        XSSFRow row=sheet.createRow(0);
        //定义表头
        String [] title={"id","name","sex"};
        XSSFCell cell=null;
        for(int i=0;i<title.length;i++){
            cell=row.createCell(i);
            cell.setCellValue(title[i]);
        }
        //追加数据
        for(int i=1;i<10;i++){
            XSSFRow nextRow=sheet.createRow(i);
            XSSFCell cell2=nextRow.createCell(0);
            cell2.setCellValue("a"+i);
            cell2=nextRow.createCell(1);
            cell2.setCellValue("user"+i);
            cell2=nextRow.createCell(2);
            cell2.setCellValue("男");
        }
        //创建文件
        File file=new File("e:/excel/poi_test.xlsx");
        file.getParentFile().mkdirs();
        try {
            file.createNewFile();
            //数据存盘
            FileOutputStream stream= FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在实际使用中,我们并不知道用户机器装的是高版本Excel,还是低版本Excel,为了兼容性,我们通常使用XSSF* 来创建Excel文档,最后写入文件时候,文件的名称起低版本的后缀“xls”,这样客户不论是2007(包括)以前还是2007以后(不包括),都可以打开文档了。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值