精华内容
下载资源
问答
  • Java使用poi实现excel导入导出,导入导出已做成通用方法,内附说明文档
  • java导入excel的工具类。支持单个对象的赋值,列表对象的赋值,指定坐标的赋值。主要利用的是poi的技术,java反射和自定义注解。 20170915,解决了不能导入带有公式字段的excel的问题
  • Java POI 导入导出Excel简单实例源代码

    千次下载 热门讨论 2014-08-28 16:25:39
    Java POI 导入导出Excel简单实例源代码 该源代码的jar包,参见以下博文附录截图 Java POI导出EXCEL经典实现 Java导出Excel弹出下载框 http://blog.csdn.net/evangel_z/article/details/7332535 web页面导出Excel...
  • 主要给大家介绍了关于在java poi导入Excel通用工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 1、需要的maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>p...

    1、需要的maven依赖

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.13</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>

    2、后端代码配置

        包含入参,file转Excel文件,及Excel文件内容基本解析(仅参考)

    import java.io.IOException;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    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 org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.util.Assert;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.alibaba.fastjson.JSON;
    
    @RestController
    public class TestController {
    
        @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    	public void importExcel(MultipartFile file) throws Exception {
    		// file为上传的后台接收到的前端文件,文件名称可访问,内容为字节数据需要转成POI专属的Workbook对象进行内容数据获取
    		Assert.notNull(file, "上传文件不能为空");
    		
    		// 将输入的file文件转成POI的Excel文件对象Workbook
    		String fileName = file.getOriginalFilename(); // 获取文件名
    		Workbook workbook = null;
    		if (StringUtils.endsWithIgnoreCase(fileName, "XLS")) {
    			try {
    				workbook = new HSSFWorkbook(file.getInputStream()); // XLS类型,2003Excel版本
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		} else if (StringUtils.endsWithIgnoreCase(fileName, "XLSX")) {
    			try {
    				workbook = new XSSFWorkbook(file.getInputStream()); // XLSX类型,2007Excel版本
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		} else {
    			System.out.println("文件类型不符,不是Excel文件 ");
    		}
    		
    		// 解析Workbook对象,获取上传Excel内容(实际中,上传Excel文件需要按照指定规范编写上传)
    		// 得到一个Sheet工作表
    		Sheet sheet = workbook.getSheetAt(0);
    		System.out.println("sheet:"+JSON.toJSONString(sheet));
    		// 获得Sheet工作表的数据总行数(第0行开始)
    		int totalRowNum = sheet.getLastRowNum();
    		System.out.println("总行数totalRowNum:"+totalRowNum);
    		// 获取当前sheet的第一行
    		Row row1 = sheet.getRow(0);
    		System.out.println("row1:"+JSON.toJSONString(row1));
    		// 获取当前sheet的第二行
    		Row row2 = sheet.getRow(1);
    		System.out.println("row2:"+JSON.toJSONString(row2));
    		// 获取当前sheet的第二行总列数(第1列开始)
    		int physicalNumberOfCells = row2.getPhysicalNumberOfCells();
    		System.out.println("获得第二行的总列数physicalNumberOfCells:"+physicalNumberOfCells);
    		// 获取第二行的第一个cell
    		Cell cell = row2.getCell(0);
    		System.out.println("第二行第一列cell:"+cell);
    		// 获取cell的数据类型
    		int cellType = cell.getCellType();
    		System.out.println("cellType:"+JSON.toJSONString(cellType));
    		// 获取cell的数据,需要根据类型选择调用以下的方法
    		// cell类型为String,获取内容
    		String stringCellValue = cell.getStringCellValue();
    		System.out.println("stringCellValue:"+JSON.toJSONString(stringCellValue));
    		// cell类型为数字,获取内容
    //		double numericCellValue = cell.getNumericCellValue();
     		cell类型为布尔型,获取内容
    //		boolean booleanCellValue = cell.getBooleanCellValue();
    	}
    }

    3、接口调用及测试

    导入excel文件入下

    后台获取响应

    展开全文
  • * excel文本转换 * @param cell * @return */ public static String parseCell(Cell cell) { String value = ""; if(null==cell){ return value; } switch (cell.getCellType()) { //数值型...
    /**
    	 * excel文本转换
    	 * @param cell
    	 * @return
    	 */
    	public static String parseCell(Cell cell) {
        	String value = "";
    		if(null==cell){
    			return value;
    		}
    		switch (cell.getCellType()) {
    		 	//数值型
    	  		case Cell.CELL_TYPE_NUMERIC:
    	  			if (HSSFDateUtil.isCellDateFormatted(cell)) {
    	  				short format = cell.getCellStyle().getDataFormat();
    	  	            SimpleDateFormat sdf = null;
    	  	            if (format == 14 || format == 31 || format == 57 || format == 58  
    	  	                    || (176<=format && format<=178) || (182<=format && format<=196) 
    	  	                    || (210<=format && format<=213) || (208==format ) ) { // 日期
    	  	                sdf = new SimpleDateFormat("yyyy-MM-dd");
    	  	            } else if (format == 20 || format == 32 || format==183 || (200<=format && format<=209) ) { // 时间
    	  	                sdf = new SimpleDateFormat("HH:mm");
    	  	            } else { // 不是日期格式
    	  	            	cell.setCellType(Cell.CELL_TYPE_STRING);
    	  	            	return cell.getRichStringCellValue().toString().trim();
    	  	                //return String.valueOf(cell.getNumericCellValue());这样会导致excel单元格设置为文本,但是存储数字的读取到的字符串为2.123E5之类的指数类型,所以笔者选择上面的处理方式将非日期的单元格先强制设置为文本格式,然后按照文本格式读取!
    	  	            }
    	  	            double cellValue = cell.getNumericCellValue();
    	  	            Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(cellValue);
    	  	            if(date == null){
    	  	                return "";
    	  	            }
    	  	            String result="";
    	  	            try {
    	  	                result = sdf.format(date);
    	  	            } catch (Exception e) {
    	  	                e.printStackTrace();
    	  	                return "";
    	  	            }
    	  	            return result;
    	  			}else {// 纯数字
    	  				BigDecimal big=new BigDecimal(cell.getNumericCellValue());
    	  				value = big.toString();
    	  				//解决1234.0  去掉后面的.0
    	  				if(null!=value&&!"".equals(value.trim())){
    	  				     String[] item = value.split("[.]");
    	  				     if(1<item.length&&"0".equals(item[1])){
    	  				    	 value=item[0];
    	  				     }
    	  				}
    	  			}
    	  			break;
    	  			//字符串类型 
    	  		case Cell.CELL_TYPE_STRING:
    	  			value = cell.getStringCellValue().toString();
    	  			break;
    	  		// 公式类型
    	  		case Cell.CELL_TYPE_FORMULA:
    	  			//读公式计算值
    	  			value = String.valueOf(cell.getNumericCellValue());
    	  			if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
    	  				value = cell.getStringCellValue().toString();
    	  			}
    	  			break;
    	  		// 布尔类型
    	  		case Cell.CELL_TYPE_BOOLEAN:
    	  			value = " "+ cell.getBooleanCellValue();
    	  			break;
    	  		// 空值
    	  		case Cell.CELL_TYPE_BLANK: 
    	  			value = "";
    	  			break;
    	  		// 故障
    	  		case Cell.CELL_TYPE_ERROR: 
    	  			value = "";
    	  			break;
    	  		default:
    	  			value = cell.getStringCellValue().toString();
    		}
    		return value;
        }

     

    展开全文
  • Java POI 导入EXCEL数据缓慢调优

    千次阅读 2019-01-07 11:35:10
    1.使用 SXSSFWorkbook workbook = new SXSSFWorkbook();// 创建一个Excel文件  将其赋上初始100条 SXSSFWorkbook workbook = new SXSSFWorkbook(100);...在数据循环导入时,尽量避免创建新对象(ne...
    1.使用 SXSSFWorkbook workbook = new SXSSFWorkbook();// 创建一个Excel文件
    

         将其赋上初始100条

      SXSSFWorkbook workbook = new SXSSFWorkbook(100);// 创建一个Excel文件

         如果超出100条则保存在磁盘中.

      2.在数据循环导入时,尽量避免创建新对象(new)

      3. String换成StringBuffer

      4.调整虚拟机内存

    展开全文
  • java poi导入Excel通用工具类

    万次阅读 2017-09-09 22:28:24
    最近在做一个导入Excel的功能,在做之前在百度上面查找“java通用导入Excel工具类”,没有查到,大多数都是java通用导出Excel。后来仔细想想,导出可以利用java的反射,做成通用的,放进相应的实体成员变量中,导入...

    问题引入和分析

    提示:如果不想看罗嗦的文章,可以直接到最后点击源码下载运行即可


    最近在做一个导入Excel的功能,在做之前在百度上面查找“java通用导入Excel工具类”,没有查到,大多数都是java通用导出Excel。后来仔细想想,导出可以利用java的反射,做成通用的,放进相应的实体成员变量中,导入为什么不可以呢?也是可以的,不过在做之前我们要解决如下两个问题:

    1.表格中的列数和顺序要和实体类中的成员变量个数和顺序一致。

    2.表格中的列的类型要和成员变量的类型一致。


    第一个问题:

    列数一致可以做到,但是我们最后都是要插入数据库的。那么id是必不可少的,或者良好的习惯可能还有创建时间,创建人等信息。

    所以我想到了两个办法:

    1.封装一个Vo,只将需要的字段封装进去,并且字段顺序和表格列的顺序一致,再将vo与实体类po转化(用PropertyUtil.copy方法);

    2.在需要的成员变量上注入自定义注解,并且加入注解的这些字段顺序和表格列的顺序一致,利用反射得到这些字段。

    这里主要利用第二个方法,因为扩展性更好


    第二个问题:

    获取表格数据的时候,我们要判断类型,并取得相应值,全部转化为String类型,当我们给实体类赋值的时候,利用反射获取需要的成员变量的类型,并赋值。


    需求

    假设我们需求的excel如下:



    我们可以看做两部分:

    第一部分:

    第2行到第11行,为一个列表数据,共有字段5个,分别为:学号,姓名,身份证号码,性别,分数


    第二部分:

    第12行第5列,第13行第5列,共有字段2个,分别为:总计,平均



    项目

    需要导入的jar包

    1.poi的相关jar包,主要用来处理excel
    2.beanutils 利用反射为成员变量赋值
    3.commons-lang String判断非空的方法,可以不用自己判断


    如若maven项目导入下面的jar包

    <!-- poi操作excel -->
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml</artifactId>
    			<version>3.8</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi</artifactId>
    			<version>3.8</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml-schemas</artifactId>
    			<version>3.8</version>
    		</dependency>
    <!-- beanutils -->
    		<dependency>
    			<groupId>commons-beanutils</groupId>
    			<artifactId>commons-beanutils</artifactId>
    			<version>1.8.3</version>
    		</dependency>
    <!-- commons-lang-->
    		<dependency>
        			<groupId>commons-lang</groupId>
        			<artifactId>commons-lang</artifactId>
        			<version>2.6</version>
    		</dependency>

    非maven项目导入下面的jar(下面例子当中用到的jar,有些没用到,可自行处理)

    commons-beanutils-1.8.3.jar
    commons-lang-2.6.jar
    commons-logging-1.1.jar
    dom4j-1.6.1.jar
    log4j-1.2.13.jar
    poi-3.8-20120326.jar
    poi-excelant-3.8-20120326.jar
    poi-ooxml-3.8-20120326.jar
    poi-ooxml-schemas-3.8-20120326.jar
    poi-scratchpad-3.8-20120326.jar
    stax-api-1.0.1.jar
    xmlbeans-2.3.0.jar


    项目结构




    工具类

    package com.dao.chu.excel;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Field;
    import java.math.BigDecimal;
    import java.text.DecimalFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;
    
    import org.apache.commons.beanutils.PropertyUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    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 org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * 
     * excel读取工具类
     * 
     * @author daochuwenziyao
     * @see [相关类/方法]
     * @since [产品/模块版本]
     */
    public class ImportExeclUtil
    {
        
        private static int totalRows = 0;// 总行数
        
        private static int totalCells = 0;// 总列数
        
        private static String errorInfo;// 错误信息
        
        /** 无参构造方法 */
        public ImportExeclUtil()
        {
        }
        
        public static int getTotalRows()
        {
            return totalRows;
        }
        
        public static int getTotalCells()
        {
            return totalCells;
        }
        
        public static String getErrorInfo()
        {
            return errorInfo;
        }
        
        /**
         * 
         * 根据流读取Excel文件
         * 
         * 
         * @param inputStream
         * @param isExcel2003
         * @return
         * @see [类、类#方法、类#成员]
         */
        public List<List<String>> read(InputStream inputStream, boolean isExcel2003)
            throws IOException
        {
            
            List<List<String>> dataLst = null;
            
            /** 根据版本选择创建Workbook的方式 */
            Workbook wb = null;
            
            if (isExcel2003)
            {
                wb = new HSSFWorkbook(inputStream);
            }
            else
            {
                wb = new XSSFWorkbook(inputStream);
            }
            dataLst = readDate(wb);
            
            return dataLst;
        }
        
        /**
         * 
         * 读取数据
         * 
         * @param wb
         * @return
         * @see [类、类#方法、类#成员]
         */
        private List<List<String>> readDate(Workbook wb)
        {
            
            List<List<String>> dataLst = new ArrayList<List<String>>();
            
            /** 得到第一个shell */
            Sheet sheet = wb.getSheetAt(0);
            
            /** 得到Excel的行数 */
            totalRows = sheet.getPhysicalNumberOfRows();
            
            /** 得到Excel的列数 */
            if (totalRows >= 1 && sheet.getRow(0) != null)
            {
                totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
            }
            
            /** 循环Excel的行 */
            for (int r = 0; r < totalRows; r++)
            {
                Row row = sheet.getRow(r);
                if (row == null)
                {
                    continue;
                }
                
                List<String> rowLst = new ArrayList<String>();
                
                /** 循环Excel的列 */
                for (int c = 0; c < getTotalCells(); c++)
                {
                    
                    Cell cell = row.getCell(c);
                    String cellValue = "";
                    
                    if (null != cell)
                    {
                        // 以下是判断数据的类型
                        switch (cell.getCellType())
                        {
                            case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                                cellValue = cell.getNumericCellValue() + "";
                                break;
                            
                            case HSSFCell.CELL_TYPE_STRING: // 字符串
                                cellValue = cell.getStringCellValue();
                                break;
                            
                            case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                                cellValue = cell.getBooleanCellValue() + "";
                                break;
                            
                            case HSSFCell.CELL_TYPE_FORMULA: // 公式
                                cellValue = cell.getCellFormula() + "";
                                break;
                            
                            case HSSFCell.CELL_TYPE_BLANK: // 空值
                                cellValue = "";
                                break;
                            
                            case HSSFCell.CELL_TYPE_ERROR: // 故障
                                cellValue = "非法字符";
                                break;
                            
                            default:
                                cellValue = "未知类型";
                                break;
                        }
                    }
                    
                    rowLst.add(cellValue);
                }
                
                /** 保存第r行的第c列 */
                dataLst.add(rowLst);
            }
            
            return dataLst;
        }
        
        /**
         * 
         * 按指定坐标读取实体数据
         * <按顺序放入带有注解的实体成员变量中>
         * 
         * @param wb 工作簿
         * @param t 实体
         * @param in 输入流
         * @param integers 指定需要解析的坐标
         * @return T 相应实体
         * @throws IOException
         * @throws Exception
         * @see [类、类#方法、类#成员]
         */
        @SuppressWarnings("unused")
        public static <T> T readDateT(Workbook wb, T t, InputStream in, Integer[]... integers)
            throws IOException, Exception
        {
            // 获取该工作表中的第一个工作表
            Sheet sheet = wb.getSheetAt(0);
            
            // 成员变量的值
            Object entityMemberValue = "";
            
            // 所有成员变量
            Field[] fields = t.getClass().getDeclaredFields();
            // 列开始下标
            int startCell = 0;
            
            /** 循环出需要的成员 */
            for (int f = 0; f < fields.length; f++)
            {
                
                fields[f].setAccessible(true);
                String fieldName = fields[f].getName();
                boolean fieldHasAnno = fields[f].isAnnotationPresent(IsNeeded.class);
                // 有注解
                if (fieldHasAnno)
                {
                    IsNeeded annotation = fields[f].getAnnotation(IsNeeded.class);
                    boolean isNeeded = annotation.isNeeded();
                    
                    // Excel需要赋值的列
                    if (isNeeded)
                    {
                        
                        // 获取行和列
                        int x = integers[startCell][0] - 1;
                        int y = integers[startCell][1] - 1;
                        
                        Row row = sheet.getRow(x);
                        Cell cell = row.getCell(y);
                        
                        if (row == null)
                        {
                            continue;
                        }
                        
                        // Excel中解析的值
                        String cellValue = getCellValue(cell);
                        // 需要赋给成员变量的值
                        entityMemberValue = getEntityMemberValue(entityMemberValue, fields, f, cellValue);
                        // 赋值
                        PropertyUtils.setProperty(t, fieldName, entityMemberValue);
                        // 列的下标加1
                        startCell++;
                    }
                }
                
            }
            
            return t;
        }
        
        /**
         * 
         * 读取列表数据 
         * <按顺序放入带有注解的实体成员变量中>
         * 
         * @param wb 工作簿
         * @param t 实体
         * @param beginLine 开始行数
         * @param totalcut 结束行数减去相应行数
         * @return List<T> 实体列表
         * @throws Exception
         * @see [类、类#方法、类#成员]
         */
        @SuppressWarnings("unchecked")
        public static <T> List<T> readDateListT(Workbook wb, T t, int beginLine, int totalcut)
            throws Exception
        {
            List<T> listt = new ArrayList<T>();
            
            /** 得到第一个shell */
            Sheet sheet = wb.getSheetAt(0);
            
            /** 得到Excel的行数 */
            totalRows = sheet.getPhysicalNumberOfRows();
            
            /** 得到Excel的列数 */
            if (totalRows >= 1 && sheet.getRow(0) != null)
            {
                totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
            }
            
            /** 循环Excel的行 */
            for (int r = beginLine - 1; r < totalRows - totalcut; r++)
            {
                Object newInstance = t.getClass().newInstance();
                Row row = sheet.getRow(r);
                if (row == null)
                {
                    continue;
                }
                
                // 成员变量的值
                Object entityMemberValue = "";
                
                // 所有成员变量
                Field[] fields = t.getClass().getDeclaredFields();
                // 列开始下标
                int startCell = 0;
                
                for (int f = 0; f < fields.length; f++)
                {
                    
                    fields[f].setAccessible(true);
                    String fieldName = fields[f].getName();
                    boolean fieldHasAnno = fields[f].isAnnotationPresent(IsNeeded.class);
                    // 有注解
                    if (fieldHasAnno)
                    {
                        IsNeeded annotation = fields[f].getAnnotation(IsNeeded.class);
                        boolean isNeeded = annotation.isNeeded();
                        // Excel需要赋值的列
                        if (isNeeded)
                        {
                            Cell cell = row.getCell(startCell);
                            String cellValue = getCellValue(cell);
                            entityMemberValue = getEntityMemberValue(entityMemberValue, fields, f, cellValue);
                            // 赋值
                            PropertyUtils.setProperty(newInstance, fieldName, entityMemberValue);
                            // 列的下标加1
                            startCell++;
                        }
                    }
                    
                }
                
                listt.add((T)newInstance);
            }
            
            return listt;
        }
        
        /**
         * 
         * 根据Excel表格中的数据判断类型得到值
         * 
         * @param cell
         * @return
         * @see [类、类#方法、类#成员]
         */
        private static String getCellValue(Cell cell)
        {
            String cellValue = "";
            
            if (null != cell)
            {
                // 以下是判断数据的类型
                switch (cell.getCellType())
                {
                    case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                        if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell))
                        {
                            Date theDate = cell.getDateCellValue();
                            SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd");
                            cellValue = dff.format(theDate);
                        }
                        else
                        {
                            DecimalFormat df = new DecimalFormat("0");
                            cellValue = df.format(cell.getNumericCellValue());
                        }
                        break;
                    case HSSFCell.CELL_TYPE_STRING: // 字符串
                        cellValue = cell.getStringCellValue();
                        break;
                    
                    case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                        cellValue = cell.getBooleanCellValue() + "";
                        break;
                    
                    case HSSFCell.CELL_TYPE_FORMULA: // 公式
                        cellValue = cell.getCellFormula() + "";
                        break;
                    
                    case HSSFCell.CELL_TYPE_BLANK: // 空值
                        cellValue = "";
                        break;
                    
                    case HSSFCell.CELL_TYPE_ERROR: // 故障
                        cellValue = "非法字符";
                        break;
                    
                    default:
                        cellValue = "未知类型";
                        break;
                }
                
            }
            return cellValue;
        }
        
        /**
         * 
         * 根据实体成员变量的类型得到成员变量的值
         * 
         * @param realValue
         * @param fields
         * @param f
         * @param cellValue
         * @return
         * @see [类、类#方法、类#成员]
         */
        private static Object getEntityMemberValue(Object realValue, Field[] fields, int f, String cellValue)
        {
            String type = fields[f].getType().getName();
            switch (type)
            {
                case "char":
                case "java.lang.Character":
                case "java.lang.String":
                    realValue = cellValue;
                    break;
                case "java.util.Date":
                    realValue = StringUtils.isBlank(cellValue) ? null : DateUtil.strToDate(cellValue, DateUtil.YYYY_MM_DD);
                    break;
                case "java.lang.Integer":
                    realValue = StringUtils.isBlank(cellValue) ? null : Integer.valueOf(cellValue);
                    break;
                case "int":
                case "float":
                case "double":
                case "java.lang.Double":
                case "java.lang.Float":
                case "java.lang.Long":
                case "java.lang.Short":
                case "java.math.BigDecimal":
                    realValue = StringUtils.isBlank(cellValue) ? null : new BigDecimal(cellValue);
                    break;
                default:
                    break;
            }
            return realValue;
        }
        
        /**
         * 
         * 根据路径或文件名选择Excel版本
         * 
         * 
         * @param filePathOrName
         * @param in
         * @return
         * @throws IOException
         * @see [类、类#方法、类#成员]
         */
        public static Workbook chooseWorkbook(String filePathOrName, InputStream in)
            throws IOException
        {
            /** 根据版本选择创建Workbook的方式 */
            Workbook wb = null;
            boolean isExcel2003 = ExcelVersionUtil.isExcel2003(filePathOrName);
            
            if (isExcel2003)
            {
                wb = new HSSFWorkbook(in);
            }
            else
            {
                wb = new XSSFWorkbook(in);
            }
            
            return wb;
        }
        
        static class ExcelVersionUtil
        {
            
            /**
             * 
             * 是否是2003的excel,返回true是2003
             * 
             * 
             * @param filePath
             * @return
             * @see [类、类#方法、类#成员]
             */
            public static boolean isExcel2003(String filePath)
            {
                return filePath.matches("^.+\\.(?i)(xls)$");
                
            }
            
            /**
             * 
             * 是否是2007的excel,返回true是2007
             * 
             * 
             * @param filePath
             * @return
             * @see [类、类#方法、类#成员]
             */
            public static boolean isExcel2007(String filePath)
            {
                return filePath.matches("^.+\\.(?i)(xlsx)$");
                
            }
            
        }
        
        public static class DateUtil
        {
            
            // ======================日期格式化常量=====================//
            
            public static final String YYYY_MM_DDHHMMSS = "yyyy-MM-dd HH:mm:ss";
            
            public static final String YYYY_MM_DD = "yyyy-MM-dd";
            
            public static final String YYYY_MM = "yyyy-MM";
            
            public static final String YYYY = "yyyy";
            
            public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
            
            public static final String YYYYMMDD = "yyyyMMdd";
            
            public static final String YYYYMM = "yyyyMM";
            
            public static final String YYYYMMDDHHMMSS_1 = "yyyy/MM/dd HH:mm:ss";
            
            public static final String YYYY_MM_DD_1 = "yyyy/MM/dd";
            
            public static final String YYYY_MM_1 = "yyyy/MM";
            
            /**
             * 
             * 自定义取值,Date类型转为String类型
             * 
             * @param date 日期
             * @param pattern 格式化常量
             * @return
             * @see [类、类#方法、类#成员]
             */
            public static String dateToStr(Date date, String pattern)
            {
                SimpleDateFormat format = null;
                
                if (null == date)
                    return null;
                format = new SimpleDateFormat(pattern, Locale.getDefault());
                
                return format.format(date);
            }
            
            /**
             * 将字符串转换成Date类型的时间
             * <hr>
             * 
             * @param s 日期类型的字符串<br>
             *            datePattern :YYYY_MM_DD<br>
             * @return java.util.Date
             */
            public static Date strToDate(String s, String pattern)
            {
                if (s == null)
                {
                    return null;
                }
                Date date = null;
                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                try
                {
                    date = sdf.parse(s);
                }
                catch (ParseException e)
                {
                    e.printStackTrace();
                }
                return date;
            }
        }
        
    }


    自定义注解

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 
     * 是否需要从解析excel赋值
     * @author daochuwenziyao
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    @Retention(value = RetentionPolicy.RUNTIME)
    @Target(value = {ElementType.FIELD})
    public @interface IsNeeded
    {
        
        /**
         * 是否需要从解析excel赋值
         * @return
         *         true:需要  false:不需要
         * @see [类、类#方法、类#成员]
         */
        boolean isNeeded() default true;
    }
    


    学生基本信息


    import java.math.BigDecimal;
    
    /**
     * 
     * 学生基本信息
     * @author daochuwenziyao
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public class StudentBaseInfo
    {
        private Integer id;
        @IsNeeded
        private String no;
        @IsNeeded
        private String name;
        @IsNeeded
        private String idnum;
        @IsNeeded
        private String sex;
        @IsNeeded
        private BigDecimal grade;
        
        
        @Override
        public String toString()
        {
            return "StudentBaseInfo [id=" + id + ", no=" + no + ", name=" + name + ", idnum=" + idnum + ", sex=" + sex
                + ", grade=" + grade + "]";
        }
        public Integer getId()
        {
            return id;
        }
        public void setId(Integer id)
        {
            this.id = id;
        }
        public String getNo()
        {
            return no;
        }
        public void setNo(String no)
        {
            this.no = no;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
        public String getSex()
        {
            return sex;
        }
        public void setSex(String sex)
        {
            this.sex = sex;
        }
        public String getIdnum()
        {
            return idnum;
        }
        public void setIdnum(String idnum)
        {
            this.idnum = idnum;
        }
        public BigDecimal getGrade()
        {
            return grade;
        }
        public void setGrade(BigDecimal grade)
        {
            this.grade = grade;
        }
        
    }


    学生统计信息

    /**
     * 
     * 学生统计信息
     * @author daochuwenziyao
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public class StudentStatistics
    {
        private Integer id;
        @IsNeeded
        private BigDecimal totalGrade;
        @IsNeeded
        private BigDecimal avgGrade;
        
        @Override
        public String toString()
        {
            return "StudentStatistics [id=" + id + ", totalGrade=" + totalGrade + ", avgGrade=" + avgGrade + "]";
        }
        public Integer getId()
        {
            return id;
        }
        public void setId(Integer id)
        {
            this.id = id;
        }
        public BigDecimal getTotalGrade()
        {
            return totalGrade;
        }
        public void setTotalGrade(BigDecimal totalGrade)
        {
            this.totalGrade = totalGrade;
        }
        public BigDecimal getAvgGrade()
        {
            return avgGrade;
        }
        public void setAvgGrade(BigDecimal avgGrade)
        {
            this.avgGrade = avgGrade;
        }
        
    }


    测试类


    package com.dao.chu.excel;
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    
    import org.apache.poi.ss.usermodel.Workbook;
    
    
    public class TestImportExcel
    {
        
        public static void main(String[] args) throws IOException, Exception
        {
            
            String fileName="student.xlsx";
            InputStream in = new FileInputStream(new File("excelfile\\student.xlsx"));
            Workbook wb = ImportExeclUtil.chooseWorkbook(fileName, in);
            StudentStatistics studentStatistics = new StudentStatistics();
            
            //读取一个对象的信息
            StudentStatistics readDateT =
                ImportExeclUtil.readDateT(wb, studentStatistics, in, new Integer[] {12, 5}, new Integer[] {13, 5});
            System.out.println(readDateT);
            
            //读取对象列表的信息
            StudentBaseInfo studentBaseInfo = new StudentBaseInfo();
            //第二行开始,到倒数第三行结束(总数减去两行)
            List<StudentBaseInfo> readDateListT = ImportExeclUtil.readDateListT(wb, studentBaseInfo, 2, 2);
            System.out.println(readDateListT);
            
        }
    }


    输出结果

    StudentStatistics [id=null, totalGrade=845, avgGrade=84]
    [StudentBaseInfo [id=null, no=2012240001, name=张三1, idnum=233314199009062304, sex=男, grade=80], StudentBaseInfo [id=null, no=2012240002, name=张三2, idnum=233314199009062304, sex=男, grade=81], StudentBaseInfo [id=null, no=2012240003, name=张三3, idnum=233314199009062304, sex=男, grade=82], StudentBaseInfo [id=null, no=2012240004, name=张三4, idnum=233314199009062304, sex=男, grade=83], StudentBaseInfo [id=null, no=2012240005, name=张三5, idnum=233314199009062304, sex=男, grade=84], StudentBaseInfo [id=null, no=2012240006, name=张三6, idnum=233314199009062304, sex=男, grade=85], StudentBaseInfo [id=null, no=2012240007, name=张三7, idnum=233314199009062304, sex=男, grade=86], StudentBaseInfo [id=null, no=2012240008, name=张三8, idnum=233314199009062304, sex=男, grade=87], StudentBaseInfo [id=null, no=2012240009, name=张三9, idnum=233314199009062304, sex=男, grade=88], StudentBaseInfo [id=null, no=2012240010, name=张三10, idnum=233314199009062304, sex=男, grade=89]]


    源码下载

    源码分享给大家,上面提到的都在这里,由于很多的数据类型没有试验到,可能会有些类型有问题,所以希望大家如果遇到问题回复我,我会将其完善。谢谢

    http://download.csdn.net/download/daochuwenziyao/9971228



    版本修改


    V20170915_解决不能导入带有公式计算的excel



    展开全文
  • java运用poiexcel数据导入到oracle数据库中,上场内容未自己写的小demo,可下载查看,不清楚的可以联系我进行帮助。
  • java 操作Excel 导入、导出视频;百度云连接,永久有效,如有实效,请联系我
  • java导入excel的工具类。支持单个对象的赋值,列表对象的赋值,指定坐标的赋值。主要利用的是poi的技术,java反射和自定义注解
  • java 使用 poi 解析导入大数据量(几万数据量+)时,报出OOM。这是使用POI 第二种处理方法,解决大数据量导入内存溢出问题,并提升效率
  • 本文主要内容是使用Java POIExcel导入时,对Excel的数据形式进行格式转换。 下面是代码 Sheet sheet = workbook.getSheetAt(0); int rowCount = sheet.getPhysicalNumberOfRows(); Row row0 = sheet.getRow...
  • Java POI导入导出Excel文件

    万次阅读 多人点赞 2019-06-12 21:39:41
    Java POI Excel导入导出Excel文件 一、导入pom文件(版本号一定要相同,不然会报错) <!--读取excel文件--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>...
  • java_poi实现excel导入导出功能,有详细的注解
  • 主要介绍了Java POI读取excel中数值精度损失问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 用模板导入导出
  • 概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
  • Java使用poi导入Excel文件

    千次阅读 2018-08-28 16:49:38
    前面说到下载模板后,对数据需要导入。 工具类 ImportExcelUtils :excel模板工具类 ...导入需要maven引入的jar包(这里用的是poi) &amp;amp;amp;amp;lt;!-- https://mvnrepository.com/ar...
  • 解决java POI导入Excel超时问题

    千次阅读 2021-02-28 06:41:36
    logger.info("导入代码信息excel文件的总列数:" +totalColumnNum); System.out.println(totalColumnNum);int lastRowNum =sheet.getLastRowNum(); logger.info("导入节点信息excel文件的总行数:" +lastRowNum); ...
  • 本案例中利用Apache Poi读取Excel用法,源码注释详细基本用法!
  • 利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...
  • Java poi 实现excel导入导出工具类

    千次阅读 多人点赞 2020-06-10 16:17:10
    最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成/聚合...
  • 可以对导入/导出的数据进行编码转换。例:在用户表中的sex性别字段,数据存储为:0:男;1:女,则在导出数据的时候可以对编码进行转换,导出结果为男/女。同样在导入时,可以将文字转换为编码存储到数据库中。
  • 这个是使用java语言 poi导入excel到数据库中,同时使用了xml对excel的每个单元格数据进行了非空验证。经测试,导入数据库成功。
  • } else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {//有公式的Excel单元格 //这样对于字符串cell.getStringCellValue()方法即可取得其值,如果公式生成的是数值,使用cell.getStringCellValue...
  • 导入Excel相对麻烦点,一般情况下,导入的程序无法通用的主要原因是:对于不同的导入模板,字段field与单元格cellRef的映射关系是不相同的,这就导致对每一个导入模板都要去写一套相似的代码;我们应该想办法解决...
  • 一:读取单元格的值 ... * 获取EXCEL单元格的值 * * @param cell * @return */ public static String getCellValue(Cell cell) { if (cell == null) { return null; } int type = cell.getCellType(); ...
  • poi apache-poi导入实例 导入excel 利用java的apache-poi读取每一行每一列,导入excel数据,两个for循环出来的[ ][ ] 承装数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,932
精华内容 7,172
关键字:

javapoi导入excel

java 订阅