导入Excel数据到数据库

版权声明:嗯哼 https://blog.csdn.net/lfy609225258/article/details/82773006

 java要导入Excel数据, 那么首先要读取Excel  至于 把读取到的数据存入数据库  那就很简单啦 ,略过咯  

下面讲一讲 读取Excel数据 :

1.首先 要通过磁盘路径和文件名 获取Excel文件,如果文件不在项目运行的服务器上,要先把Excel文件上传到服务器指定磁盘下,然后再通过该路径获取文件,直接以流的形式传输到后台也是可以的.

第一步  导入文件到java项目运行地

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.szboanda.wdsa.exportData.service.DbResultService;
import com.szboanda.wdsa.surfacwater.pjfw.service.SurfacWaterAutoEvaluateService;
import net.sf.json.JSONObject;

/**
 * 导入excel
 * @author Administrator
 *
 */
public class ImportFile {
    
    ParseFile parseFile = new ParseFile();//Excel文件处理层
    private String uploadPath = "C:/ImportExcelFile/"; // 上传文件的目录  
    File tempPathFile;  
    DbResultService dbservice = new DbResultService();
    
    /**
     *第一步 导入文件
     * @throws IOException 
     * @throws FileUploadException 
     */
    public void importFile(HttpServletRequest req,  HttpServletResponse res) throws IOException, FileUploadException{
        //接收参数
        DiskFileItemFactory factorypage = new DiskFileItemFactory();   
        ServletFileUpload uploadpage = new ServletFileUpload(factorypage);
        List<FileItem> itemspage = uploadpage.parseRequest(req);
        Map<String, String> params = new HashMap<String,String>();   
        for(Object object:itemspage){  
            FileItem fileItem = (FileItem) object;   
            if (fileItem.isFormField()) {   
                params.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的   
            }  
        }   
        //使用params.get获取参数值
        String year = (String) params.get("year");
        String month = (String) params.get("month");
        String type = (String) params.get("type");
        JSONObject obj = new JSONObject();  
        try {  
            //查看文件夹是否存在 .如果不存在则创建文件夹
            judeDirExists(uploadPath);
            // 为基于磁盘的文件项创建工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();  
  
            //设置工厂约束
            factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb  
            factory.setRepository(tempPathFile);// 设置缓冲区目录  
  
            // 创建一个新文件上传处理程序
            ServletFileUpload upload = new ServletFileUpload(factory);  
  
            // 设置总体请求大小约束
            upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB  
            //iterator 迭代器
            Iterator<FileItem> i = itemspage.iterator();  
            while (i.hasNext()) {  
                FileItem fi = (FileItem) i.next();  
                String fileName = fi.getName();  
                if (fileName != null) {  
                    //获取文件流
                    File fullFile = new File(new String(fi.getName().getBytes(), "utf-8")); // 解决文件名乱码问题  
                    //获取文件名  创建新的文件
                    File savedFile = new File(uploadPath, fullFile.getName());
                    String filename = fullFile.getName();
                    String filetype = filename.substring(filename.lastIndexOf("."));
                    //判断是否为xml后缀的文件(支持.xls 和.xlsx 两种格式文件)
                    if(filetype.equals(".xls")||filetype.equals(".xlsx")){  

                     //在这里保存文件到本地

                      fi.write(savedFile);
                           getHLData(uploadPath,filename); //读取Excel文件方法.
                    }
                  
                }  
            }  
            //上传成功
        } catch (Exception e) {  
            e.printStackTrace();
        }  
        res.getWriter().println(obj); //用来给前端返回导入情况, 自己视情况写写
    }
    
    
    // 判断文件夹是否存在
    public static void judeDirExists(String file) {
        
        try {
            if (!(new File(file).isDirectory())) {
             new File(file).mkdir();
            }
           } catch (SecurityException e) {
            e.printStackTrace();
           }

    }
    
}   

第二部分, 读取Excel文件中的数据 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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 com.szboanda.platform.util.BeanUtils;
import com.szboanda.platform.util.helper.ActionHelper;
import com.szboanda.wdsa.importExcel.importFile.dao.ImportDAO;
import jxl.read.biff.BiffException;
import net.sf.json.JSONObject;


//第二部分, 查看
public class ParseFile {

   ImportDAO dao = new ImportDAO();
     //读取excel  用来兼容 .xls 和 .xlsx 两种格式
    public static Workbook readExcel(String filePath){
        Workbook wb = null;
        if(filePath==null){
            return null;
        }
        String extString = filePath.substring(filePath.lastIndexOf("."));
        InputStream is = null;
        try {
            is = new FileInputStream(filePath);
            if(".xls".equals(extString)){
               return wb = new HSSFWorkbook(is);
            }else if(".xlsx".equals(extString)){
               return wb = new XSSFWorkbook(is);
            }else{
                return wb = null;
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return wb;
    }

    // 通过文件名和路径 找到Excel  然后读取Excel中的数据
    public  Object getHLData(String filepath, String filename) throws Exception {
 
        // 通过文件的磁盘路径 获取文件流.
        Workbook wb = readExcel(filepath + filename);
        // 获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....)
        Sheet sheet = wb.getSheetAt(sheetnum);
        // 行数
        int rownum = sheet.getPhysicalNumberOfRows();
        //创建list对象
        List<Map<String,Object> datalist = new ArrayList<>();

        //获取第0行,   也就是最上面一行, 一般用来做表头 字段
         Row row0 = sheet.getRow(0);
        for (int i = 1; i < rownum; i++) {
            //循环获取Excel中的每行数据
            Row row  = sheet.getRow(i); 
            //获取该行的数据列数
            int linenum = row.getPhysicalNumberOfCells();
            Map<String,Object> map  = new HashMap<>();

            //获取该行每一列数据
            for (int n = 0; n < linenum ; n++) {
                //获取该列字段名
                String linename = row0.getCell(n).toString();
                //获取该行 第0列的数据, 以次类推
                String linedata  = row.getCell(n).toString();
                //建立一个map对象 然后将每一个格的数据放入map中, 然后就可以用来插入数据库中  
                map.put(linename,linedata);
                ******  此处省略            
            }
            datalist.add(map);
        }
        
        //此时获取的数据都存入datalist中,  然后将datalist  批量插入数据库即可
        dao.insertData(datalist);
        Object obj = new Object(); 
        return obj;//返回运行结果, 内容自行设定
    }


}

以上代码都是功能主体部分, 其他的操作可自行添加.,,

需要导入poi的几个jar包. 到时可搜索一下

猜你喜欢

转载自blog.csdn.net/lfy609225258/article/details/82773006