Как добиться импорта Excel с помощью npm -xlsx в общей службе? - PullRequest
2 голосов
/ 02 августа 2020

Я пробовал экспортировать Excel с помощью пакета XLSX, и он отлично работает, но когда я попытался вызвать метод ImportExcel из службы, данные вернулись как undefined.

Ответы [ 3 ]

2 голосов
/ 02 августа 2020

Приведенный ниже код работает для чтения импортированных данных Excel с использованием пакета npm -xlsx и версии 0.14.0.

ExcelService:

 public async importAsXLSX(file : File) {
    var workbook =  await this.getWorkbookFromFile(file);
    return new Promise<any>((resolve, reject) => {
      var worksheet = workbook.Sheets[workbook.SheetNames[0]];     
      this.excelData =XLSX.utils.sheet_to_json(worksheet, 
       {header:1,raw:true,defval:''});
        resolve(this.excelData);
      });
    }

    public async getWorkbookFromFile(inputFile: File) {
      return new Promise<XLSX.WorkBook>((resolve, reject) => {
        var reader = new FileReader();
        reader.onload = (event: any) => {
              var data = event.target.result;
              var workbook = XLSX.read(data, { type: 'binary' });
              resolve(workbook);
          };
        reader.readAsBinaryString(inputFile);
      });
   }

И затем вызовите указанный выше ExcelService в требуемом компоненте.

1 голос
/ 02 августа 2020

Этот код у меня работает с xlsx версии 0.16.2. и он также должен работать с текущей версией 0.16.5.

readEntries(url: string, sheetName: string, rowCount: number): Promise < Object[] > {
  return new Promise < Object[] > ((resolve, reject) => {
    return fetch(url)
      .then(r => r.blob())
      .then(b => this.read(b))
      .then(data => {
        const workbook = XLSX.read(data, {
          type: 'binary',
          sheetRows: rowCount,
          cellDates: true,
          cellText: false
        });
        const sheet = workbook.Sheets[sheetName];
        if (!sheet) {
          reject('Worksheet "' + sheetName + '" does not exist');
        }
        resolve(XLSX.utils.sheet_to_json(sheet));
      });
  });
}

Дополнительные сведения см. в классе ExcelReader из проекта с открытым исходным кодом коя .

0 голосов
/ 02 августа 2020
  • npm i file-saver
  • npm i xlsx

Создайте сервис с помощью следующих методов

import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';
const EXCEL_TYPE = 'application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';



 public exportAsExcelFile(report:string, json: any[], excelFileName: string): void {
   const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
   const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'];
   const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
   this.saveAsExcelFile(report,excelBuffer, excelFileName);
  }


  private saveAsExcelFile(reportName:string,buffer: any, fileName: string): void {
    const data: Blob = new Blob([buffer], { type: EXCEL_TYPE });
    FileSaver.saveAs(data + fileName + EXCEL_EXTENSION);
  }

Позвоните этот метод в любом компоненте, который вы хотите.

this.excelService.exportAsExcelFile("filename","filenameagain", "data that has to be...");

// Обновление для загрузки

  fileUpload = (data)=> {

let fileUploaded = data.target.files[0];
const dummyFunc = ()=>{
  // call some function here 
 }
// Get The File From The Input
var oFile = data.target.files[0];
var sFilename = oFile.name;
// Create A File Reader HTML5
var temp_array = [];

var reader = new FileReader();

// Ready The Event For When A File Gets Selected
reader.onload = function (e) {

   var data = (<FileReader>e.target).result;
   var cfb = XLSX.read(data, {
    type: 'binary'
  });

  var oJS = XLSX.utils.sheet_to_json(cfb.Sheets[cfb.SheetNames[0]], {
    // blankRows: false,
    header: ["Give some name here"],   //This will be the header name

  });
  oJS.shift();
  for (let i = 0; i < oJS.length; i++) {
    temp_array.push(oJS[i]["Give some name here"]

    if (i == oJS.length - 1) {
      dummyFunc(temp_array)        // To call some function after upload is done.
    }
  }

}
reader.readAsBinaryString(oFile);

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...