精华内容
下载资源
问答
  • poi读取excel
    2022-03-27 14:59:09

    上篇文章记录了简单的POI创建Excel文件,依赖导入可参考上篇
    POI读取excel中公式

        @Test
        public void testRead() throws Exception {
            //读取文件的位置
            String path = "D:\\03版excel测试写入速度.xls";
            //获取文件输入流
            FileInputStream fileInputStream = new FileInputStream(path);
            //通过文件流创建(获取)工作簿,excel中的操作,Java基本都能实现,这里的新建的对象注意与excel版本对应
            Workbook workbook = new HSSFWorkbook(fileInputStream);
            //获取工作表sheet,0表示获取第一个sheet
            Sheet sheet = workbook.getSheetAt(0);
            //获取第一行数据
            Row row = sheet.getRow(0);
            //获取第一行第一个数据
            Cell cell = row.getCell(0);
            System.out.println(cell.getNumericCellValue());
        }
    

    这里可能很多人会输出报错,如下

    java.lang.IllegalStateException: Cannot get a xxx类型 value from a xxx类型 cell
    

    这是因为excel单元格的内容格式有很多比如:字符串类型、数字类型、日期类型等。
    我这里测试用的excel文件里的内容是数字型所以使用cell.getNumericCellValue()获取,如果是其他类型可cell.查看其他获取方法。

    实际使用可以使用for循环读取excel中所有数据,配合switch-case(也可以使用if-else if)对单元格数据类型进行判断,使用对应的获取方法进行获取。使用循环时常用的两个方法 1.sheet.getPhysicalNumberOfRows();获取工作表的行数
    2.row.getPhysicalNumberOfCells();获取每行的列数
    获取单元格类型的方法
    CellType cellType = cell.getCellType();
    进行类型判断方法,其他类型如下图可替换NUMERIC
    cellType.equals(CellType.NUMERIC)
    在这里插入图片描述

    更多相关内容
  • 使用poi读取excel内容

    2021-12-16 16:15:21
    使用poi读取excel内容 所需jar包
  • 下面小编就为大家带来一篇POI对Excel自定义日期格式的读取(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要给大家介绍了关于Poi读取Excel引发内存溢出问题的解决方法,文中通过示例代码介绍的非常详细,大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
  • 主要介绍了java使用poi读取ppt文件和poi读取excel、word示例,需要的朋友可以参考下
  • poi读取excel文件

    2018-09-27 15:11:16
    最新版poi 相关6个jar包 for java。Java读取Excel表格数据时(.xls、.xlsx 格式),需要引用的jar包 亲测as上可以读取到2010excel内容,内附读取源码
  • NULL 博文链接:https://yxhcquedu.iteye.com/blog/828707
  • excel文件中的内容通过java文件读取出来,包括总行数,列数,单元格内容,合并单元格,行高,列宽,图片等信息。
  • NULL 博文链接:https://qq-24665727.iteye.com/blog/2339730
  • 主要介绍了Java POI读取excel中数值精度损失问题解决,文中通过示例代码介绍的非常详细,大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • POI 读取Excel

    2019-04-18 01:20:59
    NULL 博文链接:https://username2.iteye.com/blog/1839515
  • 本案例中利用Apache Poi读取Excel用法,源码注释详细基本用法!
  • POI读取excel的内容.zip

    2021-02-28 16:50:00
    JAVA IO操作 POI读取excel的内容
  • android5使用poi读取excel

    2017-10-30 17:04:08
    android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel,android5使用poi读取excel
  • POI读取Excel大文件.rar

    2016-09-21 18:40:25
    POI处理Excel大文件的问题和解决方法 来自 http://itindex.net/detail/52291-poi-excel-%E6%96%87%E4%BB%B6
  • poi读取excel所需jar包,可用来使用poi读写word excel
  • 主要介绍了java如何利用POI读取Excel行数,文中通过示例代码介绍的非常详细,大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 使用POI读取Excel文件

    千次阅读 2022-06-17 17:31:01
    用户可以通过上传excel文件,后端通过读取excel文件的内容并将内容写入数据库中以便更好的使用。本文档使用的excel的工具类既可以读取有合并单元格的文件也可以读取没有合并单元格的文件,并且读取到单元格的数据...

    使用POI读取Excel文件

    一、前言

    用户可以通过上传excel文件,后端通过读取excel文件的内容并将内容写入数据库中以便更好的使用。

    本文档使用的excel的工具类既可以读取有合并单元格的文件也可以读取没有合并单元格的文件,并且读取到单元格的数据进行了一些处理。

    二、导入依赖

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

    三、Excel表格信息

    有合并单元格的文件

    在这里插入图片描述

    没有合并单元格的文件

    在这里插入图片描述

    四、读取Excel文件的自定义工具类

    package com.example.util;
    
    import lombok.extern.slf4j.Slf4j;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.springframework.stereotype.Component;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    /**
     * 读取Excel工具类
     */
    @Slf4j
    @Component
    public class ExcelUtils {
    
        /**
         * 1、将单元格的内容转换为字符串
         *
         * @param cell 单元格
         * @return 返回转换后的字符串
         */
        private static String convertCellValueToString(Cell cell) {
            //1.1、判断单元格的数据是否为空
            if (cell == null) {
                return null;
            }
            //1.2、设置单元格数据的初始值
            String cellValue = null;
            //1.3、获取单元格数据的类型
            switch (cell.getCellType()) {
                case NUMERIC:
                    //1.3.1、获取到单元格数据的格式
                    short dataFormat = cell.getCellStyle().getDataFormat();
                    if (DateUtil.isCellDateFormatted(cell)) {
                        SimpleDateFormat sdf = null;
                        //1.3.1.1、处理日期格式,根据不同日期长度去判断
                        switch (dataFormat) {
                            case 14:
                                sdf = new SimpleDateFormat("yyyy/MM/dd");
                                break;
                            case 21:
                                sdf = new SimpleDateFormat("HH:mm:ss");
                                break;
                            case 22:
                                sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                                break;
                        }
                        //1.3.1.2、处理时间格式
                        Date date = cell.getDateCellValue();
                        assert sdf != null;
                        cellValue = sdf.format(date);
                    } else if (dataFormat == 0) {
                        //1.3.2、处理普通数字格式
                        DecimalFormat format = new DecimalFormat("0");
                        double numericCellValue = cell.getNumericCellValue();
                        cellValue = format.format(numericCellValue);
                    }
                    break;
                case STRING:
                    //处理字符串类型
                    cellValue = cell.getStringCellValue();
                    break;
                case BOOLEAN:
                    //处理布尔类型
                    boolean booleanCellValue = cell.getBooleanCellValue();
                    cellValue = Boolean.toString(booleanCellValue);
                    break;
                case FORMULA:
                    //处理函数类型
                    cellValue = cell.getCellFormula();
                    break;
                case ERROR:
                    byte errorCellValue = cell.getErrorCellValue();
                    cellValue = Byte.toString(errorCellValue);
                    break;
                default:
                    break;
            }
            return cellValue;
        }
    
        /**
         * 2、处理合并单元格里面的数据
         *
         * @param sheet 工作薄
         * @return 返回合并单元格后里面的数据
         */
        public static List<CellRangeAddress> getCombineCell(Sheet sheet) {
            List<CellRangeAddress> list = new ArrayList<CellRangeAddress>();
            //2.1、获得一个 sheet 中合并单元格的数量
            int sheetMergerCount = sheet.getNumMergedRegions();
            //2.2、遍历合并单元格
            for (int i = 0; i < sheetMergerCount; i++) {
                //2.2.1、获得合并单元格加入list中
                CellRangeAddress rangeAddress = sheet.getMergedRegion(i);
                list.add(rangeAddress);
            }
            return list;
        }
    
        /**
         * 3、判断单元格是否为合并单元格
         *
         * @param listCombineCell 存放合并单元格的list
         * @param cell            需要判断的单元格
         * @param sheet           sheet
         */
        public static String isCombineCell(List<CellRangeAddress> listCombineCell, Cell cell, Sheet sheet) {
            //3.1、设置第一个单元格和最后一个单元格的值
            int firstColumn = 0;
            int lastColumn = 0;
            //3.2、设置第一个单元格和最后一个行的值
            int firstRow = 0;
            int lastRow = 0;
            //3.3、初始化单元格值
            String cellValue = null;
            for (CellRangeAddress rangeAddress : listCombineCell) {
                //3.3.1、获得合并单元格的起始行, 结束行, 起始列, 结束列
                firstColumn = rangeAddress.getFirstColumn();
                lastColumn = rangeAddress.getLastColumn();
                firstRow = rangeAddress.getFirstRow();
                lastRow = rangeAddress.getLastRow();
                //3.3.2、判断是不是合并单元格
                if (cell.getRowIndex() >= firstRow && cell.getRowIndex() <= lastRow) {
                    if (cell.getColumnIndex() >= firstColumn && cell.getColumnIndex() <= lastColumn) {
                        //3.3.2.1、获取行数据
                        Row fRow = sheet.getRow(firstRow);
                        //3.3.2.2、获取单元格数据
                        Cell fCell = fRow.getCell(firstColumn);
                        //3.3.2.3、对有合并单元格的数据进行格式处理
                        cellValue = convertCellValueToString(fCell);
                        break;
                    }
                } else {
                    //3.3.3、对没有合并单元格的数据进行格式处理
                    cellValue = convertCellValueToString(cell);
                }
            }
            //3.4、返回处理后的单元格数据
            return cellValue;
        }
    
        /**
         * 4、判断sheet页中是否有合并单元格
         *
         * @param sheet sheet
         * @return 返回值
         */
        private static boolean hasMerged(Sheet sheet) {
            int numMergedRegions = sheet.getNumMergedRegions();
            if (numMergedRegions > 0) {
                return true;
            } else {
                return false;
            }
        }
    
        /**
         * 5、读取excel文件内容
         *
         * @param inputStream 输入流
         * @return 返回值
         */
        public static List<Object[]> importExcel(InputStream inputStream) {
            //5.1、定义一个集合用来存储Object数据
            List<Object[]> list = new ArrayList<>();
            try {
                //5.2、创建工作薄
                Workbook workbook = WorkbookFactory.create(inputStream);
                //5.3、获取工作薄里面sheet的个数
                int sheetNum = workbook.getNumberOfSheets();
                //5.4、遍历每一个sheet
                for (int i = 0; i < sheetNum; i++) {
                    Sheet sheet = workbook.getSheetAt(i);
                    //5.4.1、获取sheet中有数据的行数
                    int rows = sheet.getPhysicalNumberOfRows();
                    for (int j = 0; j < rows; j++) {
                        //5.4.1.1、过滤掉文件的表头(视文件表头情况而定)
                        if (i == 1 || j == 0) {
                            continue;
                        }
                        //5.4.1.2、获取每一行的数据
                        Row row = sheet.getRow(j);
                        if (row == null) {
                            System.out.println("row is null");
                        } else {
                            //5.4.1.3、得到每一行中有效单元格的数据
                            int cells = row.getPhysicalNumberOfCells();
                            //5.4.1.4、定义一个Object数组用来存储读取单元格的数据
                            Object[] objects = new Object[cells];
                            //5.4.1.5、初始化对象数组的下标
                            int index = 0;
                            //5.4.1.6、遍历每一个有效的单元格数据
                            for (int k = 0; k < cells; k++) {
                                //5.4.1.6.1、获取每一个单元格的数据
                                Cell cell = row.getCell(k);
                                //5.4.1.6.2、判断当前sheet页是否合并有单元格
                                boolean b = hasMerged(sheet);
                                if (b) {
                                    //5.4.1.6.2.1、判断当前单元格是不是合并单元格,如果是则输出合并单元格的数据,不是则直接输出
                                    List<CellRangeAddress> listCombineCell = getCombineCell(sheet);
                                    String combineCell = isCombineCell(listCombineCell, cell, sheet);
                                    //5.4.1.6.2.1.2、对单元格的数据进行处理
                                    objects[index] = combineCell;
                                } else {
                                    String cellValueToString = convertCellValueToString(cell);
                                    objects[index] = cellValueToString;
                                }
                                //5.4.1.6.3、下标累加
                                index++;
                            }
                            //5.4.1.7、将对象数组里面的数据添加到list集合中去
                            list.add(objects);
                        }
                    }
                }
                log.info("导入文件解析成功!");
            } catch (Exception e) {
                log.info("导入文件解析失败!");
                e.printStackTrace();
                return null;
            };
            //5.5、返回List集合
            return list;
        }
    }
    
    

    五、测试

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("F:\\有合并单元格.xlsx");
        InputStream inputStream = new FileInputStream(file);
        List<Object[]> objects = ExcelUtils.importExcel(inputStream);
        assert objects != null;
        for (Object[] object : objects) {
            System.out.println(object[0] + "\t" + object[1] + "\t" + object[2]);
        }
    }
    
    展开全文
  • java 使用POI读取excel数据

    千次阅读 2021-03-08 20:47:16
    原文:http://doc.okbase.net/0201zcr/archive/161440.html一、定义Apache POI是Apache软件基金会的...二、所需jar包:三、简单的一个读取excel的demo1、读取文件方法/*** 读取出filePath中的所有数据信息* @param f...

    原文:http://doc.okbase.net/0201zcr/archive/161440.html

    一、定义

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

    二、所需jar包:

    0d89e45bbe4ff0f399d340056387ed62.png

    三、简单的一个读取excel的demo

    1、读取文件方法

    /**

    * 读取出filePath中的所有数据信息

    * @param filePath excel文件的绝对路径

    *

    */

    public static void getDataFromExcel(String filePath)

    {

    //String filePath = "E:\\123.xlsx";

    //判断是否为excel类型文件

    if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx"))

    {

    System.out.println("文件不是excel类型");

    }

    FileInputStream fis =null;

    Workbook wookbook = null;

    try

    {

    //获取一个绝对地址的流

    fis = new FileInputStream(filePath);

    }

    catch(Exception e)

    {

    e.printStackTrace();

    }

    try

    {

    //2003版本的excel,用.xls结尾

    wookbook = new HSSFWorkbook(fis);//得到工作簿

    }

    catch (Exception ex)

    {

    //ex.printStackTrace();

    try

    {

    //2007版本的excel,用.xlsx结尾

    wookbook = new XSSFWorkbook(fis);//得到工作簿

    } catch (IOException e)

    {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    //得到一个工作表

    Sheet sheet = wookbook.getSheetAt(0);

    //获得表头

    Row rowHead = sheet.getRow(0);

    //判断表头是否正确

    if(rowHead.getPhysicalNumberOfCells() != 3)

    {

    System.out.println("表头的数量不对!");

    }

    //获得数据的总行数

    int totalRowNum = sheet.getLastRowNum();

    //要获得属性

    String name = "";

    int latitude = 0;

    //获得所有数据

    for(int i = 1 ; i <= totalRowNum ; i++)

    {

    //获得第i行对象

    Row row = sheet.getRow(i);

    //获得获得第i行第0列的 String类型对象

    Cell cell = row.getCell((short)0);

    name = cell.getStringCellValue().toString();

    //获得一个数字类型的数据

    cell = row.getCell((short)1);

    latitude = (int) cell.getNumericCellValue();

    System.out.println("名字:"+name+",经纬度:"+latitude);

    }

    }

    2、测试

    public static void main(String[] args)

    {

    getDataFromExcel("E:"+ File.separator +"123.xlsx");

    }

    3、原始数据

    2d99a15ef8e66cd62ce6836d7fc219b5.png

    4、结果

    名字:A1,经纬度:1

    名字:A2,经纬度:2

    名字:A3,经纬度:3

    名字:A4,经纬度:4

    名字:A5,经纬度:5

    名字:A6,经纬度:6

    名字:A7,经纬度:7

    名字:A8,经纬度:8

    名字:A9,经纬度:9

    名字:A10,经纬度:10

    名字:A11,经纬度:11

    JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

    使用poi读取excel数据示例

    使用poi读取excel数据示例 分两种情况: 一种读取指定单元格的值 另一种是读取整行的值 依赖包: org.apache.poi ...

    Java POI读取Excel数据&comma;将数据写入到Excel表格

    1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

    java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

    POI读取Excel数据

    POI读取Excel表格数据 * {所需相关jar下载: * commons-collections4-4.4.jar * commons-compress-1.19.jar * poi-4.1.1. ...

    poi——读取excel数据

    单元格类型 读取Excel数据 package com.java.test.poi; import java.io.File; import java.io.FileInputStream; impo ...

    java 使用poi 导入Excel 数据到数据库

    由于我个人电脑装的Excel是2016版本的,所以这地方我使用了XSSF 方式导入 . 1先手要制定一个Excel 模板 把模板放入javaWeb工程的某一个目录下如图: 2模板建好了后,先实现模板下 ...

    java通过poi读取excel中的日期类型数据或自定义类型日期

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...

    随机推荐

    WPF自定义控件第一 - 进度条控件

    本文主要针对WPF新手,高手可以直接忽略,更希望高手们能给出一些更好的实现思路. 前期一个小任务需要实现一个类似含步骤进度条的控件.虽然对于XAML的了解还不是足够深入,还是摸索着做了一个.这篇文章介 ...

    20-ES6(3)class基本语法

    # Class基本语法 关于es6的class简介: ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以 ...

    Redis使用及优化入门

    Redis的优势 MySQL读写慢,Redis内存数据库,读写速度快. 少量的数据要经常读写,尤其是读操作,读写速度要求高. 丰富的数据结构,Redis支持5种数据结构,MySQL字段变化,需要手动维 ...

    css使 同一行内的 文字和图片 垂直居中对齐&quest;

    设置父容器, 使 父容器 div 下的所有元素 都 垂直对齐: father-container *{ vertical-align:middle 找回密码

    虚拟机Linux 的一些基础命令和注释

    cd命令 cd    ==回到初始,主目录 cd -  ==回到上一级目录交替 cd ~ ==回到root家目录 cd .  ==当前目录 cd .. ==进入上一级目录 ls命令 ls     == ...

    ProjectEuler 做题记录

    退役选手打发时间的PE计划 挂在这里主要是dalao们看到有什么想交流的东西可以私聊哦(站内信或邮箱吧)~~当然现在高三也不怎么能上网. 2017/8/11  595 :第一题QAQ 2017/8/1 ...

    Windows Server 2016-系统安装软硬件要求

    本章为大家补充介绍安装 Windows Server 2016的最低系统要求. 如果安装时选择通过"服务器核心"选项进行安装,则应注意,没有安装任何 GUI 组件,并且将不能使用服 ...

    多任务Forth系统内存布局

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

    &lbrack;IOI2014&rsqb; 假期

    Description 有\(N(N\leq 10^5)\)个排列在一条线上的城市,每个城市有\(val_i\)个景点.每天你可以选择在当前城市\(i\)游览景点,或者前往城市\(i-1\)或城市\( ...

    tflite笔记

    固化模型 方法一:freeze_graph方法 把tf.train.write_graph()生成的pb文件与tf.train.saver()生成的chkp文件固化之后重新生成一个pb文件 with ...

    展开全文
  • 主要介绍了使用POI读取EXCEL文件的方法,代码大家可以参考使用
  • JAVA_poi读取Excel.pdf

    2021-10-07 11:37:26
    JAVA_poi读取Excel.pdf
  • spark-excel:一个用于通过Apache POI读取Excel文件的Spark插件
  • java使用poi读取excel

    2022-06-30 16:05:54
    使用poi读取excel文件

    注:对于一些数据量小的excel使用什么插件都可以,但是大的数据量都建议使用poi,因为内存消耗会非常高。一般推荐使用EasyExcel 。

    导入pom

    <properties>
        <java.version>1.8</java.version>
            <poi.version>4.1.2</poi.version>
        </properties>
    <dependencies>
        <!--excel操作框架-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>${poi.version}</version>
        </dependency>
    
        <!-- 读取大量excel数据时使用 -->
        <dependency>
            <groupId>com.monitorjbl</groupId>
            <artifactId>xlsx-streamer</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
    

    方法一

    package com.fmz.demofmztest.testUtil;
    
    import org.apache.poi.ss.usermodel.CellType;
    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 java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Objects;
    
    /**
     * @Description: 常规POI读取
     * 只能读取 xlsx 格式文件
     * @Author yizhixiansheng
     * @Date 2022/6/20
     */
    public class ReadExcel {
        public static void main(String[] args) throws Exception {
            long t1 = System.currentTimeMillis();
            excel("C:\\Users\\88999\\Desktop\\临时文件夹\\活动数据提取表.xlsx",1,0);
            long t2 = System.currentTimeMillis();
    
            System.out.println((t2-t1) + "毫秒");
        }
    
        /**
         * 读取excel,含列头名称
         * @param filePath xlsx 格式文件 路径
         * @param sheetIndex sheet标签页下标  从0开始
         * @param titleRowIndex 默认第一行为列头名称
         * @return void
         * @author yizhixiansheng
         * @create 2022/6/20
         **/
        public static void excel(String filePath,int sheetIndex,int titleRowIndex) throws Exception {
            File file = new File(filePath);
            if (!file.exists()){
                throw new Exception("文件不存在!");
            }
            InputStream in = new FileInputStream(file);
            // 读取整个Excel
            XSSFWorkbook sheets = new XSSFWorkbook(in);
            if(Objects.isNull(sheets)){
                throw new Exception("读取Excel异常!");
            }
            // 获取指定表单Sheet
            XSSFSheet sheetAt = sheets.getSheetAt(sheetIndex);
            // 获取指定默认标题行
            XSSFRow titleRow = sheetAt.getRow(titleRowIndex);
            // 循环获取每一行数据
            for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {
                XSSFRow row = sheetAt.getRow(i);
                // 读取每一格内容
                StringBuilder sb = new StringBuilder();
                for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {
                    XSSFCell titleCell = titleRow.getCell(index);
                    XSSFCell cell = row.getCell(index);
                    cell.setCellType(CellType.STRING);
                    if (null == cell.getStringCellValue() || "".equals(cell.getStringCellValue())) {
                        continue;
                    }
                    sb.append(cell);
                }
                System.out.println(i + "\t" + sb);
            }
        }
    
        /**
         * 读取excel
         * @param filePath xlsx 格式文件 路径
         * @param sheetIndex sheet标签页下标  从0开始
         * @return void
         * @author yizhixiansheng
         * @create 2022/6/20
         **/
        public static void excel(String filePath,int sheetIndex) throws Exception {
            File file = new File(filePath);
            if (!file.exists()){
                throw new Exception("文件不存在!");
            }
            InputStream in = new FileInputStream(file);
            // 读取整个Excel
            XSSFWorkbook sheets = new XSSFWorkbook(in);
            if(Objects.isNull(sheets)){
                throw new Exception("读取Excel异常!");
            }
            // 获取指定表单Sheet
            XSSFSheet sheetAt = sheets.getSheetAt(sheetIndex);
            // 循环获取每一行数据
            for (int i = 0; i < sheetAt.getPhysicalNumberOfRows(); i++) {
                XSSFRow row = sheetAt.getRow(i);
                // 读取每一格内容
                StringBuilder sb = new StringBuilder();
                for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {
                    XSSFCell cell = row.getCell(index);
                    cell.setCellType(CellType.STRING);
                    if (null == cell.getStringCellValue() || "".equals(cell.getStringCellValue())) {
                        continue;
                    }
                    sb.append(cell);
                }
                System.out.println(i + "\t" + sb);
            }
        }
    }
    
    

    方法二

    package com.fmz.demofmztest.testUtil;
    
    import com.monitorjbl.xlsx.StreamingReader;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @Description: 大文件excel读取
     * 只能读取 xlsx 格式文件
     * @Author yizhixiansheng
     * @Date 2022/6/20
     */
    public class ReadBigExcel {
        public static Map<String, List<String>> test(File file) throws Exception{
            FileInputStream in = new FileInputStream(file);
            Map<String,List<String>> mapData = new HashMap<String, List<String>>();
            Workbook wk = StreamingReader.builder()
                    .rowCacheSize(100)  //缓存到内存中的行数,默认是10
                    .bufferSize(4096)  //读取资源时,缓存到内存的字节大小,默认是1024
                    .open(in);  //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件
            int sheetNums = wk.getNumberOfSheets();
            for(int i = 0 ; i < sheetNums;i ++){
                List<String> sheetData = new ArrayList<String>();
                Sheet sheet = wk.getSheetAt(i);
                String sheetName = wk.getSheetName(i);
                //遍历所有的行
                int k = 0;
                for (Row row : sheet) {
                    StringBuilder sb = new StringBuilder();
                    //遍历所有的列
                    for (Cell cell : row) {
                        sb.append(cell.getStringCellValue());
                    }
                    System.out.println(k++ + "\t" + sb.toString());
                }
    
    
            }
            return mapData;
        }
    
        public static void main(String[] args) throws Exception {
            File file = new File("C:\\Users\\88999\\Desktop\\临时文件夹\\活动数据提取表.xlsx");
            long t1 = System.currentTimeMillis();
            test(file);
            long t2 = System.currentTimeMillis();
    
            System.out.println((t2-t1)/1000 + "秒");
    
        }
    }
    
    

    结果

    在这里插入图片描述

    展开全文
  • apache POI 读取 Excel

    2019-03-01 16:44:13
    apache poi 读取 Excel 的 jar 包 博文链接:https://wxinpeng.iteye.com/blog/231895
  • Java使用POI读取Excel

    2012-08-20 22:33:48
    使用Java使用POI读取Excel,并且解决了合并单元格的读取
  • poi读取Excel内容

    2022-01-26 14:16:42
    工作中经常会用的Excel数据读取用来页面展示和数据存储 以下为Springboot部分代码 package com.example.excel.controller; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss....
  • poi读取Excel2007文件

    2019-03-24 02:19:32
    NULL 博文链接:https://jumpman.iteye.com/blog/1094537
  • 利用poi读取excel

    2018-05-25 16:53:37
    工具类需要poi jar 请自行下载 File xlsfile = new File(path); String[][] data = null; try { data = FileUtil.getData(xlsfile, 2); } catch (Exception e) { e.printStackTrace(); }
  • 最近有同事问到在Java程序中poi读取excel怎么做,虽然以前写过,但是最近没用到就差不多忘了,俗话说好记性不如烂笔头,趁现在有空,特此记录一下。 项目使用的是springBoot,shou'x
  • 使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,880
精华内容 14,352
关键字:

poi读取excel