`
glorytao
  • 浏览: 28417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java读取excel

阅读更多
package com.jjm.lht;  
 
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("D:\\test.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("D:\\test.xls");  
            Map<Integer,String> map = excelReader.readExcelContent(is2);
            System.out.println();
            System.out.println("获得Excel表格的内容:");  
            for (int i=1; i<=map.size(); i++) {  
                System.out.println(map.get(i).replace("-", " "));  
            }  
        } catch (FileNotFoundException e) {  
            System.out.println("未找到指定路径的文件!");  
            e.printStackTrace();  
        }  
    }  
分享到:
评论
1 楼 love_wbo 2012-06-11  
你好,我用的Eclipse编写代码的,我用了你这段代码,运行出现错误:
获得Excel表格的标题:
aaa bbb xxx sss ddd Exception in thread "main" java.lang.NullPointerException
at ExcelReader.getStringCellValue(ExcelReader.java:92)
at ExcelReader.readExcelContent(ExcelReader.java:76)
at ExcelReader.main(ExcelReader.java:157);
你能帮忙解释一下么?
第92行代码是: case HSSFCell.CELL_TYPE_STRING:
第76行代码是: j ++;
第157行代码是: System.out.println();

我也不知道是怎么出现的错误,你知道是为什么么?谢谢!!

相关推荐

    Java读取Excel内容

    Java读取Excel内容 v Java读取Excel内容 Java读取Excel内容

    完美解决java读取excel内存溢出问题.rar

    总结来说,解决Java读取Excel内存溢出问题,关键在于合理利用资源、优化代码逻辑以及选择适合的API,如Apache POI的SXSSF。通过这些方法,我们可以在不显著增加系统资源负担的情况下,高效地处理大Excel文件。

    JAVA读取Excel,建库建表,并生成java实体

    总结,Java读取Excel并进行数据库建库建表及生成Java实体的过程涉及了Apache POI库的使用、数据库操作和源代码生成。理解这些步骤可以帮助你有效地处理类似的任务,提高开发效率。在实际应用中,你还需要考虑错误...

    java读取excel数据导入数据库源码

    java读取excel数据导入数据库源码 java读取excel数据导入数据库源码

    java读取excel文件生成矩阵

    在Java编程中,读取...以上就是使用Java读取Excel文件生成矩阵的基本步骤。实际开发中,你可能还需要处理更多细节,如异常处理、数据验证、优化性能等。希望这个介绍能帮助你理解这个过程,并在实际项目中灵活应用。

    Java读取Excel表格中的日期

    ### Java读取Excel表格中的日期 #### 背景与问题描述 在处理Excel文件时,经常遇到的一个问题是如何正确地识别并处理日期格式的数据。这是因为Excel中的日期格式较为复杂,有时甚至会出现不同版本的Excel文件中...

    JAVA读取 excelJAVA读取 excel

    在Java编程环境中,读取Excel文件是一项常见的...Java读取Excel文件是一个相对复杂的任务,但通过Apache POI库,我们可以简化这个过程,高效地处理Excel数据。记住,始终确保正确处理文件流和资源,以避免潜在的问题。

    java读取excel之xlsl超大文件

    标题"java读取excel之xlsl超大文件"所涉及的核心知识点是优化大量数据的读取策略。在Java中,可以使用Apache POI的SXSSF API(Streaming Usermodel API)来实现这种优化。与常规的XSSF API不同,SXSSF允许我们以流的...

    Java读取excel

    Java读取excel

    java读取excel所有页的数据

    本篇将详细介绍如何使用Java读取Excel所有页的数据,以及可能出现的问题和解决策略。 首先,我们需要引入能够处理Excel文件的库。Apache POI 是一个广泛使用的Java API,它允许程序员创建、修改和显示Microsoft ...

    java读取Excel中多个sheet生成xml文件

    java读取Excel表中的内容,可以读取多个sheet,生成自定义格式的xml文件

    java 读取Excel文件中的内容

    在Java编程中,读取Excel文件的内容是一项常见的任务,尤其在数据处理、报表生成或数据分析等领域。Excel文件通常包含表格数据,而Java提供多种库来处理这类任务,比如Apache POI、JExcelApi和OpenCSV等。本篇将重点...

    Java读取Excel支持2003和2007

    提供的压缩包可能包含了一个Java读取Excel的示例程序、相关的说明文件以及用于测试的Excel文件。确保按照提供的说明运行示例程序,以便在实际环境中验证读取功能。 总之,Java通过Apache POI库提供了强大的功能来...

    java读取excel文件

    Java 读取 Excel 文件 Java 读取 Excel 文件是指使用 Java 语言从 Excel 文件中读取数据,并对其进行处理的过程。下面将详细介绍 Java 读取 Excel 文件的过程和相关知识点。 Java 读取 Excel 文件的步骤 1. 导入...

    java读取excel文件jar包20181223

    Java读取Excel文件是开发过程中常见的任务,尤其是在处理数据导入导出、数据分析或者报表生成时。这个名为"java读取excel文件jar包20181223"的资源可能包含了一些帮助Java开发者实现这一功能的库。下面将详细讨论...

    java读取excel数据!

    在Java编程环境中,读取Excel数据是一项常见的任务,特别是在数据处理、数据分析或系统集成的场景中。本示例中,我们关注的是如何使用Java来读取Excel表格中的数据,并将其保存,这通常涉及到Apache POI库的应用。...

    JAVA读取Excel实例,可直接运行

    标题提到的是一个可以直接运行的JAVA读取Excel的实例,而描述则指出在解压文件后,需要调整文件路径和Excel文件名以适应本地环境。 首先,我们要了解Java中用于读取Excel的库。最常用的是Apache POI项目,它提供了...

    java 读取excel表格数据 poi

    java读取excel 表格数据。 public static void main(String[] args) { String[][] content=POIExcelUtils.read("E:\\1.xlsx"); for(int i=0;i;i++) { if(content[i]!=null){ for(int j=0;j[i].length;j...

    java读取excel存入mysql

    本示例程序将指导你如何使用Java读取Excel文件并将其内容存入MySQL数据库。这对于数据导入、数据分析或者自动化报告等任务非常有用。 首先,你需要在项目中引入Apache POI库,这是一个Java API,用于处理Microsoft ...

Global site tag (gtag.js) - Google Analytics