2014-04-01 13 views
8

Chcę przekonwertować ten obiekt na plik CSV. Nazwy kolumn powinny być kluczami, jest to mały element tablicy. Ostatnia tablica będzie jedyna w swoim rodzaju (klucze), wszystkie pozostałe będą miały te same klucze, ale inne wartości.Jak przekonwertować obiekt do pliku CSV za pomocą JavaScript?

[{ 
Comment: "Good", 
Experince Months: "4", 
Experince Years: "4", 
Score: "3", 
Subject: "CPP", 
Topic: "Scripting (mention details)" 
}, 
{ 
Comment: "Excilent", 
Experince Months: "6", 
Experince Years: "6", 
Score: "6", 
Subject: "CSharp", 
Topic: "WPF" 
}, 
{ 
Anything else worth highlighting: "Web Specialist", 
Result: "Selected", 
Total Business Analysis Experience: false, 
Total Project Management Experience: false, 
Total Score: 75, 
Total Server Side Development Experience: true, 
Total Server Side Support Experience: true, 
Total UI Development Experience: true, 
Total UI Support Experience: true 
}] 
+0

Może chcesz zobaczyć ten [LINK] (http://architects.dzone.com/articles/convert-javascript-object-csv). – chris97ong

+0

Chcę utworzyć plik Excel tego obiektu – User1038

+0

Czy chcesz utworzyć plik Excel przez JavaScript ??? –

Odpowiedz

8

To prosta realizacja:

// Returns a csv from an array of objects with 
// values separated by tabs and rows separated by newlines 
function CSV(array) { 
    // Use first element to choose the keys and the order 
    var keys = Object.keys(array[0]); 

    // Build header 
    var result = keys.join("\t") + "\n"; 

    // Add the rows 
    array.forEach(function(obj){ 
     keys.forEach(function(k, ix){ 
      if (ix) result += "\t"; 
      result += obj[k]; 
     }); 
     result += "\n"; 
    }); 

    return result; 
} 
+0

Jedyna rzecz - tworzysz TSV (wartości oddzielone tabulatorami), a nie CSV. Jeśli potrzebujesz pliku CSV - zastąp \ t symbolem przecinku –

0

JSON do CSV Converter

function ConvertToCSV(objArray) { 
     var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 
     var str = ''; 

     for (var i = 0; i < array.length; i++) { 
      var line = ''; 
      for (var index in array[i]) { 
       if (line != '') line += ',' 

       line += array[i][index]; 
      } 

      str += line + '\r\n'; 
     } 

     return str; 
    } 
0

Anha !! faktycznie mam PHP Class który działa całkiem dobrze z same json object key (używasz tutaj inny klawisz json w trzecim zestawie). Tak więc, jeśli chcesz, możesz zmodyfikować moją dowolną wartość (dla innego klucza obiektu). Tutaj wyjaśnię przykład i podzielę się z wami moją klasą. Mam nadzieję, że po modyfikacji tej klasy twoje życzenie się spełniło :)

PHP Export Class [Class.Export.php]

<?php 
/** 
* Class Export 
* 
* Send JSON data and make an array to save as Excel file 
* 
* @author neeraj.singh 
* @version 1.0 
* 
*/ 

// Class Start Here 
class Export { 

    /** 
    * Set Excel file name 
    * 
    * @var string 
    */ 
    public $filename = 'excel-doc'; 

    /** 
    * Set Excel field title 
    * 
    * @var string 
    */ 
    public $custom_titles; 

    /** 
    * Get JSON data and convert in Excel file 
    */ 
    public function saveAsExcel() { 
     $CSV = trim ($_POST ['exportdata']); 
     if (function_exists ('json_decode')) { 
      $data = json_decode ($CSV, true); 
      if (count ($data) > 0) { 
       // call excel export 
       $this->_createExcelByArray ($data); 
      } else { 
       die ("Sorry!! array not build."); 
      } 
     } else { 
      die ("Sorry!! json_decode not working on this server."); 
     } 
    } 

    /** 
    * Take an array and create 
    * Excel file 
    * 
    * @param array $dataArray   
    */ 
    private function _createExcelByArray($dataArray) { 
     // set excel file name 
     $this->filename = 'DEMO-Excel' . '-' . date ('d-m-Y-H-s'); 
     // get array field by first element of array 
     foreach ($dataArray [0] as $k => $v) { 
      $field [] = $k; 
     } 
     // get total no of field in array 
     $totalFields = count ($field); 
     $i = $j = 0; 
     // get array values 
     foreach ($dataArray as $v) { 
      for($j; $j < $totalFields; $j ++) { 
       $value [$i] [] = $v [$field [$j]]; 
      } 
      $i ++; 
      $j = 0; 
     } 
     $this->initExcel ($field, $value); 
    } 

    /** 
    * Creating an Excel file with array data 
    * 
    * @param array $titles   
    * @param array $array   
    */ 
    public function initExcel($titles, $array) { 
     $data = NULL; 
     if (! is_array ($array)) { 
      die ('The data supplied is not a valid array'); 
     } else { 
      $headers = $this->titles ($titles); 
      if (is_array ($array)) { 
       foreach ($array as $row) { 
        $line = ''; 
        foreach ($row as $value) { 
         if (! isset ($value) or $value == '') { 
          $value = "\t"; 
         } else { 
          $value = str_replace ('"', '""', $value); 
          $value = '"' . $value . '"' . "\t"; 
         } 
         $line .= $value; 
        } 
        $data .= iconv ("UTF-8", "GB18030//IGNORE", trim ($line)) . "\n"; 
       } 
       $data = str_replace ("\r", "", $data); 
       $this->generate ($headers, $data); 
      } 
     } 
    } 

    /** 
    * Create excel header and 
    * write data into file 
    * 
    * @param string $headers   
    * @param string $data   
    */ 
    private function generate($headers, $data) { 
     $this->set_headers(); 
     echo "$headers\n$data"; 
    } 

    /** 
    * Set Excel file field header 
    * 
    * @param array $titles   
    * @return string 
    */ 
    public function titles($titles) { 
     if (is_array ($titles)) { 
      $headers = array(); 
      if (is_null ($this->custom_titles)) { 
       if (is_array ($titles)) { 
        foreach ($titles as $title) { 
         $headers [] = iconv ("UTF-8", "GB18030//IGNORE", $title); 
        } 
       } else { 
        foreach ($titles as $title) { 
         $headers [] = iconv ("UTF-8", "GB18030//IGNORE", $title->name); 
        } 
       } 
      } else { 
       $keys = array(); 
       foreach ($titles as $title) { 
        $keys [] = iconv ("UTF-8", "GB18030//IGNORE", $title->name); 
       } 
       foreach ($keys as $key) { 
        $headers [] = iconv ("UTF-8", "GB18030//IGNORE", $this->custom_titles [array_search ($key, $keys)]); 
       } 
      } 
      return implode ("\t", $headers); 
     } 
    } 

    /** 
    * Set Response Header 
    */ 
    private function set_headers() { 
     $ua = $_SERVER ["HTTP_USER_AGENT"]; 
     $filename = $this->filename . ".xls"; 
     $encoded_filename = urlencode ($filename); 
     $encoded_filename = str_replace ("+", "%20", $encoded_filename); 
     header ("Pragma: public"); 
     header ("Expires: 0"); 
     header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header ("Content-Type: application/vnd.ms-excel; charset=UTF-8"); 
     header ("Content-Type: application/force-download"); 
     header ("Content-Type: application/octet-stream"); 
     header ("Content-Type: application/download"); 
     if (preg_match ("/MSIE/", $ua)) { 
      header ('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); 
     } else if (preg_match ("/Firefox/", $ua)) { 
      header ('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"'); 
     } else { 
      header ('Content-Disposition: attachment; filename="' . $filename . '"'); 
     } 
     header ("Content-Transfer-Encoding: binary"); 
    } 
} 
// Class End Here 

Dobra, tu jest HTML i PHP Code aby pokazać, jak to działa.

HTML Code:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>JSON to Excel POC</title>  
    <script type="text/javascript"> 
    <!--  
    function excelExport() { 
     // this is your json data as string or you can 
     // use as object too 
     var jsonObject = '[{ "Comment" : "Good", "ExperinceMonths" : "4", "ExperinceYears" : "4", "Score" : "3", "Subject" : "CPP", "Topic" : "Scripting (mention details)" }, { "Comment" : "Excilent", "ExperinceMonths" : "6", "ExperinceYears" : "6", "Score" : "6", "Subject" : "CSharp", "Topic" : "WPF" }]';  
     // create a form 
     var form   = document.createElement('FORM'); 
     form.name   = 'exportform'; 
     form.id    = 'exportform'; 
     form.method   = 'POST'; 
     form.action   = './export.php'; 
     // create a hidden input inside form 
     var hiddenInput   = document.createElement('INPUT'); 
     hiddenInput.type = 'HIDDEN'; 
     hiddenInput.name = 'exportdata'; 
     hiddenInput.id  = 'exportdata'; 
     hiddenInput.value = jsonObject; 
     // insert hidden element inside form 
     form.appendChild(hiddenInput); 
     // insert form inside body 
     document.body.appendChild(form); 
     // submit the form 
     form.submit(); 
     // remoce the form 
     document.body.removeChild(form); 
     return true; 
    } 
    //--> 
    </script> 
    </head> 
<body> 
    <input type="button" value="Export" onClick='excelExport(); return false;'> 
</body> 
</html> 

i wreszcie Oto

PHP Code [export.php]

<?php 
// add Class Export File 
require_once 'Class.Export.php'; 
// make a new onject of Class Export 
$export = new Export(); 
// Send POSt data to make 
// Excel File 
if(isset($_POST['exportdata'])){ 
    $export->saveAsExcel(); 
} 
?> 

Hope, ten fragment kodu będzie pomagać ludziom powodu Dzielenie się jest zawsze Troska :) Pozdrawiam !!

+0

Hej dziękuję za pomoc, ale nie używam PHP, przepraszam, że nie wspomniałem o tym wcześniej, ale doceniam twoją pomoc. Używam JavaScript – User1038

Powiązane problemy