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 !!
Może chcesz zobaczyć ten [LINK] (http://architects.dzone.com/articles/convert-javascript-object-csv). – chris97ong
Chcę utworzyć plik Excel tego obiektu – User1038
Czy chcesz utworzyć plik Excel przez JavaScript ??? –