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

读取 Excel 的内容(.xls、.xlsx)[转自其它的博客]

 
阅读更多

最近要根据 excel导入数据到数据库,需要读取 excel 的内容。之前很久之前用过 jxl 和 poi 两大操作 excel 的 java 库,代码早丢了。今天从网上临时找到一段代码,可用。放在这里记录一下,以备后用。

代码的来源地址: http://blog.csdn.net/superdog007/article/details/48338337

 

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.HSSFWorkbook;  
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.xssf.usermodel.XSSFWorkbook;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
  
/** 
 * 读取Excel 
 *  
 * @author zengwendong 
 */  
public class ReadExcelUtils {  
    private Logger logger = LoggerFactory.getLogger(ReadExcelUtils.class);  
    private Workbook wb;  
    private Sheet sheet;  
    private Row row;  
  
    public ReadExcelUtils(String filepath) {  
        if(filepath==null){  
            return;  
        }  
        String ext = filepath.substring(filepath.lastIndexOf("."));  
        try {  
            InputStream is = new FileInputStream(filepath);  
            if(".xls".equals(ext)){  
                wb = new HSSFWorkbook(is);  
            }else if(".xlsx".equals(ext)){  
                wb = new XSSFWorkbook(is);  
            }else{  
                wb=null;  
            }  
        } catch (FileNotFoundException e) {  
            logger.error("FileNotFoundException", e);  
        } catch (IOException e) {  
            logger.error("IOException", e);  
        }  
    }  
      
    /** 
     * 读取Excel表格表头的内容 
     *  
     * @param InputStream 
     * @return String 表头内容的数组 
     * @author zengwendong 
     */  
    public String[] readExcelTitle() throws Exception{  
        if(wb==null){  
            throw new Exception("Workbook对象为空!");  
        }  
        sheet = wb.getSheetAt(0);  
        row = sheet.getRow(0);  
        // 标题总列数  
        int colNum = row.getPhysicalNumberOfCells();  
        System.out.println("colNum:" + colNum);  
        String[] title = new String[colNum];  
        for (int i = 0; i < colNum; i++) {  
            // title[i] = getStringCellValue(row.getCell((short) i));  
            title[i] = row.getCell(i).getCellFormula();  
        }  
        return title;  
    }  
  
    /** 
     * 读取Excel数据内容 
     *  
     * @param InputStream 
     * @return Map 包含单元格数据内容的Map对象 
     * @author zengwendong 
     */  
    public Map<Integer, Map<Integer,Object>> readExcelContent() throws Exception{  
        if(wb==null){  
            throw new Exception("Workbook对象为空!");  
        }  
        Map<Integer, Map<Integer,Object>> content = new HashMap<Integer, Map<Integer,Object>>();  
          
        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;  
            Map<Integer,Object> cellValue = new HashMap<Integer, Object>();  
            while (j < colNum) {  
                Object obj = getCellFormatValue(row.getCell(j));  
                cellValue.put(j, obj);  
                j++;  
            }  
            content.put(i, cellValue);  
        }  
        return content;  
    }  
  
    /** 
     *  
     * 根据Cell类型设置数据 
     *  
     * @param cell 
     * @return 
     * @author zengwendong 
     */  
    private Object getCellFormatValue(Cell cell) {  
        Object cellvalue = "";  
        if (cell != null) {  
            // 判断当前Cell的Type  
            switch (cell.getCellType()) {  
            case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC  
            case Cell.CELL_TYPE_FORMULA: {  
                // 判断当前的cell是否为Date  
                if (DateUtil.isCellDateFormatted(cell)) {  
                    // 如果是Date类型则,转化为Data格式  
                    // data格式是带时分秒的:2013-7-10 0:00:00  
                    // cellvalue = cell.getDateCellValue().toLocaleString();  
                    // data格式是不带带时分秒的:2013-7-10  
                    Date date = cell.getDateCellValue();  
                    cellvalue = date;  
                } else {// 如果是纯数字  
  
                    // 取得当前Cell的数值  
                    cellvalue = String.valueOf(cell.getNumericCellValue());  
                }  
                break;  
            }  
            case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING  
                // 取得当前的Cell字符串  
                cellvalue = cell.getRichStringCellValue().getString();  
                break;  
            default:// 默认的Cell值  
                cellvalue = "";  
            }  
        } else {  
            cellvalue = "";  
        }  
        return cellvalue;  
    }  
  
    public static void main(String[] args) {  
        try {  
            String filepath = "F:test.xls";  
            ReadExcelUtils excelReader = new ReadExcelUtils(filepath);  
            // 对读取Excel表格标题测试  
//          String[] title = excelReader.readExcelTitle();  
//          System.out.println("获得Excel表格的标题:");  
//          for (String s : title) {  
//              System.out.print(s + " ");  
//          }  
              
            // 对读取Excel表格内容测试  
            Map<Integer, Map<Integer,Object>> map = excelReader.readExcelContent();  
            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();  
        }catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

 依赖2个 jar,分别是:

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

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.15</version>
</dependency>

 

分享到:
评论

相关推荐

    C# EXCEL(.xls和.xlsx)导入到数据库

    C# EXCEL(.xls和.xlsx)导入到数据库 C# EXCEL(.xls和.xlsx)导入到数据库是指将Excel文件中的数据导入到数据库中,以便于后续的数据处理和分析。下面是实现C# EXCEL(.xls和.xlsx)导入到数据库的步骤和关键技术点: ...

    excel(.xls,xlsx)转.dbf工具

    它们可能被xls2dbf.exe这个可执行程序调用,用于读取Excel文件并将其内容保存到DBF文件中。 在使用"excel(.xls,xlsx)转.dbf工具"时,用户可能需要以下步骤: 1. 下载并安装该工具,确保所有依赖项(如VFP的相关DLL...

    读取Excel文件xls、xlsx、csv格式文件,读取txt文件

    //C# 读取Excel文件、C#读取xls文件、C#读取xlsx文件、C#读取csv文件 //C# 将xls文件转换为DataTable、C#将xlsx文件转换为DataTable //C#将csv文件转换为DataTable //C#将txt文件转换为DataTable(列与列之间空格隔...

    读取excel(.xls,.xlsx)文件JAVA源代码

    JAVA读取excel文件源代码。可以传入文件的 开始行,结束行,sheet页名称,开始列,结束列,读取文件,返回List, Object&gt;&gt;类型和List;Object&gt;&gt;类型,List, Object&gt;&gt;需要传入对应的key字符串,然后用“;”进行...

    POI读写excel(.xls/.xlsx)的Demo

    在这个"POI读写excel(.xls/.xlsx)的Demo"中,我们将深入探讨如何使用Apache POI库在Java中读取和写入Excel文件。 1. **Apache POI库介绍** Apache POI 提供了 HSSF(Horrible Spreadsheet Format)和 XSSF(XML ...

    Java读取Excel表格数据时(.xls、.xlsx 格式),需要引用的jar包

    总结起来,Java读取Excel数据涉及的主要知识点有:Apache POI库的使用,包括`.xls`和`.xlsx`格式的处理;Android环境下的兼容性考虑,可能需要使用`jxl`库;以及如何通过Java代码遍历Excel文件的行和单元格,获取并...

    C# Excel格式转换,xls转换成xlsx,不依赖Excel,不依赖office

    "C# Excel格式转换,xls转换成xlsx,不依赖Excel,不依赖office"这个主题涉及了如何在C#环境中,利用第三方库进行Excel文件格式的转换,而无需安装Microsoft Office或者Excel。这种方式的优点在于,它使得应用程序...

    Java 读取本地.xls .xlsx文件

    在Java编程中,读取本地的.xls和.xlsx文件通常涉及到数据处理、数据分析或者报表生成等场景。这些文件格式是Microsoft Excel用于存储表格数据的标准格式,.xls是早期版本的Excel文件,而.xlsx则是较新的XML格式,...

    Android通过POI完美解析Excel.xls xlsx成html编译前jar包

    1. **读取Excel文件**:使用`XSSFWorkbook`类(针对.xlsx文件)或`HSSFWorkbook`类(针对.xls文件)打开Excel文件。例如: ```java File excelFile = new File("path_to_your_excel_file"); FileInputStream fis ...

    poi操作Excel,HSSF,XSSF两种方式(.xls与.xlsx)导入导出

    在本文中,我们将深入探讨如何使用POI库中的HSSF和XSSF组件来读取和写入Excel文件,这两种组件分别用于处理.xls(97-2003版Excel格式)和.xlsx(2007及更高版本的Office Open XML格式)。 首先,让我们了解HSSF...

    poi 读取.xls与.xlsx需要的jar

    "poi 读取.xls与.xlsx需要的jar"这个标题暗示了我们主要讨论的是如何配置Apache POI库来处理这两种不同版本的Excel文件。 首先,.xls是Excel 97-2003使用的文件格式,而.xlsx是Excel 2007及以后版本采用的新XML格式...

    xlsx.full.min.js官方工具包用于js读取excel使用

    JavaScript 技术篇 - js读取Excel文档里的内容实例演示,js如何读取excel指定单元格的内容,js将excel的内容转化为json字符串方法:https://blog.csdn.net/qq_38161040/article/details/118678016

    xlsx.full.min.js-导入导出excel获取数据demo.zip

    通常,这样的示例会包括如何加载库,如何读取Excel文件(可能通过File API或者URL),如何处理数据,以及如何将数据写回新的Excel文件。 在实际应用中,"xlsx.full.min.js" 使用了逗号分隔值(CSV)、JSON等格式来与...

    C#使用NPOI操作excel例子(含.xls、.xlsx)等

    6. **读取数据**:通过遍历工作表的行和列,可以读取Excel文件中的数据。使用`GetRow`方法获取特定行,再用`GetCell`方法获取特定单元格。 7. **样式与格式**:NPOI提供了对字体、颜色、边框、对齐方式等多种样式...

    冻结excel行或列jar包 spire.xls.free-2.2.0

    Spire.XLS是一款全面的.NET Excel组件,而Spire.XLS.Free是其免费版,提供了基本的Excel处理功能,包括创建、读取、写入和修改Excel文件。在这个特定的版本2.2.0中,开发者可以利用它来实现一些核心的Excel操作,...

    Spire.Xls_4.12.2.zip

    - **读写操作**:支持读取XLS、XLSX、XLSM、XLTX、XLTM等格式,以及写入新的Excel文件。 - **数据处理**:可以进行单元格的数据填充、排序、查找替换、数据验证等操作。 - **图表与图形**:创建、编辑和格式化...

    读取和导出excel的工具库xlsx.full.min.js

    xlsx.full.min.js是XLSX.js库的一个压缩版本,XLSX.js是一个开源的JavaScript库,专门用于处理Microsoft Excel格式的文件,包括XLS、XLSX和CSV等。通过这个库,开发者可以轻松地在前端实现Excel文件的解析、操作和...

    .pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx 文件网页预览 ASP.NET MVC 项目

    在IT行业中,尤其是在Web开发领域,常常需要处理各种类型的文件,如PDF、Word文档(.doc/.docx)、Excel表格(.xls/.xlsx)以及PowerPoint演示文稿(.ppt/.pptx)。这些文件格式广泛应用于日常工作和学习,因此提供...

    使用jxl解析excel(.xls)固定模板(智联简历为例)

    此外,值得注意的是,JXL库只支持.xls格式的文件,对于.xlsx格式的Excel文件,你可能需要使用Apache POI或其他兼容新版本Excel格式的库。尽管如此,JXL库在处理旧版Excel文件时依然非常实用,特别是在资源有限的项目...

    使用poi将xls转为xlsx,所有样式完美转换

    使用poi将xls格式的Excel转为xlsx,文件中的所有样式都可以完美转换,例如合并栏、背景和单元格样式等。Java源码

Global site tag (gtag.js) - Google Analytics