Java解析Excel的读写操作

读写Excel的常用技术:(语言不重要,Python也可以)

  • POI (效率高,操作复杂,支持功能多)

http://poi.apache.org/

POI提供API给Java程序对Microsoft Office格式档案读写功能.

HSSF(Horrible SpreadSheet Format)“讨厌的电子表格格式”。通过HSSF,使用纯Java代码读取、写入、修改Excel文件。

(1). HSSF 读写Microsoft Excel格式档案的功能

(2). XSSF 读写Microsoft Excel OOXML格式档案的功能

(3). HWPF 读写Microsoft Word格式档案的功能

(4). HSLF 读写Microsoft PowerPoint格式档案的功能

(5). HDGF 读写Microsoft Visio格式档案的功能

(6). iText 生成PDF/rtf的文档,可将XML、HTML转化为PDF

  • JXL(效率低,操作简单,支持功能较少)

Java Excel是开源项目,可以读取Excel文件、创建、更新文件.

  • FASTEXCEL(了解即可)

纯java开发的excel文件读写组件,支持97-2003文件格式。只读取单元格的字符信息,其他属性不支持,只需要很小的内存


前置概念:

  • 工作簿 相当于Excel文件(.xlsx、.xls等)
  • 工作表sheet:

  • 行记录Row:

  • 单元格Cell:
  •  
  • 单元列Column:

  • 行和列的作用是决定单元格cell的坐标的,所以程序操作Excel数据,也主要是通过行列确定cell的坐标,进而改变值。

POI简单实现对Excel文件的读写操作:

1.写操作:

package com.yinlei.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 PoiExcelDemo {
    public static void main(String[] args) {
        String[] titles = {"妹子编号","妹子姓名","妹子爱好"};
        //创建Excel工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作簿sheet
        HSSFSheet sheet = workbook.createSheet();
        //创建第一行
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = null;
        //插入第一行数据
        for (int i = 0; i < titles.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(titles[i]);
        }

        //追加数据
        for (int i = 1; i < 10; i++) {
            HSSFRow nextrow = sheet.createRow(i);
            //定义单元格
            HSSFCell cell2 = nextrow.createCell(0);
            cell2.setCellValue("meimei"+i);
            cell2 = nextrow.createCell(1);
            cell2.setCellValue("BeautifulGirl"+i);
            cell2 = nextrow.createCell(2);
            cell2.setCellValue("泰国人妖");
        }

        //创建一个文件
        File file = new File("F:\\poi_test.xls");
        try {
            file.createNewFile();
            FileOutputStream stream = FileUtils.openOutputStream(file);
            workbook.write(stream);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(workbook!=null){
                try {
                    workbook.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2.读操作:

package com.yinlei.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.IOException;

public class PoiReadExcel {
    public static void main(String[] args) {
        //打开excel文件
        File  file = new File("F:\\poi_test.xls");
        try {
            //创建Excel,读取文件内容
            HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));

            //读取第一个工作页sheet
//            HSSFSheet sheet = workbook.getSheet("sheet0");
            HSSFSheet sheet = workbook.getSheetAt(0);//读取第一张工作表
            int firstRowNum = 0;
            //获取sheet中最后一行行号
            int lastRowNum = sheet.getLastRowNum();
            for (int i = firstRowNum; 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();
        }

    }
}

 


JXL简单实现对Excel文件的读写操作:

1.写操作:

package com.yinlei.excel;

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

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

public class JxlExcelDemo {
    /**
     * JXL创建Excel文件
     * @param args
     */
    public static void main(String[] args) {
        String[] title = {"序号","姓名","性别"};

        //创建Excel文件
        File file = new File("F:\\jxl_test.xls");
        try {
            file.createNewFile();
            //创建工作簿
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            //创建sheet1
            WritableSheet sheet = workbook.createSheet("sheet1",0);
            //向Sheet1中添加数据
            Label label=null;//标题

            //第一行设置列名
            for(int i =0; i <title.length;i++ ){
                label  = new Label(i,0,title[i]);//参数2是row,行
                sheet.addCell(label);
            }
            //添加数据
            for (int i = 1; i < 10; i++) {//i = 1;表示第2行
                label = new Label(0,i,"a"+i);
                sheet.addCell(label);
                label = new Label(1,i,"user"+i);//i的2时表示第二行的第2列
                sheet.addCell(label);
                label = new Label(2,i,"男");
                sheet.addCell(label);
            }

            //关闭流
            workbook.write();
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

程序没报错,打开F盘会看到生成的文件,然后打开这个文件:

2.读操作:

package com.yinlei.excel;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

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

public class JxlReadExcel {
    public static void main(String[] args) {
        Workbook workbook = null;
        try {
            //创建workbook,并指定路径
             workbook = Workbook.getWorkbook(new File("F:\\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();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(workbook!=null){
                workbook.close();
            }
        }
    }
}


注意文件后缀格式:

.xls(97-2003) / xlsx(2007以上版本)

对于.xlsx需要XSSF组件。

实例代码中要用到的jar包:

maven仓库下载即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值