`
bdk82924
  • 浏览: 565113 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JAVA使用POI操作excel

 
阅读更多

JAVA使用POI操作excel2007 和 excel2003

 

 日期格式和数字格式好像不好区分~~悲惨 ....

 

jar包下载:

http://mirror.bjtu.edu.cn/apache//poi/dev/bin/poi-bin-3.8-beta3-20110606.tar.gz

 

测试代码

 

 

import java.io.FileInputStream;
import java.io.IOException;

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.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class PoiTest
{

    /**
     * 说明
     * 
     * @param args
     * @author
     * @throws IOException
     * @date 2011-7-28 上午06:21:43
     */
    public static void main(String[] args) throws IOException
    {

        // read2007("aaa.xlsx");
        read2003("bbb.xls");
    }

    public static void read2003(String strPath) throws IOException
    {

        // 构造 XSSFWorkbook 对象,strPath 传入文件路径
        Workbook xwb = new HSSFWorkbook(new FileInputStream(strPath));
        // sheet 的个数
        int sheets = xwb.getNumberOfSheets();
        // 读取第一章表格内容
        HSSFSheet sheet = (HSSFSheet) xwb.getSheetAt(0);
        // 定义 row、cell
        HSSFRow row;
        String cellStr;
        // 循环输出表格中的内容
        for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++)
        {
            row = sheet.getRow(i);
            for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++)
            {
                // 通过 row.getCell(j).toString() 获取单元格内容,
                cellStr = row.getCell(j).toString();
                // System.out.print(cellStr);

                HSSFCell cell = row.getCell(j);

                switch (cell.getCellType())
                {

                case HSSFCell.CELL_TYPE_NUMERIC:
                    System.out.print(cell.getNumericCellValue());
                    if (HSSFDateUtil.isCellDateFormatted(cell))
                    {

                        // 判断方法听说只有在2003下可以,2007判断不对头
                        System.out.print(DateUtil.getJavaDate(cell.getNumericCellValue()));
                        System.out.println(cell.getDateCellValue());
                    }
                    System.out.print("(NUMERIC)");
                    break;

                case HSSFCell.CELL_TYPE_STRING:
                    System.out.print(cell.getStringCellValue());
                    System.out.print("(STRING)");
                    // value = cell.getStringCellValue();
                    break;
                case HSSFCell.CELL_TYPE_BLANK:
                    System.out.print("(BLANK)");
                    break;
                default:
                    System.out.print(row.getCell(j).toString());
                    System.out.print("(default)");
                }
                System.out.print("\t");
            }
            System.out.println("");
        }

    }

    public static void read2007(String strPath) throws IOException
    {

        // 构造 XSSFWorkbook 对象,strPath 传入文件路径
        Workbook xwb = new XSSFWorkbook(strPath);
        // sheet 的个数
        int sheets = xwb.getNumberOfSheets();
        // 读取第一章表格内容
        XSSFSheet sheet = (XSSFSheet) xwb.getSheetAt(0);
        // 定义 row、cell
        XSSFRow row;
        String cellStr;
        // 循环输出表格中的内容
        for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++)
        {
            row = sheet.getRow(i);
            for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++)
            {
                // 通过 row.getCell(j).toString() 获取单元格内容,
                cellStr = row.getCell(j).toString();
                // System.out.print(cellStr);

                XSSFCell cell = row.getCell(j);

                switch (cell.getCellType())
                {

                case HSSFCell.CELL_TYPE_NUMERIC:
                    System.out.print(cell.getNumericCellValue());
                    if (HSSFDateUtil.isCellDateFormatted(cell))
                    {

                        // 判断方法听说只有在2003下可以,2007判断不对头
                        System.out.print(DateUtil.getJavaDate(cell.getNumericCellValue()));
                        System.out.println(cell.getDateCellValue());
                    }
                    System.out.print("(NUMERIC)");
                    break;

                case HSSFCell.CELL_TYPE_STRING:
                    System.out.print(cell.getStringCellValue());
                    System.out.print("(STRING)");
                    // value = cell.getStringCellValue();
                    break;
                case HSSFCell.CELL_TYPE_BLANK:
                    System.out.print("(BLANK)");
                    break;
                default:
                    System.out.print(row.getCell(j).toString());
                    System.out.print("(default)");
                }
                System.out.print("\t");
            }
            System.out.println("");
        }

    }
}

 

 

 

下面是兼容2003和2007的代码 ,已测试

转自:http://blog.csdn.net/jack0511/article/details/6179593

 

 

/**
 * ClassName:ExcelReader.java
 * Author: wenbin.ji
 * CreateTime: Jan 28, 2011 11:16:29 AM
 * Description:Excel数据读取工具类,POI实现,兼容Excel2003,及Excel2007
 **/

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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;

public class ExcelReader
{
    Workbook wb = null;
    List<String[]> dataList = new ArrayList<String[]>(100);

    public static void main(String[] args)
    {
        ExcelReader e = new ExcelReader("aaa.xlsx");
        // ExcelReader e = new ExcelReader("bbb.xls");
        System.out.println(e.getRowNum(0));
        List<String[]> list = e.getAllData(0);
        for (String[] s : list)
        {
            System.out.println(Arrays.asList(s).toString());
        }

    }

    public ExcelReader(String path)
    {
        try
        {
            InputStream inp = new FileInputStream(path);
            wb = WorkbookFactory.create(inp);
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } catch (InvalidFormatException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }

    }

    /**
     * 取Excel所有数据,包含header
     * 
     * @return List<String[]>
     */
    public List<String[]> getAllData(int sheetIndex)
    {
        int columnNum = 0;
        Sheet sheet = wb.getSheetAt(sheetIndex);
        if (sheet.getRow(0) != null)
        {
            columnNum = sheet.getRow(0).getLastCellNum() - sheet.getRow(0).getFirstCellNum();
        }
        if (columnNum > 0)
        {
            for (Row row : sheet)
            {
                String[] singleRow = new String[columnNum];
                int n = 0;
                for (int i = 0; i < columnNum; i++)
                {
                    Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
                    switch (cell.getCellType())
                    {
                    case Cell.CELL_TYPE_BLANK:
                        singleRow[n] = "";
                        break;
                    case Cell.CELL_TYPE_BOOLEAN:
                        singleRow[n] = Boolean.toString(cell.getBooleanCellValue());
                        break;
                    // 数值
                    case Cell.CELL_TYPE_NUMERIC:
                        if (DateUtil.isCellDateFormatted(cell))
                        {
                            singleRow[n] = String.valueOf(cell.getDateCellValue());
                        } else
                        {
                            cell.setCellType(Cell.CELL_TYPE_STRING);
                            String temp = cell.getStringCellValue();
                            // 判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
                            if (temp.indexOf(".") > -1)
                            {
                                singleRow[n] = String.valueOf(new Double(temp)).trim();
                            } else
                            {
                                singleRow[n] = temp.trim();
                            }
                        }
                        break;
                    case Cell.CELL_TYPE_STRING:
                        singleRow[n] = cell.getStringCellValue().trim();
                        break;
                    case Cell.CELL_TYPE_ERROR:
                        singleRow[n] = "";
                        break;
                    case Cell.CELL_TYPE_FORMULA:
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        singleRow[n] = cell.getStringCellValue();
                        if (singleRow[n] != null)
                        {
                            singleRow[n] = singleRow[n].replaceAll("#N/A", "").trim();
                        }
                        break;
                    default:
                        singleRow[n] = "";
                        break;
                    }
                    n++;
                }
                if ("".equals(singleRow[0]))
                {
                    continue;
                }// 如果第一行为空,跳过
                dataList.add(singleRow);
            }
        }
        return dataList;
    }

    /**
     * 返回Excel最大行index值,实际行数要加1
     * 
     * @return
     */
    public int getRowNum(int sheetIndex)
    {
        Sheet sheet = wb.getSheetAt(sheetIndex);
        return sheet.getLastRowNum();
    }

    /**
     * 返回数据的列数
     * 
     * @return
     */
    public int getColumnNum(int sheetIndex)
    {
        Sheet sheet = wb.getSheetAt(sheetIndex);
        Row row = sheet.getRow(0);
        if (row != null && row.getLastCellNum() > 0)
        {
            return row.getLastCellNum();
        }
        return 0;
    }

    /**
     * 获取某一行数据
     * 
     * @param rowIndex
     *            计数从0开始,rowIndex为0代表header行
     * @return
     */
    public String[] getRowData(int sheetIndex, int rowIndex)
    {
        String[] dataArray = null;
        if (rowIndex > this.getColumnNum(sheetIndex))
        {
            return dataArray;
        } else
        {
            dataArray = new String[this.getColumnNum(sheetIndex)];
            return this.dataList.get(rowIndex);
        }

    }

    /**
     * 获取某一列数据
     * 
     * @param colIndex
     * @return
     */
    public String[] getColumnData(int sheetIndex, int colIndex)
    {
        String[] dataArray = null;
        if (colIndex > this.getColumnNum(sheetIndex))
        {
            return dataArray;
        } else
        {
            if (this.dataList != null && this.dataList.size() > 0)
            {
                dataArray = new String[this.getRowNum(sheetIndex) + 1];
                int index = 0;
                for (String[] rowData : dataList)
                {
                    if (rowData != null)
                    {
                        dataArray[index] = rowData[colIndex];
                        index++;
                    }
                }
            }
        }
        return dataArray;

    }
}

 

分享到:
评论

相关推荐

    java使用poi操作excel

    Java 使用 Apache POI 操作 Excel 是一种常见的数据处理方式,特别是在大数据分析、报表生成和数据导入导出等场景中。Apache POI 是一个开源库,它允许 Java 开发者读写 Microsoft Office 格式,包括 Excel(.xlsx ...

    java使用poi操作excel需要的所有jar包(poi3.8版本)

    java使用poi操作excel需要的所有jar包(poi3.8版本),里面有poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、poi-ooxml-schemas-3.8-20120326.jar、dom4j-1.6.1.jar、xmlbeans-2.3.0.jar

    java使用POI操作excel (支持excel2007)

    Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...

    Java使用POI操作Excel

    使用第三方jar的POI实现对Excel文件写入和读取,写入和读取Excel都是使用Java反射方式实现,可以匹配任何实体类

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    java_poi实现excel导入导出

    在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java POI Java POI 是一个开源的 Java 库,由 Apache 软件基金会维护。它提供了一系列的 API,用于处理 Microsoft Office 文件...

    java使用poi操作excel和word

    用于java使用poi技术,读取word文档,和生成excel表格

    Java使用Poi操作Excel示例JavaPoiExcelExample

    Apache POI是一个开源的Java库,可以用来读、写和编辑Microsoft Office文档。代码创建一个简单Excel文件,包含一个工作表,工作表中有一行包含两个单元格。代码在操作完成后通过调用workbook.close()确保Apache POI...

    Java 使用poi导入excel 并使用xml做数据验证

    Apache POI是一个流行的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    java使用poi操作excel需要的所有jar包(3.8版本).zip

    Java中的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件...以上就是使用Apache POI 3.8版本在Java中操作Excel所需的关键知识点。记住,正确导入所有必需的jar包是成功运行代码的基础。

    java 通过poi操作excel jar包

    标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...

    Java使用poi操作excel实例解析

    标题:“Java使用poi操作excel实例解析” 描述:“主要为大家详细介绍了Java使用poi操作excel的简单实例,感兴趣的小伙伴们可以参考一下” 标签:“Java poi excel” 知识点: 1. POI概念介绍:Apache POI是一个...

    java 使用poi导出excel工具类

    java的poi的导入工具类,只需要传入两个arrayList,一个是execl的标题,一个是ececl的数据,就可以直接导出到execl里面,支持最新的execl,全新封装的,让每一个人都会使用poi导出execl!

    java使用POI将Excel文件中数据导入SqlServer中

    在界面上有一个TextField,一个浏览按钮,一个导入按钮。当选择浏览按钮时,弹出文本选择窗口,选择Excel文件之后,将路径显示在TextField中。点击导入,将Excel中的数据保存到SqlServer数据库中。

    JAVA使用POI操作Excel文件所需的jar包及简单代码示例

    jar包包含: commons-collections4-4.1.jar, poi-3.15.jar, poi-ooxml-3.15.jar, poi-ooxml-schemas-3.15.jar, xmlbeans-2.5.0.jar

    java poi 操作Excel

    下面将详细介绍如何使用Java POI来操作Excel以及相关的知识点。 1. **基本概念** - HSSF(Horrible Spreadsheet Format):这是POI库处理Excel 97-2003(.xls)格式的部分。HSSF提供了一套API,可以创建、修改和...

    java使用poi更新excel

    java使用apache的poi处理excel

    Java Poi 操作excel的API 好用

    二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....

Global site tag (gtag.js) - Google Analytics