【问题标题】:AngularJS - Trying to export data to excelAngularJS - 尝试将数据导出到 excel
【发布时间】:2015-12-09 12:44:26
【问题描述】:

我正在尝试将 HTML 表格导出到 Excel 工作表中,并且我正在使用 alasql:

$scope.Excelexport =function(){
  alasql('SELECT * INTO XLSX("example.xlsx",{headers:true}) FROM ?',[$scope.college.data]);
}

这对我不起作用,因为我的数据看起来像:

$scope.college.data =  [
  {{[{faculty: 20k, Student:5k}], name:MIT}}, 
  {{[{faculty: 20k, Student:5k}], name:Stevens}}, 
  {{[{faculty: 20k, Student:5k}], name:RIT}}, 
  {{[{faculty: 20k, Student:5k}], name:IIT}},
]

当我使用导出时,我得到[object,object] 结果。我知道原因是因为我的数组是对象的对象。如何让some[] 以名称作为标题显示在 Excel 中?

在 Excel 中,我希望数据看起来像

    Faculty   |   Student
    ----------------------
    MIT
    ----------------------
    20k        | 500k

【问题讨论】:

  • 您使用什么库将数据导出到 csv 或 excel?另外,你能举一个some[]的例子吗?像这样导出数据不是问题,它只取决于您希望数据在 csv 文件中的样子。因此,在您的情况下,您需要进行一些数据修改,然后导出为 excel 或 csv 文件。
  • @ShaohaoLin 我正在使用alasql库...我编辑了问题再次查看数据。
  • 我可以做到Name | Faculty | Student MIT | 20K | 50K。如果您想学习如何做到这一点,请告诉我,我会发布解决方案。
  • @ShaohaoLin 这对我有用,谢谢
  • 您发布的数据不是有效的json 数据。你能让它对json数据有效吗?或者你不能?

标签: angularjs export-to-excel export-to-csv alasql


【解决方案1】:

假设数据是您在评论会话中提供的链接。以下函数将[object object] 转换为对象数组,允许导出为 CSV 文件。

//initialize an empty array ready for export as csv
$scope.exportCsvFile = [];

//$scope.data is the valid json data you provided on the comment session
//you just assign the json data to $scope.data
angular.forEach($scope.data, function(collegeData){
  var labbox = collegeData.data.labbox;
  angular.forEach(collegeData.data.timeseriesdata, function(singleData){
    var temp = {
      name: labbox
    };
    angular.forEach(singleData, function(value, key){
        temp[key] = value;
    });
    $scope.exportCsvFile.push(temp);
  });
});

函数之后,$scope.exportCsvFile 数组将如下所示:

[
 {name: 'Stevens', faculty: 1, student, 949, from: "17:30", to: "17:42"},
 {name: 'Stevens', faculty: 0.99, student, 949, from: "17:42", to: "17:54"},
 {name: 'Stevens', faculty: 0.97, student, 1380, from: "17:54", to: "17:42"},
 {...}
]

在此之后,您可以导出文件:

$scope.Excelexport = function() {
 alasql('SELECT * INTO XLSX("example.xlsx",{headers:true}) FROM ?',[$scope.exportCsvFile]);
}

Csv 文件应如下所示:

    Name   |   Faculty   |   Student   |   From    |    To
    ---------------------------------------------------------
    Stevens|      1      |     949     |   17:30   |   17:42
    ---------------------------------------------------------
    Stevens|    0.99     |     1090    |   17:42   |   17:54
    ---------------------------------------------------------

如果这仍然不能解决您的问题,您可以查看名为 ng-Csv 的 AngularJS 指令。它在字体端将数据导出为 csv 文件。希望对你有帮助!!

【讨论】:

    【解决方案2】:

    您的问题中的 JSON 数据存在问题,但如果您将其修改为:

    $scope.college.data = [
      {data:[{faculty: '20k', Student:'5k'}], name: 'MIT' }}, 
      {data:[{faculty: '20k', Student:'5k'}], name: 'Stevens' }}, 
    ];
    

    你可以试试这个 SQL 语句:

    alasql('SELECT data->0->faculty,data->0->faculty,\
      name INTO XLSX("example.xlsx",{headers:true}) FROM ?',[$scope.college.data])
    

    在这里你可以使用->箭头作为JavaScript中的点:

    [{data:[10]}]            -- SELECT data->0      gives 10
    [{data:{other:20}}]      -- SELECT data->other  gives 20
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 1970-01-01
      • 2017-03-09
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多