сопоставлять пары ключ-значение при экспорте листа Excel с использованием alasql

#angularjs #excel #export #alasql

#angularjs #excel #экспорт #alasql

Вопрос:

Я работаю над экспортом в требование к листу Excel с использованием ‘alasql’.

Мой объект Javasript, который будет предоставлен в качестве входных данных для alasql, является

 0:
  ContactEmail: "email1@example.com"
  ContactName: "abcd"
  CustomerName: "defg"
  SubdomainName: "adasdasd"
1: 
  ContactEmail: "email2@example.com"
  ContactName: "abcd"
  CustomerName: "defg"
  SubdomainName: "adasdasd"
2: 
  ContactEmail: "email3@example.com"
  ContactName: "abcd"
  CustomerName: "defg"
  SubdomainName: "adasdasd"
  

ниже приведен мой скрипт alasql для экспорта в лист Excel

 var sheet_name = 'clients.xlsx'
alasql('SELECT * INTO XLSX("' sheet_name '",{headers:true}) FROM ?', arrayToExport);
  

Моя проблема здесь в том, что экспортируется только первый ключ, который имеет значения ключей ‘0’ и ‘1’ и заголовки, как показано ниже:

       0          1
CustomerName    name1
ContactName     contact1
ContactEmail    email1@example.com
SubdomainName   adasdasd
  

JS включает:

 <script src="{{ asset(auto_version('public/js/alasql.min.js')) }}"></script>
<script src="{{ asset(auto_version('public/js/alasql_xlsx.js')) }}"></script>
  

Может ли кто-нибудь, пожалуйста, помочь мне в этом. Спасибо.

Ответ №1:

Я исправил эту проблему. Я надеюсь, что это может быть полезно для других. Я исправил это, как и в первый раз, когда попытался, предоставив напрямую объект javascript, что неверно, поэтому я преобразовал объект javascript в array, а затем object, также массив должен быть в паре ключ-значение для каждой итерации массив-объект. Я думаю, вы можете немного запутаться, но после просмотра вы получите ясность. Мой массив-объект выглядит следующим образом:

arrayToExport:

 [Array(11)]
0: Array(11)
   0: {CustomerName: "CName1", ContactName: "contact1", ContactEmail: "email1@example.com", SubdomainName: "domain1", Region: "USA", …}
   1: {CustomerName: "CName2", ContactName: "contact2", ContactEmail: "email2@example.com", SubdomainName: "domain2", Region: "USA", …}
   2: {CustomerName: "CName3", ContactName: "contact3", ContactEmail: "email3@example.com", SubdomainName: "domain3", Region: "USA", …}
   3: {CustomerName: "CName4", ContactName: "contact4", ContactEmail: "email4@example.com", SubdomainName: "domain4", Region: "USA", …}
   4: {CustomerName: "Sudhakar", ContactName: "contact5", ContactEmail: "email5@example.com", SubdomainName: "domain5", Region: "USA", …}
   5: { …}
  

Мой Javascript:

 $scope.doExport = function(list){
  var sheet_name = 'clients.xlsx'
  var arrayToExport = {};
  var arrData = [];
  $scope.list = list;
  var i = 0;
  angular.forEach($scope.list, function(value, key){
      var status = (value.status == 0) ? 'Pending' : 'Active';
      var region = value.region;
      region = region.toUpperCase();
      var initial = value.subscr_end_date.split(/-/);
      var finalDate = [ initial[1], initial[2], initial[0] ].join('/'); 
      //console.log( finalDate ); 
      arrData[i] = {CustomerName:value.client_info.first_name,ContactName:value.client_info.last_name, ContactEmail:value.client_info.email,SubdomainName:value.sub_domain_name,Region:region,Status:status,SubscriptionEndDate:finalDate
            };
    i  ;
  });
  arrayToExport = [arrData];
  console.log(arrayToExport);
  alasql('SELECT * INTO XLSX("' sheet_name '",{headers:true}) FROM ?', arrayToExport);
}