使用php pdo将JSON转换为Excel文件
我有这个文件给我从MySQL数据库的JSON输出:
<?php require 'core/init.php'; $general->logged_out_protect(); $username = htmlentities($user['username']); $user_id = htmlentities($user['id']); try { $result = $db->prepare('SELECT ID,br,sufiks,kupac,datum,rok,status FROM racuni WHERE user_id=:user_id'); $result->bindParam(':user_id', $user_id); $result->execute(); //$res = $result->fetchAll(PDO::FETCH_ASSOC); /* Extract the information from $result */ foreach($result as $r) { $temp = array(); // the following line will be used to slice the Pie chart $temp['ID'] = (int) $r['ID']; $temp['br'] = $r['br'].$r['sufiks']; $temp['kupac'] = (string) $r['kupac']; $temp['datum'] = (string) $r['datum']; $temp['rok'] = (string)$r['rok']; $temp['status'] = (string)$r['status']; // $rs = $db->prepare('SELECT sum(radnih_sati) FROM track_radnici WHERE user_id=:user_id AND id_radnika=:id'); // $rs->bindParam(':user_id', $user_id); // $rs->bindParam(':id', $r['ID']); //$rs->bindParam(':radnici', $radnici); // $rs->execute(); // $sumRows = $rs->fetchColumn(); // $temp['7'] = (int) $sumRows; // Values of each slice $rows[] = $temp; } $table['data'] = $rows; $jsonTable = json_encode($table); //echo $jsonTable; } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } echo $jsonTable; ?>
一切都很好这个代码给我这个输出:
{"data":[{"ID":1,"br":"1-2015","kupac":"ADAkolor","datum":"2015-05-19","rok":"2015-05-21","status":"placeno"},{"ID":2,"br":"2-2015","kupac":"Milenk","datum":"2015-05-27","rok":"2015-05-28","status":""}]}
我如何将这个JSON输出转换成Excel文件? 做这个的最好方式是什么? 或者一些其他方式wit J JSON? 你build议什么?
这是不符合你的要求,因为它不涉及JSON
。
如果你想要它的优秀,你可以使用INTO OUTFILE
并生成Excel可以读取的csv
。 也许你需要真正的.xlsx文件?
例
SELECT ID,br,sufiks,kupac,datum,rok,status INTO OUTFILE 'C:/excel.csv' CHARACTER SET latin1 FIELDS TERMINATED BY '\t' -- this is tab separated LINES TERMINATED BY '\r\n' FROM racuni WHERE user_id=:user_id;
如果你想列来,你必须添加这一行之前像这样的SELECT。
SELECT 'ID','br','sufiks','kupac','datum','rok','status' UNION SELECT ID,br,sufiks,kupac,datum,rok,status INTO OUTFILE 'C:/excel.csv' CHARACTER SET latin1 FIELDS TERMINATED BY '\t' -- this is tab separated LINES TERMINATED BY '\r\n' FROM racuni WHERE user_id=:user_id;
我不知道它会工作,但试试看。
$result = $db->prepare('SELECT ''ID'',''br'',''sufiks'',''kupac'',''datum'',''rok'',''status'' UNION SELECT ID,br,sufiks,kupac,datum,rok,status INTO OUTFILE ''C:/excel.csv'' CHARACTER SET latin1 FIELDS TERMINATED BY ''\t'' LINES TERMINATED BY ''\r\n'' FROM racuni WHERE user_id=:user_id;'); $result->bindParam(':user_id', $user_id); $result->execute();
那么迭代最不需要?