从php生成器格式化csv文件

时间:2014-11-03 12:49:26

标签: php csv

我有一个从sql查询创建cvs文件的函数。

function query_to_csv($db_conn, $query, $filename, $attachment = false, $headers = true) {

        if($attachment) {
            // send response headers to the browser
            header( 'Content-Type: text/csv' );
            header( 'Content-Disposition: attachment;filename='.$filename);
            $fp = fopen('php://output', 'w');
        } else {
            $fp = fopen($filename, 'w');
        }

        $result = mysql_query($query, $db_conn) or die( mysql_error( $db_conn ) );

        if($headers) {
            // output header row (if at least one row exists)
            $row = mysql_fetch_assoc($result);
            if($row) {
                fputcsv($fp, array_keys($row));
                // reset pointer back to beginning
                mysql_data_seek($result, 0);
            }
        }

        while($row = mysql_fetch_assoc($result)) {
            fputcsv($fp, $row);
        }

        fclose($fp);
    }

问题是生成的文件看起来像这样

A1                                      | B1
2014-10-30,333333333333333333333334

如何分割日期在A1和B2中的数字?如果我还可以命名我的标题(A1到Date ..)

,那就太好了

1 个答案:

答案 0 :(得分:0)

默认情况下fputcsv使用逗号作为分隔符,而Excel需要使用分号分隔符。 您可以通过将分号分隔符作为第三个参数添加到fputcsv函数来修改函数,以获取“正确”的excel csv文件:

function query_to_csv($db_conn, $query, $filename, $attachment = false, $headers = true) {

        if($attachment) {
            // send response headers to the browser
            header( 'Content-Type: text/csv' );
            header( 'Content-Disposition: attachment;filename='.$filename);
            $fp = fopen('php://output', 'w');
        } else {
            $fp = fopen($filename, 'w');
        }

        $result = mysql_query($query, $db_conn) or die( mysql_error( $db_conn ) );

        if($headers) {
            // output header row (if at least one row exists)
            $row = mysql_fetch_assoc($result);
            if($row) {
                fputcsv($fp, array_keys($row), ';');
                // reset pointer back to beginning
                mysql_data_seek($result, 0);
            }
        }

        while($row = mysql_fetch_assoc($result)) {
            fputcsv($fp, $row, ';');
        }

        fclose($fp);
    }