代码之家  ›  专栏  ›  技术社区  ›  CHARAFI Saad

角度5:如何将数据导出到csv文件

  •  4
  • CHARAFI Saad  · 技术社区  · 6 年前

    我是一个角度初学者,我正在工作的角度5,节点v8.11.3。

    我想实现一个接收参数数据和头的通用函数作为csv文件的输出。

    我创建一个名为“FactureComponent”的组件,然后生成一个服务 名为“DataService”,然后我创建了一个getFactures函数,该函数从模拟中检索我的项列表,它工作得非常好。

    import { Component, OnInit } from '@angular/core';
    import { DataService } from '../data.service';
    import { FACTURES } from '../mock.factures';
    
    @Component({
    selector: 'app-facture',
    templateUrl: './facture.component.html',
    styleUrls: ['./facture.component.scss']
    })
    export class FactureComponent implements OnInit {
    
    factures = [];
    columns  = ["Id","Reference","Quantite","Prix Unitaire"];
    btnText:  String = "Export CSV";
    
    constructor(private _data: DataService) { }
    
    ngOnInit() {
    this.getFactures();
    }
    getFactures(){
    this.factures=this._data.getFactures();
    }
    generateCSV(){
    console.log("generate");
    }
    }
    

    您可以在视图下面找到

    <form>
    <input type="submit" [value]="btnText" (click)="generateCSV()"/>
    </form>
    
    <table>
     <tr>
       <th *ngFor="let col of columns">
          {{col}}
       </th>
     </tr>
     <tr *ngFor="let facture of factures">
      <td>{{facture.id}}</td>     
      <td>{{facture.ref}}</td>
      <td>{{facture.quantite}}</td>
      <td>{{facture.prixUnitaire}}</td>
     </tr>
    </table>
    

    所以我想实现一个函数,将显示在视图上的数据转换成csv文件。

    1 回复  |  直到 6 年前
        1
  •  29
  •   tom10271    5 年前

    更新: 有一种更好的方法:

    1. 打开项目目录中的命令提示符。
    2. 键入以下命令安装文件保护程序 npm install --save file-saver
    3. import { saveAs } from 'file-saver/FileSaver'; 进入你的.ts文件。
    4. 这是基于新导入的更新代码。

    downloadFile(data: any) {
        const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here
        const header = Object.keys(data[0]);
        let csv = data.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','));
        csv.unshift(header.join(','));
        let csvArray = csv.join('\r\n');
    
        var blob = new Blob([csvArray], {type: 'text/csv' })
        saveAs(blob, "myFile.csv");
    }
    

    这是我的功劳 answer 用于将对象转换为CSV。

    以下是使用的方法:

    downloadFile(data: any) {
        const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here
        const header = Object.keys(data[0]);
        let csv = data.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','));
        csv.unshift(header.join(','));
        let csvArray = csv.join('\r\n');
    
        var a = document.createElement('a');
        var blob = new Blob([csvArray], {type: 'text/csv' }),
        url = window.URL.createObjectURL(blob);
    
        a.href = url;
        a.download = "myFile.csv";
        a.click();
        window.URL.revokeObjectURL(url);
        a.remove();
    }
    

    如果我找到更好的方法,我以后再补充。