首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用angularJS1、hibernate(4.3.5)、Spring(4.2.4)将Excel文件导入数据库?

问如何使用angularJS1、hibernate(4.3.5)、Spring(4.2.4)将Excel文件导入数据库?
EN

Stack Overflow用户
提问于 2018-04-30 17:13:55
回答 3查看 5.2K关注 0票数 0

我想使用angularJS1,Hibernate 4.3.5,Spring mvc 4.2.4导入一个Excel文件到我的数据库中。Excel文件通过一个窗口导入(由子项“姓”、“名”和父项组成的表),该表以前是手动填写的。现在的目标是通过导入Excel文件自动填充表格。我可以读取google上的Excel文件(json格式),但我无法将其导入到我的数据库中。该项目由前端(angularJS1)和后端(hibernate、postgresSQL、DAO)组成。你能帮我个忙吗?这是自周四以来,我寻求的解决方案。谢谢

下面是读取json格式的excel文件的代码: file:...Controller.js (前面部分)

代码语言:javascript
复制
$scope.uploadFile = function (element) {
var file = element.files[0];
console.log("FILE", file);
var reader = new FileReader();
    reader.onload = function (event) {
        var data = event.target.result;
        /*Call XLSX*/
        var workbook = XLSX.read(data, {
            type: 'binary'
        });
        /* DO SOMETHING WITH workbook HERE */
        var first_sheet_name = workbook.SheetNames[0];
        /* Get worksheet */
        var worksheet = workbook.Sheets[first_sheet_name];
        var excelData = XLSX.utils.sheet_to_json(worksheet);
        console.log("EXCELDATA", excelData);
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-04-30 20:50:45

下面是为您创建的示例代码示例。

​

代码语言:javascript
复制
angular.module('app', [])
  .controller('ExcelReadCtrl', function($scope) {
  
   $scope.data = [{firstName:'AAA',lastName:'BBB',age:30}];
  
 
    $scope.READ = function() {
          /*Checks whether the file is a valid excel file*/
           var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.xlsx|.xls)$/;
           var xlsxflag = false; /*Flag for checking whether excel is .xls format or .xlsx format*/  
           if ($("#ngexcelfile").val().toLowerCase().indexOf(".xlsx") > 0) {  
             xlsxflag = true;  
            } 
           var reader = new FileReader();  
           reader.onload = function (e) {  
             var data = e.target.result;  
             if (xlsxflag) {  
               var workbook = XLSX.read(data, { type: 'binary' });  
             }  
             else {  
               var workbook = XLS.read(data, { type: 'binary' });  
             }    
             
             var sheet_name_list = workbook.SheetNames;  
             var cnt = 0; 
             sheet_name_list.forEach(function (y) { /*Iterate through all sheets*/  
               
               if (xlsxflag) {  
                 var exceljson = XLSX.utils.sheet_to_json(workbook.Sheets[y]);  
               }  
               else {  
                 var exceljson = XLS.utils.sheet_to_row_object_array(workbook.Sheets[y]);  
               }   
               if (exceljson.length > 0) {  
                 for (var i = 0; i < exceljson.length; i++) {  
                                      $scope.data.push(exceljson[i]);  
                                      $scope.$apply();  
                                         }  
               }  
             });  
           }  
           if (xlsxflag) {
             reader.readAsArrayBuffer($("#ngexcelfile")[0].files[0]);  
           }  
           else {  
             reader.readAsBinaryString($("#ngexcelfile")[0].files[0]);  
           }
    };
 
   
  });
代码语言:javascript
复制
<html ng-app="app">
 <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.7/xlsx.core.min.js"></script>   
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xls/0.7.4-a/xls.core.min.js"></script> 
    <script   src="https://code.jquery.com/jquery-1.12.4.min.js" 
  crossorigin="anonymous"></script>
  </head>
<body>
<div ng-app>
  <h2>Excel Format should be same as table below, xls.core.min.js reads first row as headers</h2>
  
  <div ng-controller="ExcelReadCtrl">
     <form>  
 <input type="file" id="ngexcelfile" />   
 <input type="button" value="Read Data" ng-click="READ()" />   
    <br />   
    <br />  
 <table border=1>  
 <thead>  
 <tr>  
 <th>Last Name</th>  
 <th>First Name</th>  
 <th>Age</th>  
 </tr>  
 </thead>  
 <tbody>  
 <tr ng-repeat="item in data"> 
 <td>{{item.lastName}}</td>   
 <td>{{item.firstName}}</td>    
  <td>{{item.age}}</td>   
  </tr>   
 </tbody>  
 </table>   
 </form>
  </div>
</div>
</body>
</html>

​

您的excel格式必须与您尝试加载的数据相同。以下是示例格式。加载Excel数据存储在$scope.data中后,使用相同的方法将其传递到后端

​

票数 1
EN

Stack Overflow用户

发布于 2018-04-30 17:30:24

不要试图在前端读取Excel,只需将excel上传到服务器即可。通过JS读取Excel将在浏览器中消耗大量的内存。

在Java端,读/写Excel非常容易,你所需要的就是Apache POI For Excel reading ref:https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/

完成excel读取后,您可以将所需数据传递给hibernate以存储在DB中。

票数 0
EN

Stack Overflow用户

发布于 2018-04-30 17:57:28

我必须读取前面的excel文件,因为是用户通过上传接口导入Excel文件来更新表中的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50097395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档