如何从Angular 4中下载数据到Excel

3

我正在构建一个Angular应用程序,需要将表格数据导出为Excel文件。在ride success组件中,我有一个表格,该表格显示通过Angular服务获取的数据。现在我需要从我的浏览器下载这个表格数据到Excel文件。

ridesuccess组件:

export class RideSuccessComponent implements OnInit {



 p = 1;
  myForm: FormGroup;
  rideSuccess: RideSuccess[];
  rsuccess: RideSuccess = '';
  constructor(private adminService: AdminService) {}



 ngOnInit() {

    this.rsuccess = '';

    this.adminService.getRideSuccess()
    .subscribe(
        (rideSuccess: RideSuccess[]) => {
            this.rideSuccess = rideSuccess;
        }
    );

成功的搭乘 HTML:

    <table class="responstable" id="responsetable">

  <tr>
    <th data-th="Driver details"><span>Driver name</span></th>
    <th>Rider Name</th>
    <th>Pool ID</th>
    <th>Amount</th>
    <th>Source</th>
    <th>Destination</th>
    <th>Sum ID</th>
    <th></th>
  </tr>

  <tr *ngFor="let ridesuccess of rideSuccess| paginate: { itemsPerPage: 5, currentPage: p }; let i = index" >
    <td>{{ridesuccess.driverName}}</td>
    <td>{{ridesuccess.riderName}}</td>
    <td>{{ridesuccess.poolId}}</td>
    <td>{{ridesuccess.amount}}</td>
    <td>{{ridesuccess.source}}</td>
    <td>{{ridesuccess.destination}}</td>
    <td>{{ridesuccess.sumId}}</td>
    <td><button type="button" class="btn btn-success"  data-toggle="modal" data-target="#myModal" (click)="setmodal(ridesuccess)">Gratify</button></td>
  </tr>
</table>

<pagination-controls (pageChange)="p = $event" class="my-pagination" style="float: right"></pagination-controls>

现在我想在HTML中实现一个按钮,点击后将完整的表格数据下载到Excel文件中。
注意:我有所有数据在我的Angular服务(getRideSuccess())中。我想从我的Angular对象中下载数据,该对象使用服务(getRideSuccess())进行填充。
Package.json:
  {
  "name": "pagination",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
    "build": "del-cli public/js/app && webpack --config webpack.config.dev.js --progress --profile --watch",
    "build:prod": "del-cli public/js/app && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail && del-cli 'public/js/app/**/*.js' 'public/js/app/**/*.js.map' '!public/js/app/bundle.js' '!public/js/app/*.chunk.js' 'assets/app/**/*.ngfactory.ts' 'assets/app/**/*.shim.ts' 'assets/app/**/*.ngsummary.json' 'assets/app/**/*.ngstyle.ts'"
  },
  "dependencies": {
    "@angular/animations": "^4.0.0",
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/compiler-cli": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/platform-server": "^4.0.0",
    "@angular/router": "^4.0.0",
    "@angular/upgrade": "^4.0.0",
    "angular2-bootstrap-confirm": "^1.0.4",
    "angular2-csv": "^0.2.5",
    "bcryptjs": "^2.4.3",
    "body-parser": "~1.15.2",
    "chart.js": "^2.5.0",
    "cookie-parser": "~1.4.3",
    "core-js": "^2.4.1",
    "debug": "~2.2.0",
    "express": "~4.14.0",
    "hbs": "~3.1.0",
    "jsonwebtoken": "^7.4.0",
    "mongoose": "^4.9.6",
    "mongoose-sequence-plugin": "^1.0.5",
    "mongoose-unique-validator": "^1.0.5",
    "morgan": "~1.6.1",
    "ng2-charts": "^1.5.0",
    "ngx-pagination": "^3.0.1",
    "reflect-metadata": "^0.1.3",
    "rxjs": "^5.2.0",
    "serve-favicon": "~2.3.0",
    "shortid": "^2.2.8",
    "zone.js": "^0.8.5"
  },
  "devDependencies": {
    "@types/core-js": "0.9.36",
    "@types/node": "^6.0.45",
    "angular-router-loader": "^0.5.0",
    "angular2-template-loader": "^0.5.0",
    "awesome-typescript-loader": "^3.1.2",
    "del-cli": "^0.2.0",
    "html-loader": "^0.4.4",
    "raw-loader": "^0.5.1",
    "ts-loader": "^2.0.3",
    "typescript": "^2.1.4",
    "webpack": "^2.2.1",
    "webpack-merge": "^4.1.0"
  },
  "main": "app.js",
  "author": "",
  "license": "ISC",
  "description": ""
}

你可以使用这个链接来将HTML表格导出为Excel文件:https://dev59.com/wWQn5IYBdhLWcg3wCzek - Rahul Singh
2个回答

5

您可能需要使用angular2-csv库来完成此操作。
npm install --save angular2-csv

import { Angular2Csv } from 'angular2-csv/Angular2-csv';


    export class RideSuccessComponent implements OnInit {
        ...
        rideSuccess: RideSuccess[];
        ...
        exportData() {

            new Angular2Csv(this.rideSuccess, 'My Report');

        }
        ...
    }

只需在需要的时候调用exportData函数即可。更多信息请参见此处


我尝试使用Angular2csv模块来实现相同的功能。然而,在实施后,我的浏览器会抛出一个错误,如下所示:Uncaught Error: Unexpected value 'Angular2Csv' imported by the module 'AppModule'. Please add a @NgModule annotation. 问题可能是什么?我还编辑了我的问题并添加了我的package.json以供参考。 - Himanshu
1
在 Angular2CSV 组件中,无需在模块中添加引用,可以直接使用。 - Nouman Bhatti

1
我使用PrimeNG提供的DataTableModule DataTableModule Example,实现了这一点。
至于Angular2Csv的问题,我发现在安装该模块时会出现UNMET PEER DEPENDENCY angular 4.3.3的错误。然而,我正在使用Angular 4.0.0进行开发。看起来最新版本的Angular2Csv需要4.3.3版本,因此出现错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接