继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java实现excel简单读写

Michaelix
关注TA
已关注
手记 2
粉丝 12
获赞 463
概述

Apache POI是 Java 程序员用来处理 MS Office 文件的常用开源库。由 Apache 软件基金会开发,使用 Java 分布式设计或修改 Microsoft Office 文件
,包含一系列类和方法对用户输入数据或文件进行编码和解码。其中 POI-HSSF 和 POI-XSSF 是用来处理 excel 文件的组件,前者对应 97~2007版本的文件格式(.xls), 后者对应07以后的格式(.xlsx),更多关于 POI 的介绍请访问官方主页
个人觉得 POI 对 office 的对象进行了很好的抽象设计,因此学习起来比较平滑。在阅读学习的同时打开excel进行同步操作,你会感觉到使用 POI 和使用 office 一样简单。

Quick Start

在进行操作之前,请使用 maven,ivy 等工具导入依赖;或者下载jar包导入到classpath下,本文使用的是最新稳定版3.14.

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.14</version>
</dependency>

<!-- ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.14</version>
</dependency>
  • 创建工作簿

    // 07之前版本
    Workbook wb = new HSSFWorkbook();
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();
    // 07之后版本
    Workbook wb = new XSSFWorkbook();
    FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");
    wb.write(fileOut);
    fileOut.close();
  • 创建表单
    // wb 可以是上述创建的两个对象之一
    Sheet sheet = wb.createSheet();
    Sheet sheet = wb.createSheet("库存"); 
  • 创建单元格
    
    // 1. 首先创建行,声明行的索引,从0开始。
    Row row = sheet.createRow(0);

// 2. 创建单元格,并设置值,可以是 Date,String,Calendar等类型
Cell cell = row.createCell(0);
cell.setCellValue("msg");


## 读取Excel文件
下面的示例方法中,读取一个excel表格,将其每一行数据抽象成一个 bean ExcelInfo, 最后返回一个list对象
``` java
package excel;

/**
 * excel bean
 *
 * @author Michal
 * @create 2016-04-22 17:03
 */
public class ExcelInfo {
    private int index;
    private String ip;
    private String community;

    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public String getCommunity() {
        return community;
    }
    public void setCommunity(String community) {
        this.community = community;
    }

    @Override
    public String toString() {
        return "ExcelInfo{" +
            "index=" + index +
            ", ip='" + ip + '\'' +
            ", community='" + community + '\'' +
            '}';
    }
}
package excel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Excel演示demo
 *
 * @author Michal
 * @create 2016-04-22 17:00
 */
public class ExcelDemo {
    public static void main(String[] args) throws IOException {
        // 需要替换到本机上的文件路径
        List<ExcelInfo> list = importExcel("D:/learn/javautil/src/test/java/resources/example.xls");
        System.out.println(list);
    }

    /**
     * 导入excel文件,使用绝对路径
     *
     * @param file
     * @param sheetIndex
     * @return
     * @throws IOException
     */
    public static List<ExcelInfo> importExcel(String file, int sheetIndex) throws IOException {
        FileInputStream in = null;
        List<ExcelInfo> result = null;
        try {
            in = new FileInputStream(file);
            result = new ArrayList<ExcelInfo>();
            Workbook wb = new HSSFWorkbook(in);
            Sheet sheet = wb.getSheetAt(sheetIndex);
            for (Row row : sheet) {
                if (row.getRowNum() < 1) {
                    continue;
                }
                ExcelInfo eInfo = new ExcelInfo();
                eInfo.setIndex(row.getRowNum());
                eInfo.setIp(row.getCell(0).getStringCellValue());
                eInfo.setCommunity(row.getCell(1).getStringCellValue());
                result.add(eInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            in.close();
        }
        return result;
    }

    public static List<ExcelInfo> importExcel(String file) throws IOException {
        return importExcel(file, 0);
    }

}
写入Excel文件

package excel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

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

/**
 * Excel写入
 *
 * @author Michal
 * @create 2016-04-22 17:34
 */
public class ExcelWrite {

    public static void main(String[] args) {
        excelExp("e:/result.xls");
    }

    /**
     * 传入文件的绝对路径
     *
     * @param filePath
     */
    public static void excelExp(String filePath) {
        Workbook wb = null;
        OutputStream out = null;
        try {
            wb = new HSSFWorkbook();
            Sheet sheet = wb.createSheet("test");
            sheet.setColumnWidth(0, 18 * 256);
            sheet.setColumnWidth(1, 18 * 256);
            Row r = sheet.createRow(0);
            r.createCell(0).setCellValue("ip");
            r.createCell(1).setCellValue("community");
            r.createCell(2).setCellValue("result");
            out = new FileOutputStream(filePath);
            wb.write(out);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
后记

之前有个jdbc的demo,现在想把excel操作加进去,后面更新。

打开App,阅读手记
12人推荐
发表评论
随时随地看视频慕课网APP

热门评论

你好!可以把源码分享出来吗?也可以单独发给我,谢谢!

查看全部评论