Newbie04 Ответов: 1

Как я могу получить количество строк загруженного листа excel?


Привет,

Я загружаю файлы excel с помощью элемента управления input type file. Мне нужно прочитать файл и сделать две вещи:

1.) Представьте данные этого файла excel в пользовательском интерфейсе в виде таблицы.
2.) Получите количество строк в excel.

Если существует более одного excel, то получите количество строк для каждого excel отдельно.

Что я уже пробовал:

Component.html:

<div style="text-align: center">
      <div class="col-xs-9">
        <div class="form group">
          <label for="Upload" style="display: block;">Please select file to upload</label>
          <input type="file" multiple id="btnUpload" name="Upload" value="Upload" (change)="Onselect($event)"
            style="padding-left: 450px;" #btnUpload/>
        </div>
      </div>
    </div>

<div *ngIf="uploadMessage">
<p>{{number}}</p>
</div>

<div class="container" *ngIf="filesIsSelected" #mymodal>
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
             <h4 class="modal-title">Warning
            <button type="button"  class="btnUpload" data-dismiss="modal">
                <span class="glyphicon glyphicon-remove" ></span> 
              </button>
            </h4>
          </div>
          <div class="modal-body">
            <p>Do you want to upload selected files?</p>
  
            <div align="center">
                <button type="button" class="btn btn-danger" data-dismiss="modal">
                  <span class="glyphicon glyphicon-remove"></span> No
                </button>
                  
                <button type="button" class="btn btn-success" data-dismiss="modal" (click)="proceedUpload()">
                  <span class="glyphicon glyphicon-floppy-disk"></span> Yes
                </button>
      
            </div>          
          </div>       
        </div>      
      </div>
    </div>  


Компонент.ТС:

Onselect(event: any){
    debugger;
      
    if (event.target.files && event.target.files.length > 0) { 

     this.filesIsSelected = true;

     const files = event.target.files;
      const numFiles = files.length;
      for (let i = 0; i < numFiles; ++i) {
        this.file = files[i];
      }
   }
else
   {
     this.filesIsSelected = false;
    }            
        
   proceedUpload(){
           
     (this.file != null) {
     
    //Read the Excel data
    var workbook = XLSX.read(this.file);

    //Fetch the name of First Sheet.
    var firstSheet = workbook.SheetNames[0];
 
    //Read all rows from First Sheet into an JSON array.
    var excelRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[firstSheet]);
    var number = excelRows.length();

      if( number > 0 )
      {
          this.uploadMessage = true;
      }
      else
      {
        this.uploadMessage = false;
      }
    

    let formData: FormData = new FormData();
    formData.append('Files', this.file);

    this.http.post("Url", formData).map(res => res.json())
      .catch(error => Observable.throw(error))
      .subscribe(
        data => console.log('success'),
        error => console.log(error)
      )

    }
    else
    {
        alert("Please upload a file!")
    }        

1 Ответов

Рейтинг:
0

MadMyche

Ни HTML5, ни TypeScript не имеют собственных возможностей для работы с файлами Excel; для этого потребуется добавить сторонний компонент,

Однако похоже, что это было сделано; 2 строки, содержащие XLSX.utils. следуйте шаблонам именования SheetJS. Лучшее место, чтобы научиться работать с ним, - это документация для него.

Ссылка: GitHub - SheetJS/js-xlsx: SheetJS Community Edition -- инструментарий электронных таблиц[^]


Newbie04

Привет ,

Я получаю ошибку "свойство 'sheet_to_row_object_array' не существует для типа 'XLSX$Utils'." и в документации по этому поводу нет ничего доступного.У тебя есть какие-нибудь идеи на этот счет?

Кроме того, я немного обновил код в Component.ts. Поможет ли это мне получить количество строк в каждом excel?

MadMyche

У меня ограниченный опыт работы с этим пакетом; я предпочитаю делать Excel по старинке: загружать на сервер и использовать офис.Пакет взаимодействия в .NET