精华内容
下载资源
问答
  • 建议大家都多看看官方文档,上面写的很详细,一般在Quick Guide可以快速的学会使用此工具 参考网址:http://poi.apache.org/spreadsheet/quick-guide.html ...import org.apache.poi.openxml4...
    建议大家都多看看官方文档,上面写的很详细,一般在Quick Guide可以快速的学会使用此工具
    
    参考网址:http://poi.apache.org/spreadsheet/quick-guide.html
    import java.io.FileInputStream;
    import java.io.IOException;

    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    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.ss.usermodel.WorkbookFactory;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;


    public class Test {

    public void get(String filePath) throws IOException, InvalidFormatException{

    //把文件写入工作流中。
    FileInputStream inp = new FileInputStream(filePath);
    //通过WorkbookFactory创建Workbook
    Workbook wb = WorkbookFactory.create(inp);
    //获得sheet的数量
    int sheetNumber = wb.getNumberOfSheets();
    for(int i=0; i<sheetNumber; i++){
    //逐个获得sheet标签
    Sheet sheet = wb.getSheetAt(i);
    //通过sheet读取所有row(行)
    for(Row row : sheet){
    // Sheet sheet = wb.getSheetAt(0);
    // for (Row row : sheet) {
    //for (Cell cell : row) {
    // Do something here
    //}
    //}
    //上面这种方法在for(Cell cell:row)中直接把null值过滤掉
    //通过row获得cell的数量
    int cellNumber = row.getLastCellNum();
    for(int j=0; j<cellNumber; j++){
    Cell cell = null;
    cell = row.getCell((short)j);
    if(cell==null){
    System.out.println("此处为0");
    }else{
    switch(cell.getCellType()){
    case Cell.CELL_TYPE_STRING :
    System.out.println(cell.getRichStringCellValue());
    if(cell.getCellComment()!=null){
    System.out.println(cell.getCellComment().getString().toString());
    }
    break;
    case Cell.CELL_TYPE_NUMERIC :
    if(DateUtil.isCellDateFormatted(cell)){
    System.out.println(cell.getDateCellValue());
    }else{
    System.out.println(cell.getNumericCellValue());
    }
    if(cell.getCellComment()!=null){
    System.out.println(cell.getCellComment().getString().toString());
    }
    break;
    case Cell.CELL_TYPE_BOOLEAN:
    System.out.println(cell.getBooleanCellValue());
    if(cell.getCellComment()!=null){
    System.out.println(cell.getCellComment().getString().toString());
    }
    break;
    case Cell.CELL_TYPE_FORMULA:
    System.out.println(cell.getCellFormula());
    if(cell.getCellComment()!=null){
    System.out.println(cell.getCellComment().getString().toString());
    }
    break;
    default:
    System.out.println();
    }
    }
    }
    }
    }
    }



    public static void main(String[] args){
    Test demo = new Test();
    try {

    demo.get("E:/123456.xlsx");

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }catch (InvalidFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }
    展开全文
  • java poi 读取单元格null者空字符串

    千次阅读 2020-05-15 12:15:58
    Cell cell = row.getCell(j, Row.RETURN_BLANK_AS_NULL); 需求 :策划同学填写的单元格有时为null 有时为空串 分条件处理 getcell 可以传入指定的策略 根据需求拿到结果分需处理
     Cell cell = row.getCell(j, Row.RETURN_BLANK_AS_NULL);
    

    需求 :策划同学填写的单元格有时为null 有时为空串 分条件处理
    在这里插入图片描述

    getcell 可以传入指定的策略 根据需求拿到结果分需处理

    展开全文
  • //下列步骤为判断cell读取到的数据是否为null 如果不做处理 程序会报错 String cell = null; //如果未null则加上""组装成非null的字符串 if(row.getCell(j) == null){ cell = row....
    /**
     * 
     * 读写excel
     * 
     */
    
    public class RWExcel {
    	
    	private String filePath;
    	private int sheetNum = 0;
    	
    	/**
    	 * 构造方法
    	 * */
    	
    	public RWExcel(String filePath,int sheetNum){
    		
    		this.filePath = filePath;
    		this.sheetNum = sheetNum;
    	}
    
    	/**
    	 * 
    	 * 读取excel 封装成集合
    	 * 该程序需要传入一份excel 和excel的列数 行数由程序自动检测
    	 * 注意:该方法统计的行数是默认第一行为title 不纳入统计的
    	 * 
    	 * @return
    	 * 
    	 */
    	// @Test
    	public ArrayList<List> ReadExcel() {
    
    		// int column = 5;//column表示excel的列数
    
    		ArrayList<List> list = new ArrayList<List>();
    
    		try {
    			// 建需要读取的excel文件写入stream
    			HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filePath));
    			// 指向sheet下标为0的sheet 即第一个sheet 也可以按在sheet的名称来寻找
    			HSSFSheet sheet = workbook.getSheetAt(sheetNum);
    			// 获取sheet1中的总行数
    			int rowTotalCount = sheet.getLastRowNum();
    			//获取总列数
    			int columnCount = sheet.getRow(0).getPhysicalNumberOfCells();
    			
    			System.out.println("行数为:"+rowTotalCount+"列数为:"+columnCount);
    
    			for (int i = 0; i <= rowTotalCount; i++) {
    				// 获取第i列的row对象
    				HSSFRow row = sheet.getRow(i);
    				
    				ArrayList<String> listRow = new ArrayList<String>();
    
    				for (int j = 0; j < columnCount; j++) {
    					//下列步骤为判断cell读取到的数据是否为null 如果不做处理 程序会报错
    					String cell = null;
    					//如果未null则加上""组装成非null的字符串
    					if(row.getCell(j) == null){
    						
    						cell = row.getCell(j)+"";
    						
    						listRow.add(cell);
    					//如果读取到额cell不为null 则直接加入	listRow集合
    					}else{
    						cell = row.getCell(j).toString();
    						listRow.add(cell);
    					}
    					// 在第i列 依次获取第i列的第j个位置上的值 %15s表示前后间隔15个字节输出
    					System.out.printf("%15s", cell);
    
    				}
    
    				list.add(listRow);
    
    				System.out.println();
    			}
    
    		} catch (FileNotFoundException e) {
    
    			e.printStackTrace();
    		} catch (IOException e) {
    
    			e.printStackTrace();
    		}
    
    		return list;
    	}
    	
    	/**
    	 * 调试方法
    	 * */
    
    	public static void main(String[] args) {
    
    		 ArrayList<List> arrayList = new RWExcel("D:\\345.xls", 0).ReadExcel();
    		 
    		 for (List list : arrayList) {
    			
    			 System.out.println(list.toString());
    		}
    		
    	}
    }
    

    展开全文
  • poi读取Excel

    2019-05-13 21:52:13
    用原生poi读取文件: @RunWith(BlockJUnit4ClassRunner.class) public class PoiReadExcel { public String getCellStringValue(Cell cell) { String cellValue = ""; if (cell == null) return null;/...

    用原生poi读取文件:

    @RunWith(BlockJUnit4ClassRunner.class)
    public class PoiReadExcel {
        public String getCellStringValue(Cell cell) {
            String cellValue = "";
            if (cell == null) return null;//cell不编辑则获取的cell为null
            switch (cell.getCellType()) {
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case NUMERIC:
                    if (DateUtil.isADateFormat(ExcelNumberFormat.from(cell.getCellStyle()))) {
                        Date date = cell.getDateCellValue();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
                        cellValue = simpleDateFormat.format(date);
                    } else {
                        cellValue = String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                case FORMULA:
                    cell.setCellType(CellType.NUMERIC);
                    cellValue = String.valueOf(cell.getNumericCellValue());
                    break;
                case BOOLEAN:
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case ERROR:
                    cellValue = String.valueOf(cell.getErrorCellValue());
                    break;
                case BLANK:
                    break;
                case _NONE:
                    break;
                default:
                    break;
            }
            return cellValue;
        }

        @Test
        public void testBaseRead() {
            List<Area> areaList = new ArrayList();
            try (FileInputStream fileInputStream = new FileInputStream("C:\\Users\\ljj\\Desktop\\test.xlsx");
                 XSSFWorkbook hssfWorkbook = new XSSFWorkbook(fileInputStream)) {
                XSSFSheet sheet = hssfWorkbook.getSheetAt(0);//按照sheet索引读取
                for (Row row : sheet) {
                    if (row.getRowNum() == 0) {
                        continue;
                    }
                    String areaNumber = this.getCellStringValue(row.getCell(0));
                    String province = this.getCellStringValue(row.getCell(1));
                    String city = this.getCellStringValue(row.getCell(2));
                    String areaStr = this.getCellStringValue(row.getCell(3));
                    String postCode = this.getCellStringValue(row.getCell(4));
                    Area area = new Area();
                    area.setAreaNumber(areaNumber);
                    area.setProvince(province);
                    area.setCity(city);
                    area.setArea(areaStr);
                    area.setPostCode(postCode);
                    areaList.add(area);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.err.println(JSON.toJSONString(areaList, true));
        }
    }

    下面测试类型均已经通过:

    单元格合并:读取的值只有左上角单元格值为qy006,其他都是空串(不是null)

     

     

    读取单元格值和单元格的本身格式(字体颜色,字体大小,字体,背景色,字体色,对齐方式,下划线....)无关,
    但是如果单元格没有值,却设置了格式,那么获取到的值不是null,是为空串。如果清除格式不进行编辑那么此cell是null。

     


    获取有效行和有效单元格数,作为循环的边界:
    row.getLastCellNum=5(不是4) (i=0;i<5;i++)
    sheet.getLastRowNum=7(不是8)

    中间有空行情况:

    for (Row row : sheet) {//下面没有内容后,下面的行不会再循环。底层是for循环(sheet.getLastRowNum为界限)
        int cellnum=row.getLastCellNum();
        for (int i = 0; i < cellnum; i++) {//中间空行的row.getLastCellNum=-1;所以直接就下一行了。
        String str=this.getCellStringValue(row.getCell(i));
            System.err.println("str = " + str);
        }
    }

    读取excel改进:读取所有数据,并不关心excel是横着存放的还是竖着存放的......,最后根据需求组合数据即可

    package com.blog.poi.vo;

    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;

    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.*;

    public class ExcelService {

        /**
         * 默认读取第一个sheet:并且默认从第一行开始读取
         *
         * @param inputStream
         * @param fileName
         * @return
         * @throws Exception
         */
        public static List<Map<Integer, String>> getListByExcel(InputStream inputStream, String fileName) throws Exception {
            return getListByExcel(inputStream, fileName, 0, null, 0);
        }

        /**
         * 根据开始行读取
         *
         * @param inputStream
         * @param fileName
         * @param beginRowNum
         * @return
         * @throws Exception
         */

        public static List<Map<Integer, String>> getListByExcelBeginRowNum(InputStream inputStream, String fileName, Integer beginRowNum) throws Exception {
            return getListByExcel(inputStream, fileName, 0, null, beginRowNum);
        }

        /**
         * 指定sheetName和beginRowNum读取
         *
         * @param inputStream
         * @param fileName
         * @param sheetName
         * @param beginRowNum
         * @return
         * @throws Exception
         */
        public static List<Map<Integer, String>> getListByExcelSheetNameAndBeginRowNum(InputStream inputStream, String fileName, String sheetName, Integer beginRowNum) throws Exception {
            return getListByExcel(inputStream, fileName, null, sheetName, beginRowNum);
        }

        /**
         * 指定sheetIndex和beginRowNum读取
         *
         * @param inputStream
         * @param fileName
         * @param sheetIndex
         * @param beginRowNum
         * @return
         * @throws Exception
         */
        public static List<Map<Integer, String>> getListByExcelSheetIndexAndBeginRowNum(InputStream inputStream, String fileName, Integer sheetIndex, Integer beginRowNum) throws Exception {
            return getListByExcel(inputStream, fileName, sheetIndex, null, beginRowNum);
        }

        /**
         * 根据不同类型的单元格获取String类型的值
         *
         * @param cell
         * @return
         */
        private static String getCellStringValue(Cell cell) {
            String cellValue = "";
            if (cell == null) return null;//cell不编辑则获取的cell为null
            switch (cell.getCellType()) {
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case NUMERIC:
                    if (DateUtil.isADateFormat(ExcelNumberFormat.from(cell.getCellStyle()))) {
                        Date date = cell.getDateCellValue();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
                        cellValue = simpleDateFormat.format(date);
                    } else {
                        cellValue = String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                case FORMULA:
                    cellValue = cell.getCellFormula();
                    break;
                case BOOLEAN:
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case ERROR:
                    cellValue = String.valueOf(cell.getErrorCellValue());
                    break;
                case BLANK:
                    break;
                case _NONE:
                    break;
                default:
                    break;
            }
            return cellValue;
        }

        /**
         * 根据版本获取不同的workbook
         *
         * @param inputStream
         * @param fileName
         * @return
         * @throws Exception
         */
        private static Workbook getWorkBookByExcelFile(InputStream inputStream, String fileName) throws Exception {
            try {
                Workbook workbook = null;
                fileName = fileName.substring(fileName.lastIndexOf("."));
                if (".xls".equalsIgnoreCase(fileName)) {
                    workbook = new HSSFWorkbook(inputStream);
                } else if (".xlsx".equalsIgnoreCase(fileName)) {
                    workbook = new XSSFWorkbook(inputStream);
                }
                return workbook;
            } catch (Exception e) {
                throw new Exception("根据excel版本生成工作簿发生异常", e);
            }
        }

        /**
         * 解析Excel
         *
         * @param inputStream
         * @param fileName
         * @param sheetIndex
         * @param sheetName
         * @param beginRowNum
         * @return
         * @throws Exception
         */
        private static List<Map<Integer, String>> getListByExcel(InputStream inputStream, String fileName, Integer sheetIndex, String sheetName, Integer beginRowNum) throws Exception {
            try (Workbook workbook = getWorkBookByExcelFile(inputStream, fileName)) {
                List<Map<Integer, String>> mapList = new ArrayList<>();
                Sheet sheet = null;
                if (StringUtils.isNotBlank(sheetName)) {
                    sheet = workbook.getSheet(sheetName);
                } else {
                    sheet = workbook.getSheetAt(sheetIndex);
                }
                for (Row row : sheet) {
                    if (row.getRowNum() < beginRowNum) {
                        continue;
                    }
                    Map<Integer, String> map = new HashMap<>();
                    int cellNum = row.getLastCellNum();
                    for (int i = 0; i < cellNum; i++) {
                        String cellValue = getCellStringValue(row.getCell(i));
                        map.put(i, cellValue);
                    }
                    mapList.add(map);
                }
                return mapList;
            } catch (Exception e) {
                throw new Exception("获取数据list发生异常", e);
            }
        }

    }

     


     

    展开全文
  • POI读取Excel封装

    万次阅读 2019-08-02 17:33:46
    POI读取Excel进行了一个简单封装,代码如下: package com.aline.zkdm; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss....
  • POI读取Excel

    2017-04-21 09:20:43
    POI读取Excel文件
  • POI读取加密Excel

    千次阅读 2018-09-04 23:26:11
    1.POI读取加密Excel功能 2.解决办法 2.1安装JCE Unlimited 2.1.1 方案 2.1.2 结果 2.1.3 原因 2.2.Reflection 2.2.1 方案 2.2.2 结果 2.2.3 注意 参考文献 摘要 解决POI读取加密Excel文件时报的 ...
  • poi读取excel.java读取excel 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....
  • import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.util.StringUtils; /** * 读取上传Excel数据 * @author   * */ public class ReadPlansInfoExcel { static XSSFRow...
  • poi读取excel

    2019-03-25 10:38:44
    一、poi读取excel public static void main(String[] args) throws Exception{ // String pathName = "/Users/mac/Documents/work/record/datacenter/dc-wmq-resource/commands.xls"; String pathName...
  • POI 读取Excel

    2019-04-18 01:20:59
    NULL 博文链接:https://username2.iteye.com/blog/1839515
  • POI读取EXCEL

    千次阅读 2016-06-14 11:59:31
    POI读取EXCEL教程 一、Excel基础 二、HSSF概况 三、通过usermodel读取文件 四、通过usermodel写入文件 五、通过eventusermodel读取文件 六、HSSF电子表格结构 七、通过HPSF读取文档属性 八、文档摘要...
  • 利用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(); }
  • poi 读取excel row.getCell() 为null

    千次阅读 2019-03-29 23:30:00
    ##### getCell()为null 科目 余额 1 利息 1000 2 60 3 现金 10000 表格第一个单元为空时getCell()为null,直接使用会出现空指针异常 转载于:https://www.cnblogs.com/luo-bo/p/10624822.html...
  • poi读取Excel文件

    2018-03-02 18:16:27
    前段时间在做poi读取Excel,百度了很多人的方法,在实际运行中都会出现列读取为空或者行读取为空的BUG,所以干脆对照着POI的API文档自己写了一个工具类,使用我这个工具类需要引入poi-ooxml-3.8-20120326.jar以及...
  • POI读取excel某个单元格内容

    千次阅读 2017-05-22 15:27:01
    POI读取excel某个单元格内容
  • JAVA POI读取Excel中Cell为null的处理

    千次阅读 2018-08-29 10:04:06
    空数据:没有任何编辑过的单元格(非空格) 有时候我们需要对根据每一列的信息进行处理,这里就会出现易错的缺陷。 1.不需要这些空数据 row = sheet.getRow(i); for (Cell c : row) { ...j+...
  • poi读取Excel日期为数字的解决方法

    千次阅读 2020-12-30 09:41:59
    解决poi读取Excel读出数字的问题,完整代码及数据
  • JAVA POI读取XML

    千次阅读 2019-05-16 23:19:15
    JAVA POI读取XML package com.sunland.poi; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; ...
  • poi读取excel文件

    2015-04-17 09:48:03
    poi读取excel文件,需要引入poi相关的jar包:poi-3.8.jar、poi-ooxml-3.8.jar、poi-ooxml-schemas-3.8.jar、xmlbeans-2.3.0.jar、stax-api-1.0.1.jar package com.utils.poi; import java.util.ArrayList; import ...
  • 利用POI读取Excel文件

    2015-02-16 20:02:33
    前几天实现了利用POI创建Excel文件,今天分享一下如何利用POI读取Excel文件。 要读取的文件内容,以下截图已给出: 下面讲读取文件内容的方法。 先创建一个读取Excel的工具类。 /** * 操作Excel表格的功能...
  • poi 读取excel

    2016-05-31 10:53:51
    读取excel,首先需要下载POI的jar,可以去官网下,也可以在这里下载 一、简单说明 excel2003和excel2007区别比较大,最直观的感受就是扩展名不一样,哈哈 不过,使用POI的API都是面向接口编程的,实际使用...
  • poi读取word

    2017-12-21 23:17:34
    有一个新的需求读取world文件将数据导入数据库中 核心思路:  通过poi 使用流通过循环遍历表格中的数据,在通过数组得到对应的数据转换为对象,存储到数据库中 package poi_test; import org.apache...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,225
精华内容 6,890
关键字:

poi读取null