`
liubin5620
  • 浏览: 1563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

导入excel文件将数据插入到数据库并且以列表形式展示

阅读更多
1、前端页面(只展示核心代码片段,即文件导入按钮)
<form class="form-inline" id="productSearchForm">
  <div class="form-group">
     <label for="productName">产品名称:</label>
                 <input type="text" class="form-control input-sm" name="productName" />
  </div>
  <button type="button" class="b-redBtn btn-i" id="searchBtn">
     <i class="iconfont">&#xe67a;</i>查询
  </button>
  <button type="button" class="b-redBtn  btn-i" id="resetBtn">
     <i class="iconfont">&#xe647;</i>重置查询
  </button>
  <button type="button" class="b-redBtn  btn-i" id="addProductBtn">
     <i class="iconfont">&#xe635;</i>新增产品
  </button>
  <a id="downloadFile" href="<%=webpath%>/resources/js/orderCenter/productTabTemplet.xlsx">
    <button type="button" class="b-redBtn  btn-i" id="downloadTempletBtn">
      <i class="iconfont">&#xe724;</i>模板下载
    </button>
  </a>
  <input type="file" name="files" id="files" style="display:none;" />
   <button type="button" class="b-redBtn  btn-i" id="excelImportBtn" onclick="scan()">
      <i class="iconfont">&#xe680;</i>excel导入
   </button>
   <span id="fileInput"></span>
</form>
2、核心js代码片段展示
function scan() {
   var files = document.getElementById("files");
   files.setAttribute("onchange", "fileCheck(this)");
   layer.confirm('导入excel前,请先下载左侧模板、按照模板指定格式,完成填写并导入,否则会导入失败!', {
   icon: 3,
   btn: ['是','否'] //按钮
   },function(index, layero){
layer.close(index);
files.click();
    });
}

function fileCheck(obj){
   for (var i = 0; i < obj.files.length; i++) {
var fileName = obj.files[i].name;
var postfix = obj.files[i].name.match(/^(.*)(\.)(.{1,8})$/)[3].toLowerCase(); //获得上传文件的后缀名的正则表达式;
var fileMaxSize=(obj.files[i].size/1024/1024).toFixed(2);                     //前端获取待上传的文件大小
if (!(postfix == "xlsx" || postfix == "xls")) {
layer.confirm('文件类型不正确,请重新上传excel文件!', {
        icon: 3,
        btn: ['是','否'] //按钮
},function(index, layero){
      layer.close(index);
   //window.location.href=webpath+"/orderCenter/productManage";
  });
$('#files').val('');
return false;
};

if(fileMaxSize > 1){
     layer.confirm('excel文件文件大小不得超过1M,请重新上传 !', {
     icon: 3,
     btn: ['是','否'] //按钮
   },function(index, layero){
layer.close(index);
  });
  $('#files').val('');
return false;
}
   var fileNameInput=document.getElementById("fileInput");
   fileNameInput.innerText=fileName;
   //layer.msg(content, options, end)开始导入数据

   layer.msg('开始导入excel数据,请稍等...', {
     icon: 6,
     time: 3000 //3秒关闭(如果不配置,默认是3秒)
    }, function(){
//layer.alert('测试');
$.ajaxFileUpload({
url :webpath+"/orderCenter/importExcel",
fileElementId : "files",
type : "post",
dataType : "text",
data : {"flag":"开始导入"},
success : function(data){ 
        var result = data.replace("<pre>", "").replace("</pre>", "").replace("<PRE>", "").replace("</PRE>", "").replace(/<[^>]+>/g, "");
var resultFlag=$.parseJSON(result);    
receiveData(resultFlag);
   }
});
console.log("已经导入excel中的数据");
});

function receiveData(resultFlag){
    if(resultFlag.idIsNull=="true"){       
alert('导入失败,导入的产品ID存在空值,位于表格第'+resultFlag.errorLine+'行');
}
    if(resultFlag.idIsRepeat=="true"){
    alert('导入失败,导入的产品ID存在重复,请仔细检查!');
    }
    if(resultFlag.idCodeIsNotSame=="true"){
    alert('导入失败,导入的产品ID和产品编码不一致,位于表格第'+resultFlag.errorLine+'行');
    }
    if(resultFlag.excelAndTabRepeat=="true"){
    alert('导入失败,导入的产品编码在数据库码表中早已存在,重复的产品编码为'+resultFlag.repeatCode);
    }
window.location.href=webpath+"/orderCenter/productManage";
console.log("导入完成");
}
    }
}
java核心代码展示
// 导入产品的表格数据
@ResponseBody
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Map<String,Object> importExcel(String flag, HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
String fileName = null;
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
Iterator<?> iter = mr.getFileMap().values().iterator();
// 支持多文件上传,暂时是单文件的上传
if (iter.hasNext()) {
MultipartFile file = (MultipartFile) iter.next();
try {
Workbook book = null;
try {
book = new XSSFWorkbook(file.getInputStream());
} catch (Exception ex) {
book = new HSSFWorkbook(file.getInputStream());
}
// 获得第一个工作薄
Sheet sheet = book.getSheetAt(0);
Row row = null;
Row row2 = null;
Row row3=null;
boolean idIsNull=false;
int errorLine=0;
//判断product_id是否有重复
boolean isRepeat = false;
//id和code是否相同idCodeIsSame
boolean idCodeIsNotSame=false;
// 获得总行数
int totalRows = sheet.getLastRowNum();
// 获得总列数
int coloumNum = sheet.getRow(1).getPhysicalNumberOfCells();
System.out.println("总行数totalRows==>" + totalRows);
System.out.println("总列数coloumNum==>" + coloumNum);
System.out.println("开始获取表格中的数据");
// 表格数据的行数为
int verifyNum = totalRows - 2;
String[] procIdArr = new String[verifyNum];
String[] procCodeArr = new String[verifyNum];

for (int i = 3; i <= totalRows; i++) {
row2 = sheet.getRow(i);
if(null !=row2.getCell(0)){
System.out.println("row2.getCell(0)===>"+row2.getCell(0));
String tem = row2.getCell(0).toString();
System.out.println("第一列procId:从第三行开始--》" + tem);
procIdArr[i - 3] = tem;
}
if(null==row2.getCell(0)){
idIsNull=true;
errorLine=i+1;
String errorLineStr=String.valueOf(errorLine);
params.put("idIsNull", "true");
params.put("errorLine", errorLineStr);
System.out.println("--idIsNull---"+idIsNull+"---errorLine-->"+errorLine);
return params;
}
}

Set<String> set = new HashSet<String>();
for (String str : procIdArr) {
set.add(str);
}
if (set.size() != procIdArr.length) {
isRepeat = true;// 重复
params.put("idIsRepeat", "true");
return params;
} else {
isRepeat = false;// 不重复
}
System.out.println("判断productId是否存在重复的判断结果为==>"+isRepeat);

for (int i = 3; i <= totalRows; i++) {
row3 = sheet.getRow(i);
String tem3 = row3.getCell(1).toString();
System.out.println("第二列:从第三行开始--》" + tem3);
procCodeArr[i - 3] = tem3;
}
for (int k = 0; k < procIdArr.length; k++) {
if(!procCodeArr[k].equals(procIdArr[k])){
idCodeIsNotSame=true;
errorLine=k+4;
String errorLineStr=String.valueOf(errorLine);
params.put("idCodeIsNotSame", "true");
params.put("errorLine", errorLineStr);
return params;
}
}
System.out.println("id和code是否相同"+idCodeIsNotSame+"是在第几行==>"+errorLine);

//校验表格id和数据库码表中的id是否有相同,有相同,则不让其导入;
for(int i=0;i<procCodeArr.length;i++){
String excelAndTabRepeat=orderCenterService.validateProCodeIsExist(procCodeArr[i]);
if(null!=excelAndTabRepeat){
params.put("excelAndTabRepeat", "true");
params.put("repeatCode", excelAndTabRepeat);
return params;
}
}

for (int i = 3; i <= totalRows; i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
for (int k = 0; k < coloumNum; k++) {
String productField = sheet.getRow(2).getCell(k).toString().trim();
if (!"ORD".equalsIgnoreCase(productField) && !"RST6".equalsIgnoreCase(productField) && !"RST7".equalsIgnoreCase(productField)) {
if (row.getCell(k) == null) {
params.put(productField, "");
continue;
}
String productFieldValue = row.getCell(k).toString().trim();
params.put(productField, productFieldValue);
}
if ("ORD".equalsIgnoreCase(productField)) {
if (row.getCell(k) == null) {
params.put(productField, "");
continue;
}
String productFieldValue = row.getCell(k).toString().trim();
// 数据库码表中,字段类型为mediumint
params.put(productField, Integer.parseInt(productFieldValue));
}
if ("RST6".equalsIgnoreCase(productField) || "RST7".equalsIgnoreCase(productField)) {
if (row.getCell(k) == null) {
params.put(productField, "");
continue;
}
String productFieldValue = row.getCell(k).toString().trim();
// 数据库码表中,字段类型为decimal
BigDecimal bd = new BigDecimal(productFieldValue);
params.put(productField, bd);
}
}
// 开始执行测试代码
System.out.println("=======" + i);
System.out.println(params);
// 开始将表格数据导入到数据库
orderCenterService.importExcelDatas(params);
}
fileName = file.getOriginalFilename();
System.out.println("文件名为:" + fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
params.put("processNormal", "true");
return params;
}
分享到:
评论

相关推荐

    SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...

    C#将数据导入excel和Excel数据导入数据库

    本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...

    c# 操作excel(c#实现excel数据读出并插入到数据库)

    本主题聚焦于如何利用C#操作Excel文件,并将其中的数据读取出来,然后插入到数据库中。这对于数据迁移、数据分析或者报表生成等场景非常常见。 首先,要操作Excel文件,C#开发者通常会使用Microsoft提供的`...

    excel导入数据到Oracle数据库

    3. **准备Excel文件**:确保Excel文件中的数据格式正确,并且包含所有需要导入到数据库表中的列。 #### 三、本地测试环境数据导入步骤 1. **登录PL/SQL Developer**:启动PL/SQL Developer并连接到本地测试数据库...

    java实现Excel数据导入到数据库

    在Java编程环境中,将Excel数据导入到数据库以及将数据库数据导出到Excel是常见的数据处理需求。本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java ...

    javaWeb导入Excel分析后添加到数据库

    在JavaWeb开发中,将Excel数据导入到数据库是一项常见的需求,尤其在数据处理、报表生成或数据分析场景下。本项目提供了完整的源码实现,帮助开发者理解并应用这一功能。通过以下步骤,我们可以实现这个过程: 1. *...

    导入Excel数据到MS Sql数据库托管C++代码

    然后,我们可以创建一个`SqlCommand`对象来执行INSERT语句,将Excel数据插入数据库: ```cpp SqlCommand^ sqlCmd = gcnew SqlCommand(); sqlCmd-&gt;Connection = sqlConn; sqlCmd-&gt;CommandType = CommandType::Text; ...

    vb.net将excel中的数据导入到数据库

    本篇文章将详细介绍如何使用VB.NET实现将Excel文件中的数据导入到SQL Server数据库的过程,并对代码进行逐行解析,帮助读者更好地理解和掌握这一技术。 #### 1. 连接Excel文件 首先,我们需要建立与Excel文件的...

    将Excel文件导入到数据库中或将数据库中文件导出Excel中

    以下将详细介绍如何将Excel文件导入到数据库中,以及如何将数据库中的数据导出到Excel中。 首先,将Excel文件导入数据库通常涉及到以下几个步骤: 1. 数据预处理:在Excel中整理数据,确保格式正确,无错误或缺失...

    java实现Excel数据导入到mysql数据库.zip

    本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...

    C# Excel文件导入到Access数据库

    本主题聚焦于使用C#编程语言将Excel文件的数据导入到Access数据库的过程,这是一个常见的数据处理需求,特别是在数据整合和分析时。以下是对这一过程的详细阐述。 首先,我们需要理解C#的基础知识。C#是一种面向...

    C#Excel大量数据快速导入数据库

    当需要处理Excel中的大量数据并将其快速导入到数据库时,C#提供了一些高效的方法来实现这一目标。本文将详细讲解如何利用C#实现Excel数据的高效导入。 首先,我们需要了解如何在C#中读取Excel文件。.NET Framework...

    从Excel中读取数据导入到数据库中

    本文将详细阐述如何从Excel文件中读取数据并将其导入到数据库中,重点处理合并单元格和超过4000字符的数据列。 首先,我们需要理解Excel是常用的数据存储和处理工具,而数据库如MySQL、SQL Server、Oracle等则用于...

    Excel把数据导入到SQL数据库中

    3. 安装 Excel 数据连接驱动程序:需要安装 Excel 数据连接驱动程序,以便将 Excel 数据导入到 SQL 数据库中。 二、选择数据源 在将 Excel 数据导入到 SQL 数据库中之前,需要选择要导入的数据源。在 Excel 中,...

    数据导入到excel和读取excel数据到数据库

    本文将详细讲解如何将数据导入到Excel以及如何从Excel读取数据并导入到数据库,以实现高效的数据操作。 一、数据导入到Excel 1. 手动导入:最简单的方式是直接复制其他源(如文本文件、数据库表)中的数据,然后在...

    asp中导入excel文件数据到access数据库中程序代码

    ### ASP中导入Excel文件数据到Access数据库 #### 一、项目背景与需求分析 在实际工作中,常常会遇到需要将Excel文件中的数据批量导入到数据库中的场景。例如,对于一个小型的企业管理系统,可能需要用户上传一个...

    易语言导入EXCEL到EDB数据库源码

    在这个“易语言导入EXCEL到EDB数据库源码”的项目中,我们主要讨论的是如何利用易语言来处理数据导入的操作,特别是将Excel数据导入到EDB(EasyDatabase,易语言自有的数据库格式)数据库。 首先,我们需要理解...

    excel批量导入数据库

    首先,Excel文件(通常是.XLSX或.XLS格式)中的数据被解析,然后根据预定义的映射规则转换成数据库可识别的格式,最后这些数据被插入到合适的数据库表中。这一过程通常需要编程知识,如SQL和Python等,但也有许多...

Global site tag (gtag.js) - Google Analytics