文档章节

java读取excel数据 需要poi组件

deepins
 deepins
发布于 2014/09/19 18:12
字数 716
阅读 85
收藏 0

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。

  结构:

  HSSF - 提供读写Microsoft Excel格式档案的功能。

  XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

  HWPF - 提供读写Microsoft Word格式档案的功能。

  HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

  HDGF - 提供读写Microsoft Visio格式档案的功能。

 

以下是实例程序:

package excelread;

import java.io.FileInputStream;   
import java.io.FileNotFoundException;   
import java.io.IOException;   
import java.io.InputStream;   
import java.util.Date;   
import java.util.HashMap;   
import java.util.Map;   
  
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 org.apache.poi.poifs.filesystem.POIFSFileSystem;   
  
/**  
 * 操作Excel表格的功能类  
 * @author:hnylj  
 * @version 1.0  
 */  
public class ExcelReader {   
    private POIFSFileSystem fs;   
    private HSSFWorkbook wb;   
    private HSSFSheet sheet;   
    private HSSFRow row;   
    /**  
     * 读取Excel表格表头的内容  
     * @param InputStream  
     * @return String 表头内容的数组  
     *   
     */  
    public String[] readExcelTitle(InputStream is) {   
        try {   
            fs = new POIFSFileSystem(is);   
            wb = new HSSFWorkbook(fs);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        sheet = wb.getSheetAt(0);   
        row = sheet.getRow(0);   
        //标题总列数   
        int colNum = row.getPhysicalNumberOfCells();   
        String[] title = new String[colNum];   
        for (int i=0; i<colNum; i++) {   
            title[i] = getStringCellValue(row.getCell((short) i));   
        }   
        return title;   
    }   
       
    /**  
     * 读取Excel数据内容  
     * @param InputStream  
     * @return Map 包含单元格数据内容的Map对象  
     */  
    public Map<Integer,String> readExcelContent(InputStream is) {   
        Map<Integer,String> content = new HashMap<Integer,String>();   
        String str = "";   
        try {   
            fs = new POIFSFileSystem(is);   
            wb = new HSSFWorkbook(fs);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        sheet = wb.getSheetAt(0);   
        //得到总行数   
        int rowNum = sheet.getLastRowNum();   
        row = sheet.getRow(0);   
        int colNum = row.getPhysicalNumberOfCells();   
        //正文内容应该从第二行开始,第一行为表头的标题   
        for (int i = 1; i <= rowNum; i++) {   
            row = sheet.getRow(i);   
            int j = 0;   
            while (j<colNum) {   
        //每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据   
        //也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean   
                str += getStringCellValue(row.getCell((short) j)).trim() + "-";   
                j ++;   
            }   
            content.put(i, str);   
            str = "";   
        }   
        return content;   
    }   
       
    /**  
     * 获取单元格数据内容为字符串类型的数据  
     * @param cell Excel单元格  
     * @return String 单元格数据内容  
     */  
    private String getStringCellValue(HSSFCell cell) {   
        String strCell = "";   
        switch (cell.getCellType()) {   
        case HSSFCell.CELL_TYPE_STRING:   
            strCell = cell.getStringCellValue();   
            break;   
        case HSSFCell.CELL_TYPE_NUMERIC:   
            strCell = String.valueOf(cell.getNumericCellValue());   
            break;   
        case HSSFCell.CELL_TYPE_BOOLEAN:   
            strCell = String.valueOf(cell.getBooleanCellValue());   
            break;   
        case HSSFCell.CELL_TYPE_BLANK:   
            strCell = "";   
            break;   
        default:   
            strCell = "";   
            break;   
        }   
        if (strCell.equals("") || strCell == null) {   
            return "";   
        }   
        if (cell == null) {   
            return "";   
        }   
        return strCell;   
    }   
       
    /**  
     * 获取单元格数据内容为日期类型的数据  
     * @param cell Excel单元格  
     * @return String 单元格数据内容  
     */  
    private String getDateCellValue(HSSFCell cell) {   
        String result = "";   
        try {   
            int cellType = cell.getCellType();   
            if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {   
                Date date = cell.getDateCellValue();   
                result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)    
                + "-" + date.getDate();   
            } else if (cellType == HSSFCell.CELL_TYPE_STRING) {   
                String date = getStringCellValue(cell);   
                result = date.replaceAll("[年月]", "-").replace("日", "").trim();   
            } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {   
                result = "";   
            }   
        } catch (Exception e) {   
            System.out.println("日期格式不正确!");   
            e.printStackTrace();   
        }   
        return result;   
    }   
       
    public static void main(String[] args) {   
        try {   
            //对读取Excel表格标题测试   
            InputStream is = new FileInputStream("C:\\Excel表格测试.xls");   
            ExcelReader excelReader = new ExcelReader();   
            String[] title = excelReader.readExcelTitle(is);   
            System.out.println("获得Excel表格的标题:");   
            for (String s : title) {   
                System.out.print(s + " ");   
            }   
               
            //对读取Excel表格内容测试   
            InputStream is2 = new FileInputStream("C:\\Excel表格测试.xls");   
            Map<Integer,String> map = excelReader.readExcelContent(is2);   
            System.out.println("获得Excel表格的内容:");   
            for (int i=1; i<=map.size(); i++) {   
                System.out.println(map.get(i));   
            }   
        } catch (FileNotFoundException e) {   
            System.out.println("未找到指定路径的文件!");   
            e.printStackTrace();   
        }   
    }   
}

 

本文转载自:http://deepin.iteye.com/blog/716041

deepins
粉丝 8
博文 44
码字总数 0
作品 0
深圳
架构师
私信 提问
Java读取Excel数据:基于Apache POI(一)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/85302347 Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Exc...

zhangphil
2018/12/27
0
0
使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2

简介 在 developerWorks DB2 上本文的 先行篇 中,我们研究了 Apache 的 POI 项目的开放源代码产品。期间,我们开始在了解 SQL 的技术专家和通常将电子表格选作工具的商务专家之间架起一座桥...

红薯
2008/12/05
957
0
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW
2012/10/26
1K
0
JAVA使用POI操作excel

一直想写一个poi的使用的总结,话说我第一份正式工作接到的第一个工作就是当时TL让我去整理项目的数据字典,即把内容插入到CSV上,然后把csv的内容插入到数据库中,而且我印象极深的当时使用...

王小明123
2013/01/09
20.9K
12
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
10分钟前
4
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
15分钟前
2
0
川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
36分钟前
10
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
今天
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部