AngularJS - 尝试将数据导出到excel

时间:2015-12-09 12:44:26

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

我正在尝试将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

2 个答案:

答案 0 :(得分: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文件。希望它有所帮助!!

答案 1 :(得分:0)

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

var c = Database.Set<Photo>().
    Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId).
    OrderBy(p => orderBy == OrderBy.TimeOfCreation ? p.TimeOfCreation : DateTime.Now).
    ThenBy(p => orderBy == OrderBy.AverageRaiting ? p.AverageRaiting : 0.0).
    Skip((page - 1) * pageSize).Take(pageSize);

return c

您可以尝试以下SQL语句:

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

在这里,您可以使用alasql('SELECT data->0->faculty,data->0->faculty,\ name INTO XLSX("example.xlsx",{headers:true}) FROM ?',[$scope.college.data]) 箭头作为JavaScript中的点:

->