java使用POI进行Excel读写

1 jar包下载

  参考链接:http://www.cnblogs.com/gmq/archive/0001/01/01/1521496.html

  poi-3.7-20101029.jar和源码下载地址:http://pan.baidu.com/s/1sjNmnc5#path=%252F04technology%252F01J2EE%252Fjar

2 ExcelHelper类

package zjr.amy.excel;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * Excel帮助类
 *
 * @author zhujinrong
 *
 */
public class ExcelHelper {

    /**
     * 读取Excel内容
     *
     * @param fileName
     *            文件名和路径
     * @param ignoreRows
     *            忽略读取的行数
     * @return 数据
     * @throws FileNotFoundException
     *             找不到文件
     * @throws IOException
     *             输入输出异常
     */
    public static String[][] getData(String fileName, int ignoreRows)
            throws FileNotFoundException, IOException {
        File file = new File(fileName);
        List<String[]> result = new ArrayList<String[]>();
        int rowSize = 0;
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(
                file));
        POIFSFileSystem fs = new POIFSFileSystem(in);
        HSSFWorkbook workbook = new HSSFWorkbook(fs);
        HSSFCell cell = null;
        for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {

            // 可能有多个sheet
            HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
            for (int rowIndex = ignoreRows; rowIndex < sheet.getLastRowNum(); rowIndex++) {
                HSSFRow row = sheet.getRow(rowIndex);
                if (row == null) {
                    continue;
                }

                // 获取行数
                int tempRowSize = row.getLastCellNum() + 1;
                if (tempRowSize > rowSize) {
                    rowSize = tempRowSize;
                }

                String[] values = new String[rowSize];
                Arrays.fill(values, "");
                boolean hasValue = false;
                for (int collumnIndex = 0; collumnIndex <= row.getLastCellNum(); collumnIndex++) {
                    String value = "";
                    cell = row.getCell(collumnIndex);
                    if (cell != null) {
                        switch (cell.getCellType()) {
                        case HSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                Date date = cell.getDateCellValue();
                                if (date != null) {
                                    value = new SimpleDateFormat("yyyy-MM-dd")
                                            .format(date);
                                } else {
                                    value = "";
                                }
                            } else {
                                double d = cell.getNumericCellValue();
                                value = d + "";
                            }
                            break;
                        case HSSFCell.CELL_TYPE_FORMULA:
                            if (!cell.getStringCellValue().equals("")) {
                                value = cell.getStringCellValue();
                            } else {
                                value = cell.getNumericCellValue() + "";
                            }
                            break;
                        case HSSFCell.CELL_TYPE_BLANK:
                            break;
                        case HSSFCell.CELL_TYPE_ERROR:
                            break;
                        case HSSFCell.CELL_TYPE_BOOLEAN:
                            value = (cell.getBooleanCellValue() == true ? "Y"
                                    : "N");
                            break;
                        default:
                            value = "";
                        }
                        if (collumnIndex == 0 && value.trim().equals("")) {
                            break;
                        }
                        values[collumnIndex] = value.trim();
                        hasValue = true;
                    }
                }
                if (hasValue) {
                    result.add(values);
                }
            }
        }

        in.close();
        String[][] returnArray = new String[result.size()][rowSize];
        for (int i = 0; i < returnArray.length; i++) {
            returnArray[i] = (String[]) result.get(i);
        }

        return returnArray;
    }

    /**
     * 写Excel数据
     *
     * @param fileName
     *            文件名
     * @param data
     *            数据
     * @param sheetName
     *            sheet名字
     * @throws IOException
     *             输入输出异常
     */
    public static void setData(String fileName, String[][] data,
            String sheetName) throws IOException {
        FileOutputStream fos = new FileOutputStream(fileName);
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet s = wb.createSheet();
        wb.setSheetName(0, sheetName);
        if (data != null && data.length > 0) {
            for (int i = 0; i < data.length; i++) {
                // 创建第i行
                HSSFRow row = s.createRow(i);
                for (int j = 0; j < data[i].length; j++) {
                    // 第i行第j列的数据
                    HSSFCell cell = row.createCell(j);
                    cell.setCellValue(data[i][j]);
                }
            }
        }

        // 写入工作薄
        wb.write(fos);

        // 关闭输出流
        fos.close();
    }
}

3  TestExcelHelper类

package zjr.amy.excel.test;

import java.io.FileNotFoundException;
import java.io.IOException;

import zjr.amy.excel.ExcelHelper;

public class TestExcelHelper {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestGetData();
    }

    /**
     * 测试获取数据
     */
    public static void TestGetData() {
        try {
            String[][] array = ExcelHelper.getData("D:/001code/100java学习/JavaUtil/doc/税费管理20141105100144.xls", 0);

            if (array != null && array.length > 0){
                for(int i = 0; i < array.length; i++){
                    System.out.print(i + ": ");
                    for(int j = 0; j < array[i].length; j ++){
                        System.out.print(array[i][j] + " ");
                    }
                    System.out.println();
                }

                setData(array, "税费信息");
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 测试写入数据
     * @param data 数据
     * @param sheetName sheet名称
     */
    public static void setData(String [][] data, String sheetName){
        String fileName="D:/001code/100java学习/JavaUtil/doc/税费管理20141105100144Copy.xls";
        try {
            ExcelHelper.setData(fileName, data, sheetName);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

4 测试结果

  1-1 待读取文件内容(D:\001code\100java学习\JavaUtil\doc\税费管理20141105100144.xls)

  图1-2 显示读取税费管理20141105100144.xls文件内容

  1-3 写入文件内容(D:\001code\100java学习\JavaUtil\doc\税费管理20141105100144Copy.xls)

5 git地址

  https://github.com/HelloAmy/JavaStudy.git

时间: 2024-10-08 15:29:00

java使用POI进行Excel读写的相关文章

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri

JAVA使用POI操作excel

这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格 下面是一个简单的写入的demo public static void main(String [] args){ try { HSSFWorkbook

JAVA关于POI导出Excel内存溢出的解决方案

JAVA关于POI导出Excel内存溢出的解决方案 在我们使用JAVA开发过程中,经常要导出查询获得的数据,这些数据一般情况下都是以Excel存储的,因此我们在导出数据的时候要使用JAVA的POI库,其主要是对各种windows平台的数据格式进行操作,在这里,我们是对Excel操作. 生成Excel的过程原理是这样的,首先,我们对数据库进行查询,获取相应的结果集,一般是list集合,然后生成Workbook对象,根据生成的Workbook对象获取sheet对象,根据此sheet对象获取Row对象

JAVA使用POI获取Excel的列数与行数

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧. 前言 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

JAVA的POI操作Excel

1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推.行则使用数字表示,例如:A3 表示第三行第一列,E5表示第五行第五列. 1.2 POI工具包 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Exce

POI之excel读写

两个企业级应用系统之间做数据交互的方式,如下: WebService HTTP POST FTP ... 当然,这些方式都是建立在,网络互通的基础上. 也有一些应用系统部署局域网内,只允许浏览器访问, 此时,只能通过将系统A的数据导出,再导入系统B,相互约定数据格式. 在驾培系统中,我们会使用POI组件,将学员信息及学时信息,导入/导出为excel. 下面来实现POI的简单读写: 依赖包: <dependency> <groupId>org.apache.poi</group