精华内容
下载资源
问答
  • java运用poiexcel数据导入到oracle数据库中,上场内容未自己写的小demo,可下载查看,不清楚的可以联系我进行帮助。
  • POI导入excel到数据库及遇到空值处理

    千次阅读 2018-07-11 16:39:41
    //从0开始4列 for(int c=0;c;c++){ String li = null; try { row.getCell(c).setCellType(Cell.CELL_TYPE_STRING); li =row.getCell(c).getStringCellValue(); list.add(li);...
    
    
    FileInputStream fileInputStream = new FileInputStream(new File("C:/表-v1.0.xlsx"));
    		//读取工作簿
    		XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
    		//读取配电信息工作表(getSheet(name)可根据name获取sheet)
    	
    		
    		
    		XSSFSheet sheet = workbook.getSheet("配电关系");
    	
    			//配电进线信息录入
    			for (int i=2;i<sheet.getLastRowNum();i++) {
    				XSSFRow row = sheet.getRow(i);
    				//创建一个集合存储每个row的数据
    				List<String> list = new ArrayList<String>();
    				//从0开始到4列
    				for(int c=0;c<4;c++){
    					String li = null;
    					try {
    						row.getCell(c).setCellType(Cell.CELL_TYPE_STRING);
    						li =row.getCell(c).getStringCellValue();
    						list.add(li);
    					} catch (NullPointerException e) {
    						if(li==null){
    							list.add("");
    							continue;
    						}
    				}
    				}
    				coil.setBno(list.get(0));
    				coil.setDleno(list.get(1));
    				coil.setDname(list.get(2));
    				coil.setDistributionRoom(list.get(3));
    				if(!list.get(1).equals("")){
    					importInfoService.addCoil(coil);
    				}
    
    			}


    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201510/15/1444890842_121398.png) if条件判断也没起作用,如何才能正确判断
  • poiexcel导入数据库

    2019-04-07 01:04:44
    NULL 博文链接:https://xph.iteye.com/blog/1562678
  • Springboot整合poi实现Excel导入导出到数据库 引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <...

    Springboot整合poi实现Excel导入导出到数据库

    引入依赖

    
     <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.8</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.8</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>3.8</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.8</version>
            </dependency>
    

    Excel导入数据并解析到数据库

    1. controller层
        @ApiOperation("导入execl")
        @PostMapping("/UploadExcel")
        public ResponseWrapper ajaxUploadExcel(@RequestParam(value="excelFile",required = false) MultipartFile excelFile) throws ParseException {
            ResponseWrapper wrapper = recordService.UploadExcel(excelFile);
            return wrapper;
        }
    
    1. service层
    public ResponseWrapper UploadExcel(MultipartFile file) throws ParseException {
            if (file.isEmpty()) {
                try {
                    throw new Exception("文件不存在!");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            InputStream in = null;
            try {
                in = file.getInputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<List<Object>> listob = null;
            try {
                listob = new ExcelUtils().getBankListByExcel(in,file.getOriginalFilename());
                //          System.out.println("listob触发了"+listob);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
            for (int i = 0; i < listob.size(); i++) {
                List<Object> lo = listob.get(i);
                Record vo = new Record();
                Record record = null;
    
                //这里是主键验证,根据实际需要添加,可要可不要,加上之后,可以对现有数据进行批量修改和导入
                try {
                    record = recordMapper.selectByPrimaryKey(Integer.valueOf(String.valueOf(lo.get(0))));
                } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                }
                if (record == null) {
    //                假如id为空则表示没有这条数据,创建这条数据
                    vo.setId(Integer.valueOf(String.valueOf(lo.get(0))));
                    vo.setContent(String.valueOf(lo.get(1)));
                    vo.setNumber(String.valueOf(lo.get(2)));
                    vo.setDeadline(String.valueOf(lo.get(3)));
                    vo.setCompany(String.valueOf(lo.get(4)));
                    vo.setWeeks(String.valueOf(lo.get(5)));
                    addRecord(vo);
                } else {
    //                如果这条数据存在则调用修改方法,修改这条数据
                    vo.setId(Integer.valueOf(String.valueOf(lo.get(0))));
                    vo.setContent(String.valueOf(lo.get(1)));
                    vo.setNumber(String.valueOf(lo.get(2)));
                    vo.setDeadline(String.valueOf(lo.get(3)));
                    vo.setCompany(String.valueOf(lo.get(4)));
                    vo.setWeeks(String.valueOf(lo.get(5)));
                    updateRecord(vo);
                }
            }
            return ResponseWrapper.markSuccess(null);
        }
    
    

    数据将数据库的数据导出到excel

    1. contoller层
        @ApiOperation("导出excel")
        @GetMapping("/excel")
        public void excel( HttpServletResponse response)throws IOException {
            recordService.excel(response);
            return;
        }
    
    1. service层
    public void excel(HttpServletResponse response)throws IOException{
            //确定编码的格式
            response.setCharacterEncoding("UTF-8");
            //获取导出的数据
            List<Admin> list = adminMapper.findAllAdmin();
            //创建excel文件
            XSSFWorkbook wb = new XSSFWorkbook();
            //创建sheet页
            XSSFSheet sheet = wb.createSheet("学生信息表");
            //创建标题行
            XSSFRow titleRow = sheet.createRow(0);
            titleRow.createCell(0).setCellValue("ID");
            titleRow.createCell(1).setCellValue("姓名");
            titleRow.createCell(2).setCellValue("密码");
            titleRow.createCell(3).setCellValue("角色");
            titleRow.createCell(4).setCellValue("时间");
            //遍历将数据放到excel列中
            for (Admin student : list) {
                XSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
                dataRow.createCell(0).setCellValue(student.getAid());
                dataRow.createCell(1).setCellValue(student.getUsername());
                dataRow.createCell(2).setCellValue(student.getPassword());
                dataRow.createCell(3).setCellValue(student.getSrole());
                
               //由于时间数据库格式是date,所以要将时间格式进行转换
                SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
                String time = format.format(student.getTime());
                dataRow.createCell(4).setCellValue(time);
            
            // 设置下载时客户端Excel的名称   (上面注释的改进版本,上面的中文不支持)
            response.setContentType("application/octet-stream;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="
                    //该版本为2007-的版本
                    + new String("名单".getBytes("UTF-8"),"iso-8859-1")
                    + ".xlsx");
            OutputStream ouputStream = response.getOutputStream();
            wb.write(ouputStream);
            ouputStream.flush();
            ouputStream.close();
    
        }
    
    

    工具类(导要调用)

    
    package com.zgqk.method;
    
    
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    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 java.io.InputStream;
    import java.math.BigDecimal;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    /**
     * Excel工具类
     */
    public class ExcelUtils {
        private final static String excel2003L =".xls";    //2003- 版本的excel
        private final static String excel2007U =".xlsx";   //2007+ 版本的excel
    
        /**
         * 描述:获取IO流中的数据,组装成List<List<Object>>对象
         * @param in,fileName
         * @return
         * @throws
         */
        public  List<List<Object>> getBankListByExcel(InputStream in, String fileName) throws Exception{
            List<List<Object>> list = null;
    
            //创建Excel工作薄
            Workbook work = this.getWorkbook(in,fileName);
            if(null == work){
                throw new Exception("创建Excel工作薄为空!");
            }
            Sheet sheet = null;  //页数
            Row row = null;  //行数
            Cell cell = null;  //列数
    
            list = new ArrayList<List<Object>>();
            //遍历Excel中所有的sheet
            for (int i = 0; i < work.getNumberOfSheets(); i++) {
                sheet = work.getSheetAt(i);
                if(sheet==null){continue;}
    
                //遍历当前sheet中的所有行
                for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
                    row = sheet.getRow(j);
                    if(row==null||row.getFirstCellNum()==j){continue;}
    
                    //遍历所有的列
                    List<Object> li = new ArrayList<Object>();
                    for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                        cell = row.getCell(y);
                        li.add(this.getValue(cell));
                    }
                    list.add(li);
                }
            }
            return list;
        }
        /**
         * 描述:根据文件后缀,自适应上传文件的版本
         * @param inStr,fileName
         * @return
         * @throws Exception
         */
        public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception{
            Workbook wb = null;
            String fileType = fileName.substring(fileName.lastIndexOf("."));
            if(excel2003L.equals(fileType)){
                wb = new HSSFWorkbook(inStr);  //2003-
            }else if(excel2007U.equals(fileType)){
                //2003版运用HSS协议,2007运用XSS协议
                wb = new XSSFWorkbook(inStr);  //2007+
            }else{
                throw new Exception("解析的文件格式有误!");
            }
            return wb;
        }
        /**
         * 描述:对表格中数值进行格式化
         * @param cell
         * @return
         */
        //解决excel类型问题,获得数值
        public  String getValue(Cell cell) {
            String value = "";
            if(null==cell){
                return value;
            }
            //poi.jar高版本中其中的常量的名称会改变
            switch (cell.getCellType()) {
                //数值型
                case Cell.CELL_TYPE_NUMERIC:
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        //如果是date类型则 ,获取该cell的date值
                        Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                        value = format.format(date);
                    }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();
                    break;
                // 公式类型
                case Cell.CELL_TYPE_FORMULA:
                    //读公式计算值
                    value = String.valueOf(cell.getNumericCellValue());
                    if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
                        value = cell.getStringCellValue();
                    }
                    break;
                // 布尔类型
                case Cell.CELL_TYPE_BOOLEAN:
                    value = " "+ cell.getBooleanCellValue();
                    break;
                default:
                    value = cell.getStringCellValue();
            }
            if("null".endsWith(value.trim())){
                value="";
            }
            return value;
        }
    }
    
    
    展开全文
  • poi导入excel数据到数据库

    千次阅读 2019-06-20 20:34:05
    导入poi依赖 <properties> <poi.version>3.17</poi.version> </properties> <!-- POI --> <dependency> <groupId>org.apache.poi</gr...

     导入poi依赖

    <properties>
            <poi.version>3.17</poi.version>
        </properties>
    <!-- POI -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>${poi.version}</version>
            </dependency>

    以下面这个表格为例,别的数据都好取,说两个特殊的,取这种时间取出来是一个  数字

    这个数字是以1900年为原点,到2015年8月21日,之间经过的天数。

    然后写个方法处理一下就可以.我已经封装好了,把数字传进去,返回的就是时间.

    还有下面的这种使用excel表达式算出来的结果,在代码当中实际取到的是表达式字符串.

    解决办法在工具类中直接改为取字符串,取出来的就是值,不要写取公式的方法.

    工具类

    package com.buba.utils;
    
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.ss.usermodel.*;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.*;
    
    public class ExportBeanExcel<T> {
    
        /**
         * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出
         *
         * title         表格标题名
         * headersName  表格属性列名数组
         * headersId    表格属性列名对应的字段---你需要导出的字段名(为了更灵活控制你想要导出的字段)
         *  dtoList     需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象
         *  out         与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
         */
        public   byte[] exportExcel(String title, List<String> headersName,List<String> headersId,
                                List<T> dtoList) {
            /*(一)表头--标题栏*/
            Map<Integer, String> headersNameMap = new HashMap<>();
            int key=0;
            for (int i = 0; i < headersName.size(); i++) {
                if (!headersName.get(i).equals(null)) {
                    headersNameMap.put(key, headersName.get(i));
                    key++;
                }
            }
            /*(二)字段*/
            Map<Integer, String> titleFieldMap = new HashMap<>();
            int value = 0;
            for (int i = 0; i < headersId.size(); i++) {
                if (!headersId.get(i).equals(null)) {
                    titleFieldMap.put(value, headersId.get(i));
                    value++;
                }
            }
            /* (三)声明一个工作薄:包括构建工作簿、表格、样式*/
            HSSFWorkbook wb = new HSSFWorkbook();
            HSSFSheet sheet = wb.createSheet(title);
            sheet.setDefaultColumnWidth((short)15);
            // 生成一个样式
            HSSFCellStyle style = wb.createCellStyle();
            HSSFRow row = sheet.createRow(0);
           // style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            HSSFCell cell;
            Collection c = headersNameMap.values();//拿到表格所有标题的value的集合
            Iterator<String> it = c.iterator();//表格标题的迭代器
            /*(四)导出数据:包括导出标题栏以及内容栏*/
            //根据选择的字段生成表头
            short size = 0;
            while (it.hasNext()) {
                cell = row.createCell(size);
                cell.setCellValue(it.next().toString());
                cell.setCellStyle(style);
                size++;
            }
            //表格标题一行的字段的集合
            Collection zdC = titleFieldMap.values();
            Iterator<T> labIt = dtoList.iterator();//总记录的迭代器
            int zdRow =0;//列序号
            while (labIt.hasNext()) {//记录的迭代器,遍历总记录
                int zdCell = 0;
                zdRow++;
                row = sheet.createRow(zdRow);
                T l = (T) labIt.next();
                // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
                Field[] fields = l.getClass().getDeclaredFields();//获得JavaBean全部属性
                for (short i = 0; i < fields.length; i++) {//遍历属性,比对
                    Field field = fields[i];
                    String fieldName = field.getName();//属性名
                    Iterator<String> zdIt = zdC.iterator();//一条字段的集合的迭代器
                    while (zdIt.hasNext()) {//遍历要导出的字段集合
                        if (zdIt.next().equals(fieldName)) {//比对JavaBean的属性名,一致就写入,不一致就丢弃
                            String getMethodName = "get"
                                    + fieldName.substring(0, 1).toUpperCase()
                                    + fieldName.substring(1);//拿到属性的get方法
                            Class tCls = l.getClass();//拿到JavaBean对象
                            try {
                                Method getMethod = tCls.getMethod(getMethodName,
                                        new Class[] {});//通过JavaBean对象拿到该属性的get方法,从而进行操控
                                Object val = getMethod.invoke(l, new Object[] {});//操控该对象属性的get方法,从而拿到属性值
                                String textVal = null;
                                if (val!= null) {
                                    textVal = String.valueOf(val);//转化成String
                                }else{
                                    textVal = null;
                                }
                                row.createCell((short) zdCell).setCellValue(textVal);//写进excel对象
                                zdCell++;
                            } catch (SecurityException e) {
                                e.printStackTrace();
                            } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                            } catch (NoSuchMethodException e) {
                                e.printStackTrace();
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return wb.getBytes();
        }
        /**
         * Excel读取 操作
         */
        public static List<List<String>> readExcel(InputStream is)
                throws IOException {
            Workbook wb = null;
            try {  
                  wb = WorkbookFactory.create(is);        
                } catch (FileNotFoundException e) {  
                  e.printStackTrace();  
                } catch (InvalidFormatException e) {  
                  e.printStackTrace();  
                } catch (IOException e) {  
                  e.printStackTrace();  
                }  
    
            /** 得到第一个sheet */
            Sheet sheet = wb.getSheetAt(0);
            /** 得到Excel的行数 */
            int totalRows = sheet.getPhysicalNumberOfRows();
    
            /** 得到Excel的列数 */
            int totalCells = 0;
            if (totalRows >= 1 && sheet.getRow(0) != null) {
                totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
            }
    
            List<List<String>> dataLst = new ArrayList<List<String>>();
            /** 循环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 < totalCells; c++) {
                    Cell cell = row.getCell(c);
                    String cellValue = "";
                    if (null != cell) {
                         /*HSSFDataFormatter hSSFDataFormatter = new HSSFDataFormatter();
                         cellValue= hSSFDataFormatter.formatCellValue(cell);*/
    
                       // 以下是判断数据的类型
                    	CellType type = cell.getCellTypeEnum();
    
                        switch (type) {
                        case NUMERIC: // 数字
                            cellValue = cell.getNumericCellValue() + "";
                            break;
                        case STRING: // 字符串
                            cellValue = cell.getStringCellValue();
                            break;
                        case BOOLEAN: // Boolean
                            cellValue = cell.getBooleanCellValue() + "";
                            break;
                        case FORMULA: // 公式
                            try {
                                cellValue = cell.getStringCellValue();
                            } catch (IllegalStateException e) {
                                cellValue = String.valueOf(cell.getNumericCellValue());
                            }
                            break;
                           /* cellValue = cell.getCellFormula() + "";
                            break;*/
                        case BLANK: // 空值
                            cellValue = "";
                            break;
                        case _NONE: // 故障
                            cellValue = "非法字符";
                            break;
                        default:
                            cellValue = "未知类型";
                            break;
                        }
                    }
                    rowLst.add(cellValue);
                }
                /** 保存第r行的第c列 */
                dataLst.add(rowLst);
            }
            return dataLst;
        }
    
    }
    

    controller接收表格数据提取 

    这个list就是每行每个单元格的数据,自己输出一下就明白啥意思了,然后封装对象的代码自己写吧.

    package com.buba.controller;
    
    import com.buba.mapreducer.MainDriver;
    import com.buba.pojo.BootStrapResult;
    import com.buba.pojo.BootTableParam;
    import com.buba.service.MainService;
    import com.buba.utils.ExportBeanExcel;
    import org.apache.commons.lang.time.DateUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.util.CollectionUtils;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.List;
    
    @Controller
    public class MainController {
    
    
        @RequestMapping("/importDept")
        @ResponseBody
        public String importDept(MultipartFile file){
            //读取excel表格
            try {
                List<List<String>> lists = ExportBeanExcel.readExcel(file.getInputStream());
                System.out.println(lists);
                //判断集合是否为空
                if(!CollectionUtils.isEmpty(lists)){
                    for(int i = 1;i<lists.size();i++){
                        List<String> list = lists.get(i);
                        System.out.println(list);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return "";
        }
    
        //时间转换方法 传取出来的时间数字
        public Date dateFormat(String conStart1){
            Calendar calendar = new GregorianCalendar(1900,0,-1);
            Date d = calendar.getTime();
            Date dd = DateUtils.addDays(d,Integer.valueOf(conStart1));
            return dd;
        }
    
    }
    

    jsp

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2019/6/20
      Time: 19:24
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <form id="deptForm" method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/importDept">
        <label for="file">导入县级数据:</label>
        <input type="file" name="file"/>
    <input type="submit" value="提交">
    </form>
    </body>
    </html>
    

     

    展开全文
  • poi做的Excel导入数据库表工具

    热门讨论 2012-03-14 21:28:15
    编写语言:该小工具是用纯JAVA Swing 编写的; 开发原因:有一次我发现有同事因为要根据客户提供的Excel, 要一条一条数据的通过系统录入到数据库表中,...开发一个软件可以直接将Excel中的数据导入到数据库表中。
  • 第一次使用POI和上传文件,中间遇到了很多坎坷,不过最后还是完成了,记录一下。 先直接上代码吧,后续的问题我等会在讲。 JSP页面 <input type="file" name="file" id="excel_file" accept="xlsx" >...

    Springmvc+POI导入Excel表到数据库, 第一次使用POI和上传文件,中间遇到了很多坎坷,不过最后还是完成了,记录一下。

    先直接上代码吧,后续的问题我等会在讲。

    首先需要有jar包,我没有用maven,百度都有包。
    POI操作Excel表重要的三个包
    Springmvc所需要的上传文件解析,和IO流的包

    解析XML的包
    在使用POI时,因为现在是4.1版本的,我使用最新版的时候,字节符的输入流出了错,所有后来我又换了
    POI3.10版的,就成功了!
    JSP页面标签与JS调用

     				<input type="file"  name="file" id="excel_file" accept="xlsx" >
                      <input type="button"  onclick="check()"  id="excel_button"value="导入">
    

    JS代码

    <script>
            function check() {
                var excel_file=$("#excel_file").val();
                if(excel_file==""||excel_file.length==0){
                    layer.msg("请选择文件路径!",{icon:3});
                return false;
                }else if(excel_file.lastIndexOf('.xls')==-1||excel_file.lastIndexOf('.xlsx')==-1){
                    layer.msg("附件格式不符,请上传Excel表格",{icon:7});
                    return false;
                }else{
                    upload();
                    parent.layer.closeAll();
                    return true;
                }
            }
             function upload() {
                var formData= new FormData($("#upload")[0]);
                $.ajax({
                    url:"/addPUser.do"
                   ,type:"post"
                   ,data: formData
                    ,async:false
                    ,cache:false
                    ,contentType:false
                    ,processData: false
                    ,beforeSend : function() {
                        console.log("正在进行,请稍候");
                    }
                    ,success : function(e) {
                        if (e == "01") {
                            alert("导入成功");
                        } else {
                            alert("导入失败,请按照模板填值");
                        }
                    }
                });
            }
        </script>
    

    Controller层

     @RequestMapping("/addPUser")  //Excel批量添加用户
        @ResponseBody
        public  String addPUser(@RequestParam MultipartFile file) throws IOException {
            String flag = "02";// 上传标志
            if (!file.isEmpty()) {
                try {
                    String originalFilename = file.getOriginalFilename();// 原文件名字
                    System.out.println("文件名:"+originalFilename);
                    InputStream in=file.getInputStream();
                    User user=new User();
                   // flag=re.readExcel1(in,originalFilename);
                    List<ArrayList<Object>> list=null;
                    if (originalFilename.endsWith(".xls")) {
                        list = Excel.readExcel2003(in);
                    } else {
                        list = Excel.readExcel2007(in);
                    }
                    for (int i=0,j=list.size();i<j;i++){
                        List<Object> row = list.get(i);
                        user.setuUsername(row.get(0).toString());
                        user.setuPassword(row.get(1).toString());
                        user.setuPhone(row.get(2).toString());
                        user.setuSex(row.get(3).toString());
                        user.setuOrganizationid(Integer.parseInt(row.get(4).toString()));
                        user.setuLocal(row.get(5).toString());
                        int a=ump.insertSelective(user);
                        if(a>0){
                          flag="01";
                        }
                    }
    
    
                } catch (Exception e) {
                    flag = "03";// 上传出错
                    e.printStackTrace();
                }
        }
            return flag;
        }
    

    至此,如果插入数据成功返回flag到前端JSP页面判断.

    Sevice业务层
    两个工具类,兼容两个版本xslx2007+,和2003的.xsl格式

     public static ArrayList<ArrayList<Object>> readExcel2007(InputStream is) {
            try {
                ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
                ArrayList<Object> colList;
                XSSFWorkbook wb = new XSSFWorkbook(is);
                System.out.println("获取到了字符流");
                XSSFSheet sheet = wb.getSheetAt(0);
                XSSFRow row;
                XSSFCell cell;
                Object value = null;
    
                for (int i = sheet.getFirstRowNum() + 1, rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) {
                    row = sheet.getRow(i);
                    colList = new ArrayList<Object>();
                    if (row == null) {
                        if (i != sheet.getPhysicalNumberOfRows()) {
                            rowList.add(colList);
                        }
                        return rowList;
                    } else {
                        rowCount++;
                    }
                    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
                        cell = row.getCell(j);
                        if (cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
                            if (j != row.getLastCellNum()) {
                                colList.add("");
                            }
                            continue;
                        }
    
                        if (null != cell) {
                            switch (cell.getCellType()) {
                                case HSSFCell.CELL_TYPE_NUMERIC:
                                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                                        value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
                                        break;
                                    } else {
                                        Double d = cell.getNumericCellValue();
                                        DecimalFormat df = new DecimalFormat("#.##");
                                        value = df.format(d);
                                    }
                                    break;
    
                                case HSSFCell.CELL_TYPE_STRING:
                                    value = cell.getStringCellValue();
                                    break;
    
                                case HSSFCell.CELL_TYPE_BOOLEAN:
                                    value = cell.getBooleanCellValue() + "";
                                    break;
    
                                case HSSFCell.CELL_TYPE_FORMULA:
                                    value = cell.getCellFormula() + "";
                                    break;
    
                                case HSSFCell.CELL_TYPE_BLANK:
                                    value = "";
                                    break;
    
                                case HSSFCell.CELL_TYPE_ERROR:
                                    value = "非法字符";
                                    break;
    
                                default:
                                    value = "未知类型";
                                    break;
                            }
    
                        }
                        colList.add(value);
                    }
                    rowList.add(colList);
                }
                if (is != null) {
                    is.close();
                }
                return rowList;
            } catch (Exception e) {
                System.out.println("exception");
                return null;
            }
    
        }
    
    
        public static ArrayList<ArrayList<Object>> readExcel2003(InputStream is) {
            try {
                ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
                ArrayList<Object> colList;
                HSSFWorkbook wb = new HSSFWorkbook(is);
                HSSFSheet sheet = wb.getSheetAt(0);
                HSSFRow row;
                HSSFCell cell;
                Object value = null;
                for (int i = sheet.getFirstRowNum() + 1, rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) {
                    row = sheet.getRow(i);
                    colList = new ArrayList<Object>();
                    if (row == null) {
                        if (i != sheet.getPhysicalNumberOfRows()) {// 判断是否是最后一行
                            rowList.add(colList);
                        }
                        return rowList;
                    } else {
                        rowCount++;
                    }
                    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
                        cell = row.getCell(j);
                        if (cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
                            if (j != row.getLastCellNum()) {
                                colList.add("");
                            }
                            continue;
                        }
                        if (null != cell) {
                            switch (cell.getCellType()) {
                                case HSSFCell.CELL_TYPE_NUMERIC:
                                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                                        value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
                                        break;
                                    } else {
                                        Double d = cell.getNumericCellValue();
                                        DecimalFormat df = new DecimalFormat("#.##");
                                        value = df.format(d);
                                    }
                                    break;
                                case HSSFCell.CELL_TYPE_STRING:
                                    value = cell.getStringCellValue();
                                    break;
                                case HSSFCell.CELL_TYPE_BOOLEAN:
                                    value = cell.getBooleanCellValue() + "";
                                    break;
                                case HSSFCell.CELL_TYPE_FORMULA:
                                    value = cell.getCellFormula() + "";
                                    break;
                                case HSSFCell.CELL_TYPE_BLANK:
                                    value = "";
                                    break;
                                case HSSFCell.CELL_TYPE_ERROR:
                                    value = "非法字符";
                                    break;
                                default:
                                    value = "未知类型";
                                    break;
                            }
    
                        }
                        colList.add(value);
                    }
                    rowList.add(colList);
                }
                if (is != null) {
                    is.close();
                }
                return rowList;
            } catch (Exception e) {
                return null;
            }
        }
    
    

    配置Spingmvc的上传文件配置

        <bean id="multipartResolver"
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="maxUploadSize" value="20000000"></property> <!-- 最大上传文件大小 20000kb,注意是多个文件的和-->
        <property name="maxInMemorySize" value="10960"></property>
        </bean>
    

    代码差不多就结束了.

    展开全文
  • 文章目录1. 效果2. 思路3. 项目结构4. 源码4.1 `pom.xml`添加相关依赖4.2 `application.properties`相关配置4.3 `Bill.java`实体类4.4 ...使用PoiPoi-ooxml实现Excel解析 使用MySQL与MyBatis实现数据库连接与操作
  • SpringBoot + Vue实现导入Excel到数据库与导出数据库数据Excel表格 一、导入excel表格到数据库 (一)后端实现 1.导入POI依赖 <!--导入POI依赖,ms office文件生成--> <dependency> <groupId>...
  • 使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...
  • poi实现导入excel数据到数据库工具类

    千次阅读 2018-04-18 22:37:39
    在日常开发中,我们经常会遇到excel数据的导入导出,这块功能本身没有什么复杂的业务逻辑,只是需要一些简单的工具类,这里简单实现一个读取excel数据保存到数据库中(我们可能需要对excel中的数据进行比对挑选,符合...
  • 找了好久都每一个合适的,自己总算搞定了就传上来共享下,使用springmvc+poi,先要上传然后需要获取上传的地址然后解析excel就可以了不要忘记了加上配置文件中的bean
  • JAVA中用POI实现EXCEL导入数据库

    万次阅读 2018-09-10 17:33:46
    EXCEL导入涉及的注意点: EXCEL导入时去除多余空格 单元格的合并 - 第一步:通过文件路径、文件名读取EXCEL信息 package com.fh.util; import java.io.File; import java.io.FileInputStream; ...
  • java POI Excel数据导入数据库

    千次阅读 2018-11-22 22:27:45
    Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI 提供 API 给 Java 程式对 Microsoft Office(Excel、WORD、PowerPoint、Visio 等,主要实现用于 Excel)格式档案读和写的功能,POI 为 “ Poor...
  • 利用 Apache POIexcel 操作并存入MySQL数据库的一个小demo。
  • 1.上篇博文主要介绍了使用JXL,POI技术将数据库表数据导出为Excel; 2.本篇主要介绍导入功能的实现; 3.还是以POI技术为主,JXL这里只做代码展示,若有兴趣可以私下研究 4.使用JXL从Excel表格中读取数据代码示例: ...
  • POIEXCEL数据导入到数据库

    千次阅读 2018-05-15 14:42:48
    1.今天项目需要添加需求,将excel表格导入到数据库中。想起利用poi框架去实现,在网上找了一个工具类,经测试,可以使用,附上代码因为是maven 管理项目,所以引入poi相关jar包 &lt;dependency&gt; &lt...
  • 注意:本次导入数据库,支持的是Excel 2003版本及以前的。 import java.io.FileInputStream; import java.sql.Connection; import java.sql.Date; import java.text.SimpleDateFormat; import org.apache....
  • 简单记录一下springboot整合poi导入excel表格 一、导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17<...
  • spring boot+mybatis plus+easy poi实现数据库导出成excelexcel导入到数据库
  • 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库1.poi简单介绍 1.poi简单介绍
  • excel表格中数据导入MySQL数据库中 思路:创建模板 -&gt; 下载模板 -&gt; 填写内容 -&gt; 导入数据(将导入失败的数据在页面中提示) 1. 创建excel模板(template.xlsx) 1.1 模板内容如图: 1.2.将...
  • SSM框架poi实现excel数据导入到MySQL数据库 前端代码 <td style="vertical-align:top;padding-left:2px;"> <a class="btn btn-light btn-xs" onclick="fromExcel();" title="从EXCEL导入"> <i id=...
  • 1.jsp 2.js var downloadBtn = new Ext.... text:"导入模版下载", iconCls:'excel', handler:function(){ var serverPath1 = location.protocol+"//"+location.host+"/xx/downLoad/metersInputModel_
  • 使用poi导入excel文件数据到数据库

    千次阅读 2016-07-14 09:28:55
    excel 文件 " ) ;   } Workbook workbook = WorkbookFactory.create(multipartFile.getInputStream()) ;   Sheet sheet = workbook.getSheetAt( 0 ) ; int rows = sheet.getLastRowNum() ; int ...
  • 功能实现:一个controller接口读取不同的excel,并导入到对应的数据库表中(一张excel表对应一张数据库表)。 方案:用POI工具,抽取导入公共类(ExcelReadUtil),不同的数据库导入,都继承这个公共类中的抽象类...
  • 数据库中有多表,导入Excel是如何判断应该导入哪个表中的?
  • IDEA中开发SpringBoot项目时需要将Excel模板中数据导入到数据库Excel模板如下 实现思想 首先将模板上传服务器中某路径,并将当前路径存储,然后使用POI自带的 工具类获取sheet以及行数以及每个cell,...
  • ![图片说明](https://img-ask.csdn.net/upload/201510/08/1444290580_466806.png) ![图片说明](https://img-ask.csdn.net/upload/201510/08/1444290660_809106.png)

空空如也

空空如也

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

poi导入excel到数据库