私はangularの初心者で、Angular 5、Node 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ファイルに変換する機能を実現したいと思います。
更新:これを行うには少し良い方法があります:
npm install --save file-saver
と入力して、ファイルセーバーをインストールします。import { saveAs } from 'file-saver/FileSaver';
を.tsファイルに追加します。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();
}
より良い方法が見つかったら、後で追加します。