前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中。花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架)。

1.web.xml中的配置文件

web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换成你的配置文件名即可

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:application.xml

2.application.xml的配置文件(固定写发)

在这个配置文件中你还可以规定上传文件的格式以及大小等多种属性限制

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

3.文件上传的前端HTML

注意:

1.enctype="multipart/form-data" 必须写,封装表单

2.method="post",提交方式必须为"post"提交

3.action="${text}/uploadfile", "uploadfile"切记不要写成"upload",否则你找到世界末日也不会找到哪里有问题(本人因为这个折腾了一天多时间)。

请选择正确的excel文件上传

支持的excel格式为:xls、xlsx、xlsb、xlsm、xlst!

4.验证上传文件的格式

//用于验证文件扩展名的正则表达式

function checkSuffix(){

var name = document.getElementById("txt").value;

var strRegex = "(.xls|.xlsx|.xlsb|.xlsm|.xlst)$";

var re=new RegExp(strRegex);

if (re.test(name.toLowerCase())){

alert("上传成功");

document.fileupload.submit();

} else{

alert("文件名不合法");

}

}

5.dao层的接口和实现类

package com.gxxy.team1.yyd.dao;

public interface IFileUploadDao {

public void save(Object o);

}

package com.gxxy.team1.yyd.dao.impl;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import com.gxxy.team1.yyd.dao.IFileUploadDao;

@Repository

public class FileUploadDaoImpl implements IFileUploadDao {

@Autowired

private SessionFactory sessionFactory;

private Session getSession() {

Session session = sessionFactory.getCurrentSession();

return session;

}

@Override

public void save(Object o) {

getSession().save(o);

}

}

6.service层的接口和实现类

package com.gxxy.team1.yyd.service;

import java.util.List;

public interface IFileUploadService {

public List readExcel(String path);

public void save(Object o);

}

package com.gxxy.team1.yyd.service.impl;

import java.io.File;

import java.io.FileInputStream;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

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.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.gxxy.team1.yyd.dao.IFileUploadDao;

import com.gxxy.team1.yyd.service.IFileUploadService;

@Service

public class FileUploadServiceImpl implements IFileUploadService {

@Autowired

private IFileUploadDao fileDao;

@Override

public List readExcel(String path) {

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");

List list = null;

try {

//同时支持Excel 2003、2007

File excelFile = new File(path); //创建文件对象

FileInputStream is = new FileInputStream(excelFile); //文件流

Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的

int sheetCount = workbook.getNumberOfSheets(); //Sheet的数量

//存储数据容器

list = new ArrayList();

//遍历每个Sheet

for (int s = 0; s < sheetCount; s++) {

Sheet sheet = workbook.getSheetAt(s);

int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数

//遍历每一行

for (int r = 0; r < rowCount; r++) {

Row row = sheet.getRow(r);

int cellCount = row.getPhysicalNumberOfCells(); //获取总列数

//用来存储每行数据的容器

String[] model = new String[cellCount-1];

//遍历每一列

for (int c = 0; c < cellCount; c++) {

Cell cell = row.getCell(c);

int cellType = cell.getCellType();

if(c == 0) continue;//第一列ID为标志列,不解析

String cellValue = null;

switch(cellType) {

case Cell.CELL_TYPE_STRING: //文本

cellValue = cell.getStringCellValue();

//model[c-1] = cellValue;

break;

case Cell.CELL_TYPE_NUMERIC: //数字、日期

if(DateUtil.isCellDateFormatted(cell)) {

cellValue = fmt.format(cell.getDateCellValue()); //日期型

//model[c-1] = cellValue;

}

else {

cellValue = String.valueOf(cell.getNumericCellValue()); //数字

//model[c-1] = cellValue;

}

break;

case Cell.CELL_TYPE_BOOLEAN: //布尔型

cellValue = String.valueOf(cell.getBooleanCellValue());

break;

case Cell.CELL_TYPE_BLANK: //空白

cellValue = cell.getStringCellValue();

break;

case Cell.CELL_TYPE_ERROR: //错误

cellValue = "错误";

break;

case Cell.CELL_TYPE_FORMULA: //公式

cellValue = "错误";

break;

default:

cellValue = "错误";

}

System.out.print(cellValue + " ");

model[c-1] = cellValue;

}

//model放入list容器中

list.add(model);

System.out.println();

}

}

is.close();

}

catch (Exception e) {

e.printStackTrace();

}

return list;

}

@Override

public void save(Object o) {

fileDao.save(o);

}

}

7.controller层实现

//文件上传方法

@RequestMapping("/uploadfile")

public String upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, ModelMap model,Model mod) throws Exception {

String path = request.getSession().getServletContext().getRealPath("upload");

System.out.println("文件路径:"+path);

String originalFilename = file.getOriginalFilename();

String type = file.getContentType();

//originalFilename = UUID.randomUUID().toString()+originalFilename;

System.out.println("目标文件名称:"+originalFilename+",目标文件类型:"+type);

File targetFile = new File(path,originalFilename );

if (!targetFile.getParentFile().exists()) {

targetFile.getParentFile().mkdirs();

}else if (!targetFile.exists()) {

targetFile.mkdirs();

}

// 获得上传文件的文件扩展名

String subname = originalFilename.substring(originalFilename.lastIndexOf(".")+1);

System.out.println("文件的扩展名:"+subname);

try {

file.transferTo(targetFile);

} catch (Exception e) {

e.printStackTrace();

}

FileUploadServiceImpl fileUp = new FileUploadServiceImpl();

String rootpath = path + File.separator + originalFilename;

List excellist = fileUp.readExcel(rootpath);

int len = excellist.size();

System.out.println("集合的长度为:"+len);

for (int i = 0; i < len; i++) {

String[] fields = excellist.get(i);

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String sampleNo = fields[0];

Double valueOf = Double.valueOf(fields[1]);

int sampleType = valueOf.intValue(); //double转int

String createTime = fields[2];

Date createTime1 = format.parse(createTime);

String name = fields[3];

String pId = fields[4];

String hospitalName = fields[5];

String cellPhone = fields[6];

Sample sample = new Sample(sampleNo, sampleType, createTime1, name, pId);

Patient patient = new Patient(hospitalName, cellPhone);

fileService.save(sample);

fileService.save(patient);

}

//model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+originalFilename);

String username = (String) request.getSession().getAttribute("username");

List> power = powerService.power(username);

mod.addAttribute("list", power);

return "redirect:/ yyd";

}

以上这7个部分就是我实现解析excel文件并存入数据库的全部代码。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库相关推荐

  1. mysql数据库 导入excel_如何在MySQL数据库中导入excel文件内的数据 详细始末

    在开发项目的时候通常需要使用数据库,数据库Database是用来存储和管理数据的仓库.下面,我们以MySQL数据库为例来看看如何在数据库中导入excel文件内的数据吧. 操作方法 01 MySQL 打 ...

  2. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  3. java解析excel文件详解_java解析excel文件的方法

    建立工程前需要导入POI包.POI相关jar包下载地址:http://poi.apache.org/download.html 1.解析.xlsx后缀名的的EXCEL文件: package com.s ...

  4. excel文件存入mysql_解析excel文件并将数据导入到数据库中

    今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...

  5. phpexcel 读取excel文件在将数据插入数据库

    public function acIndex(){$fileName = "C:\Users\**\Desktop\省市区编码 .xlsx";if (!file_exists($ ...

  6. 微信小程序使用node-xlsx解析excel文件的云函数

    1.右键新建node.js云函数 2.在该云函数右键:在外部终端窗口打开 3.输入npm install node-xlsx,回车 4.引入并写程序,如下 // 云函数入口文件 const cloud ...

  7. poi读取excel 转换实体_java解析excel数据,将excel数据转换为实体类,存入数据库...

    前一段时间写了一个功能,从数据库中抽取出来的字段,写入到excel文件里:java使用poi把从数据库中取出的数据写入excel 最近实现了一个相反的功能,前台传一个excel文件,在后台解析该exc ...

  8. java解析excel存入map,java解析excel数据,将excel数据转换为实体类,存入数据库

    前一段时间写了一个功能,从数据库中抽取出来的字段,写入到excel文件里:java使用poi把从数据库中取出的数据写入excel 最近实现了一个相反的功能,前台传一个excel文件,在后台解析该exc ...

  9. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

最新文章

  1. Hi Table定义未来电视!祝贺海信发布S7社交电视! ​
  2. Access注入偏移爆字段
  3. 一个简单的linux线程池
  4. 西安交大送大一新生这本书,你读过吗?12本有趣有料的科普书盘点
  5. linux故障转移集群,部署AlwaysOn第一步:搭建Windows服务器故障转移集群
  6. 谈区块链的时候别忘记了“新零售”
  7. 关于如何修改CSDN中的字体大小和颜色
  8. cout一位小数_C++ cout 如何保留小数输出
  9. 设计python游戏贪吃蛇_Python 贪吃蛇游戏
  10. 人行地区代码一览表_世界各国和地区名称代码表
  11. centos ntp日志_centos NTP服务器配置总结
  12. 使用OpenResty控制CDN回源主机
  13. EMI原理、测量、解决
  14. nano板载电脑连接无线时断时续
  15. Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
  16. Matlab(2)基本操作与矩阵输入
  17. 图像对齐讲座—旷世成都研究院 数据策略产品经理——阿里讲座
  18. windows查看端口
  19. Opencv值core组件(二):感兴趣区域选取与计算数组加权和
  20. 前昆仑游戏CEO陈芳出任游族网络联席总裁 周亚辉送祝福

热门文章

  1. java se程序设计课后答案,JAVA SE程序设计及实践
  2. 回溯——伯努利装错信封问题
  3. freemarker使用说明_SpringBoot+Swagger2集成详细说明
  4. windows搜索工具_加快搞定并替代 Windows 10 搜索框搜索文件速度的免费小工具
  5. 从setTimeout,onclick传参看js函数作为参数
  6. eclipse 快捷键及插件
  7. java vbs_VBS基础篇 - vbscript Dictionary对象
  8. Linux批量删除文件
  9. Visual Studio 2005结合Direct 9.0 SDK(Aug2007)时应该注意的事项
  10. 离职证明电子版_离职证明中说劳动者因违纪离职的怎么办?