У меня есть угловое приложение, в котором я пытаюсь прочитать и проанализировать файл .xlsx, используя библиотеку JavaScript js-xlsx. Однако у меня возникли проблемы с открытием файла на стороне JavaScript.
В моем html у меня есть простой ввод типа файла, который открывает средство выбора файлов, где пользователь может выбрать соответствующий файл. У меня были проблемы с использованием директив angular для отправки файла функции на моем контроллере, потому что ng-change не обновлялся, когда пользователь выбирал файл только при нажатии кнопки ввода. В итоге мне пришлось прибегнуть к смеси простого старого JavaScript вместе с угловым, добавив 'onchange="angular.element(this).scope().handleFile(this)"' к моему вводу.
добавить-quotation.html:
<div class="container-fluid" ng-controller="addQuotationController">
...
<input type="file" id="file" class="" onchange="angular.element(this).scope().handleFile(this)">
...
</div>
Это решило мою проблему невозможности отправить файл из HTML в сторону JavaScript. Однако у меня возникли проблемы с открытием файла. Я пробовал много примеров из официальной документации, но мне не удалось заставить их работать. Это мой текущий код:
добавить-quotation.component.js:
$scope.handleFile = function(e) {
var files = e.target.files;
var i,f;
for (i = 0, f = files[i]; i != files.length; ++i) {
var reader = new FileReader();
var name = f.name;
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {type: 'binary'});
/* DO SOMETHING WITH workbook HERE */
};
reader.readAsBinaryString(f);
}
}
Я попытался выполнить отладку и обнаружил, что файл действительно попадает в метод, но затем возникает исключение при попытке доступа к «e.target.files;»
Я совершенно не понимаю, как это исправить, и примеры, которые я видел, бесполезны. Что я делаю не так?