Java通过poi读取excel中文件

maven依赖

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

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

代码示例

package com.**.**.**.common.utils;

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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;

/**
 * @author zyydd
 * @date 2019/3/15 15:00
 */
public class ExcelUtils {
    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtils.class);

    public static void main(String[] args) {
        String[][] rowArray = getArrayFromXLSX("D://test.xlsx", 0);
        for (String[] row : rowArray) {
            for (String cell : row) {
                System.out.print(cell + "\t");
            }
            System.out.println();
        }
    }

    /**
     * 获取xlsx文件内容某个sheet(从0开始)的内容,以二维数组形式返回
     *
     * @param fileAbsolutePath xlsx文件的绝对路径
     * @return xlsx文件的文本内容
     */
    public static String[][] getArrayFromXLSX(String fileAbsolutePath, int bookIndex) {
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(new File(fileAbsolutePath));
            XSSFWorkbook book = new XSSFWorkbook(inputStream);
            if (bookIndex >= book.getNumberOfSheets()) {
                LOGGER.error("getArrayFromXLSX error: bookIndex={} is to large! ", bookIndex);
                return null;
            }
            XSSFSheet sheet = book.getSheetAt(bookIndex);
            int rowNum = sheet.getLastRowNum() + 1;
            int coloumNum = sheet.getRow(0).getPhysicalNumberOfCells();
            String[][] contents = new String[rowNum][coloumNum];
            for (int j = 0; j < rowNum; j++) {
                XSSFRow row = sheet.getRow(j);
                if (row != null) {
                    for (int k = 0; k < row.getLastCellNum(); k++) {
                        contents[j][k] = getXCellFormatValue(row.getCell(k));
                    }
                }
            }
            return contents;
        } catch (FileNotFoundException fe) {
            LOGGER.error("getArrayFromXLSX error: FileNotFoundException", fe);
        } catch (IOException ie) {
            LOGGER.error("getArrayFromXLSX error: IOException", ie);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (Exception e) {
                    LOGGER.error("getArrayFromXLSX close Exception", e);
                }
            }
        }
        return null;
    }

    private static String getXCellFormatValue(XSSFCell cell) {
        String cellValue = "";
        if (null != cell) {
            switch (cell.getCellType()) {
                case XSSFCell.CELL_TYPE_STRING:
                    cellValue = cell.getRichStringCellValue().getString();
                    break;
                case XSSFCell.CELL_TYPE_NUMERIC:
                    cellValue = (new Double(cell.getNumericCellValue())).intValue() + "";
                    break;
                default:
                    cellValue = " ";
            }
        } else {
            cellValue = "";
        }
        return cellValue;
    }

}

excel数据(test.xlsx)

执行结果

原文地址:https://www.cnblogs.com/zhenyuyaodidiao/p/11791386.html

时间: 2024-10-13 22:49:47

Java通过poi读取excel中文件的相关文章

java使用poi读取excel(.xlsx)文件

经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定. 其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类.区别在于HSSFWorkbook是针对.xls文件,XSSFWorkbook是针对.xslx文件. 首先明确一下基本概念: 先创建一个工作簿,一个工作簿可以有多个工作表,一个工作表可以有多个行,一

java用POI读取excel时date类型出现的问题

最近用poi读取excel并传入数据库中,但是出现了一个非常奇葩的问题,一直困扰了我很久 就是读取时date类型出现年份和日读取正确,但是月份为00的情况,我冥思苦想了很找了久,一直找不到原因 今天突然发现时自己粗心导致的 之前的错误代码: Date time=new Date(); time=cell.getDateCellValue(); //按指定格式输出 SimpleDateFormat df=new SimpleDateFormat("yyyy/mm/dd hh:mm:ss"

java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell.一.实例代码: 只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的.说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印.当然也可以返回三维数组(包含该单元格的位置坐标)

java利用poi读取excel异常问题

最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直接过来用就可以了,我这里用的是java poi相关资源包. 1,首先要能够读取带xlsx的excel文件,必须要导入如下的jar包 然后遇到的问题是在本地工程下建立的一个测试类测试没有异常,两种excel的文件都能读取,但是一旦发布到web工程下,我的工程是在tomcat下跑的.这里就出现了问题,总

JAVA POI读取Excel中Cell为null的处理

空数据:没有任何编辑过的单元格(非空格) 有时候我们需要对根据每一列的信息进行处理,这里就会出现易错的缺陷. 1.不需要这些空数据 row = sheet.getRow(i); for (Cell c : row) { //处理 } 2.需要这些空数据 row = sheet.getRow(i); for (int j=0;j<row.getLastCellNum();j++) { //处理 } 注:如有更好的方式,欢迎交流.

JAVA:通过poi读取excel

POI是一个apache开源的jar包,可以通过搜索 java POI找到官网,并下载开发包. 包含的功能: 可以读取excel2003,2007,2010等. 读取excel2007/2010的代码: public static boolean isNumeric(String str) { for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } re

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文件中数据的格式判定,你要读取文件,如果文件中其实没

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work