安哈!!实际上,我有一个 PHP Class 可以很好地与 same json object key 配合使用(您在第三组中使用了不同的 json 键)。因此,如果您愿意,可以根据需要修改我的 PHP Export Class(针对不同的对象键)。在这里,我将解释示例并与您分享我的课程。希望,修改完这个类后你的愿望成真了:)
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
好的,下面是 HTML 和 PHP Code 来演示它的工作原理。
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>
终于来了
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();
}
?>
希望,这段代码能帮助到人们,因为,分享总是关怀 :) 干杯!!