Как импортировать файл Excel в базу данных, используя angularJS1, hibernate (4.3.5), Spring (4.2.4)? - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу импортировать файл Excel в свою базу данных, используя angularJS1, Hibernate 4.3.5, Spring mvc 4.2.4. Файл Excel импортируется через окно (таблица, состоящая из дочерних «фамилия, имя» и родители), таблица была заполнена ранее вручную. Теперь цель - заполнить таблицу автоматически, импортировав файл Excel. Я могу прочитать файл Excel в Google (формат JSON), но не могу импортировать его в свою базу данных. Проект состоит из передней части (angularJS1) и задней части (hibernate, postgresSQL, DAO). Не могли бы вы мне помочь, пожалуйста ? Это с четверга, что я ищу решение. Спасибо

Вот код для чтения моего файла Excel в формате json: file: ... Controller.js (передняя часть)

$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);
    }
}

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Мне нужно прочитать файл Excel на передней панели, потому что именно пользователь обновляет данные в таблице, импортируя файл Excel через интерфейс загрузки.

0 голосов
/ 30 апреля 2018

Вот пример кода codepen, созданного для вас.

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]);  
           }
    };
 
   
  });
<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, используйте то же самое для передачи в бэкэнд enter image description here

0 голосов
/ 30 апреля 2018

Вместо того, чтобы пытаться читать Excel на Front-End стороне, просто загрузите Excel на сервер. Чтение Excel через JS потребляет значительное количество MEM в браузере.

На Java довольно легко читать / писать в Excel, все что вам нужно - Apache POI Для чтения Excel ссылка: https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/

Как только вы закончите чтение Excel, вы можете передать необходимые данные в режим гибернации для хранения в БД.

...