【问题标题】:Convert JSON to Excel file with php pdo使用 php pdo 将 JSON 转换为 Excel 文件
【发布时间】:2015-05-15 12:48:00
【问题描述】:

我有这个文件,它给我 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 文件?做这个的最好方式是什么?还是没有JSON的其他方式?你有什么建议?

【问题讨论】:

  • 如果你想让它Excel,你可以使用INTO OUTFILE并生成一个Excel可以读取的csv。也许您实际上需要 .xlsx 文件?
  • 请写下这个作为答案。谢谢

标签: php mysql json excel pdo


【解决方案1】:

这与您的要求不同,因为它不涉及JSON

如果你想让它Excel,你可以使用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();

那么迭代最有可能不需要?

【讨论】:

  • 请在我的代码中实现这个问题。我需要把这个查询放在哪里?
  • 你有编辑吗?喜欢工作台?它只是一个常规语法,所以试着把它放在prepare('SELECT 'ID','......FROM racuni WHERE user_id=:user_id;')
  • 我得到:解析错误:语法错误,第 13 行 /home/agroagro/public_html/netRacuni/getracunicsv.php 中出现意外的“C”(T_STRING)
  • 还有如何将其保存到用户计算机但用户浏览器需要询问将excel文件保存在哪里?
  • 我也试试这个代码:$out = fopen('php://output', 'w'); fputcsv($out, $jsonTable); fclose($out);但是当我运行代码时什么也没发生
猜你喜欢
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2011-10-25
  • 2018-01-30
相关资源
最近更新 更多