【问题标题】:mysql to excel formatting issuesmysql to excel 格式问题
【发布时间】:2014-03-22 17:12:51
【问题描述】:

找到了将mysql转换为excel的code,一切正常,但问题是带点的数据是用点而不是逗号保存的,所以当它转换为excel时,它的最终日期为:mar.45 .所以问题是如何在转换为 excel 之前用逗号替换点 - PH、氯和温度? (不适用于日期)

数据库中的表:

Excel 文件:

代码:

<?php
/*******EDIT LINES 3-8*******/
$DB_Server = "localhost"; //MySQL Server    
$DB_Username = "root"; //MySQL Username     
$DB_Password = "";             //MySQL Password     
$DB_DBName = "chart";         //MySQL Database Name  
$DB_TBLName = "googlechart"; //MySQL Table Name   
$filename = "excelfilename";         //File Name
/*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/    
//create MySQL connection   
$sql = "Select * from $DB_TBLName";
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
//select database   
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());   
//execute query 
$result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());    
$file_ending = "xls";
//header info for browser
header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=$filename.xls");  
header("Pragma: no-cache"); 
header("Expires: 0");
/*******Start of Formatting for Excel*******/   
//define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character
//start of printing column names as names of MySQL fields
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");    
//end of printing column names  
//start while loop to get data
    while($row = mysql_fetch_row($result))
    {
        $schema_insert = "";
        for($j=0; $j<mysql_num_fields($result);$j++)
        {
            if(!isset($row[$j]))
                $schema_insert .= "NULL".$sep;
            elseif ($row[$j] != "")
                $schema_insert .= "$row[$j]".$sep;
            else
                $schema_insert .= "".$sep;
        }
        $schema_insert = str_replace($sep."$", "", $schema_insert);
        $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
        $schema_insert .= "\t";
        print(trim($schema_insert));
        print "\n";
    }   
?>

【问题讨论】:

    标签: php mysql excel


    【解决方案1】:

    您需要检查哪些字段是数字的,然后格式化输出。在这里,您对示例进行了一些更改:

    <?php
    /*******EDIT LINES 3-8*******/
    $DB_Server = "localhost"; //MySQL Server    
    $DB_Username = "root"; //MySQL Username     
    $DB_Password = "";             //MySQL Password     
    $DB_DBName = "chart";         //MySQL Database Name  
    $DB_TBLName = "googlechart"; //MySQL Table Name   
    $filename = "excelfilename";         //File Name
    /*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/    
    //create MySQL connection   
    $sql = "Select * from $DB_TBLName";
    $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
    //select database   
    $Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());   
    //execute query 
    $result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());    
    $file_ending = "xls";
    $reals=array();
    //header info for browser
    header("Content-Type: application/xls");    
    header("Content-Disposition: attachment; filename=$filename.xls");  
    header("Pragma: no-cache"); 
    header("Expires: 0");
    /*******Start of Formatting for Excel*******/   
    //define separator (defines columns in excel & tabs in word)
    $sep = "\t"; //tabbed character
    //start of printing column names as names of MySQL fields
    for ($i = 0; $i < mysql_num_fields($result); $i++) {
        $type = mysql_field_type($result,$i);
        echo mysql_field_name($result,$i) . "\t";
        if ($type == "real")
        {
            $reals[] = $i;
        }
    }
    echo "<pre>";
    print("\n");    
    //end of printing column names  
    //start while loop to get data
    while($row = mysql_fetch_row($result))
    {
        $schema_insert = "";
        for($j=0; $j<mysql_num_fields($result);$j++)
        {
            if(!isset($row[$j]))
                $schema_insert .= "NULL".$sep;
            elseif ($row[$j] != ""){
                if (in_array($j, $reals)){
                    $schema_insert .= str_replace(".",",","$row[$j]").$sep;
                } else {
                    $schema_insert .= "$row[$j]".$sep;
                }
            }
            else
                $schema_insert .= "".$sep;
        }
        $schema_insert = str_replace($sep."$", "", $schema_insert);
        $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
        $schema_insert .= "\t";
        print(trim($schema_insert));
        print "\n";
    }   
    echo "</pre>";
    ?>
    

    注意:mysql 已弃用,将从 PHP 5.5 版本中删除

    【讨论】:

    • 谢谢,所以你建议使用mysqli?
    • 是的.. 如果这是短期工作也没关系。如果您打算保留以供将来使用,最好使用 mysqli 重写它。
    • 是的,这是一个长期的项目。难道只是把mysql改成mysqli吗?
    • 不是直接的。大多数 mysql 函数都有对应的 mysqli 函数,但是对于 mysql_field_name 和 mysql_field_type 你必须通过 mysqli_fetch_field_direct 来返回一堆字段数据,包括类型和名称:php.net/manual/es/mysqli-result.fetch-field-direct.php
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2015-11-05
    • 2013-02-08
    相关资源
    最近更新 更多