0

I want to upload an excel/csv file and display the content in the primeng p-table.

html
-------------
<p-table #dt [columns]="cols" [value]="jobslist" exportFilename="Routing">
  <ng-template pTemplate="caption">
    <div class="ui-helper-clearfix">
      Route Information
      <button type="button" pButton icon="fa-file-o" iconPos="left" label="Export" (click)="dt.exportCSV()" style="float:right"></button>
      <!--<button type="button" pButton icon="fa-file" iconPos="left" label="Selection Only" (click)="dt.exportCSV({selectionOnly:true})" style="float:right"></button>-->
    </div>
  </ng-template>
    <ng-template pTemplate="header" let-columns>
      <tr>
        <th *ngFor="let col of columns">
          {{col.header}}
        </th>
      </tr>
    </ng-template>
    <ng-template pTemplate="body" let-rowData let-columns="columns">
      <tr [ngClass]="rowData.curdFlag == 'U' ? 'updateColor' : null">
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-dropdown #ddorg name="org" [(ngModel)]="rowData.org"  (onChange)="updateCURDFlagOnChange(rowData)" appendTo="body" filter="true" (onFocus)="setSelectedOption(ddorg,rowData.org,rowData.org)" [options]="orgList" ></p-dropdown>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.org}}
            </ng-template>
          </p-cellEditor>
        </td>
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-dropdown #ddpartNum name="partNum" [(ngModel)]="rowData.partNum"  (onChange)="updateCURDFlagOnChange(rowData)" appendTo="body" filter="true" (onFocus)="setSelectedOption(ddpartNum,rowData.partNum,rowData.partNum)" [options]="partNumList" ></p-dropdown>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.partNum}}
            </ng-template>
          </p-cellEditor>
        </td>
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-dropdown #ddbomAlt name="bomAlt" [(ngModel)]="rowData.bomAlt"  (onChange)="updateCURDFlagOnChange(rowData)" appendTo="body" filter="true" (onFocus)="setSelectedOption(ddbomAlt,rowData.bomAlt,rowData.bomAlt)" [options]="bomAltList" ></p-dropdown>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.bomAlt}}
            </ng-template>
          </p-cellEditor>
        </td>
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-dropdown #ddrouteAlt name="routeAlt" [(ngModel)]="rowData.routeAlt"  (onChange)="updateCURDFlagOnChange(rowData)" appendTo="body" filter="true" (onFocus)="setSelectedOption(ddrouteAlt,rowData.routeAlt,rowData.routeAlt)" [options]="routeAltList" ></p-dropdown>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.routeAlt}}
            </ng-template>
          </p-cellEditor>
        </td>
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-dropdown #ddline name="line" [(ngModel)]="rowData.line"  (onChange)="updateCURDFlagOnChange(rowData)" appendTo="body" filter="true" (onFocus)="setSelectedOption(ddline,rowData.line,rowData.line)" [options]="lineList" ></p-dropdown>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.line}}
            </ng-template>
          </p-cellEditor>
        </td>
      <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-calendar  [(ngModel)]="rowData.startDate" (onChange)="updateCURDFlagOnChange(rowData)" [monthNavigator]="true" [yearNavigator]="true" yearRange="2000:2050" ></p-calendar>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.startDate | date: 'MM/dd/yyyy'}}
            </ng-template>
          </p-cellEditor>
        </td>
        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <p-calendar [(ngModel)]="rowData.endDate"  (onChange)="updateCURDFlagOnChange(rowData)" [monthNavigator]="true" [yearNavigator]="true" yearRange="2018:2050"></p-calendar>
            </ng-template>
            <ng-template pTemplate="output">
              {{rowData.endDate | date: 'MM/dd/yyyy'}}
            </ng-template>
          </p-cellEditor>
        </td>

        <td pEditableColumn>
          <p-cellEditor>
            <ng-template pTemplate="output">
              {{rowData.curdFlag}}
            </ng-template>
          </p-cellEditor>
        </td>
      </tr>
    </ng-template>
</p-table>

<p-fileUpload  customUpload="true"  maxFileSize="1000000" (uploadHandler)="onUpload($event)"  chooseLabel="Browse"></p-fileUpload>


component.ts
----------------------

  onUpload(event) {
    let input = event.files;
    let reader: FileReader = new FileReader();
    reader.readAsText(input);
    reader.onload = (e) => {
      let csv: string = reader.result;
      alert(csv);
      console.log(csv);
    }
  }

I can pass the file to rest api and get the records in a list and display it in the p-table. But i am not able to read the content in typescript and populate it in a list and put in the p-table. Can someone suggest an idea to achieve this ?

Jan69
  • 1,109
  • 5
  • 25
  • 48

1 Answers1

0

Your method is correct, but in reader.readAsText(input);, just switch to reader.readAsText(input[0]) which your data of your csv show on console.log, if you need help to populate p-table, answer me here.

Word Rearranger
  • 1,306
  • 1
  • 16
  • 25