php写入xls文件空白单元格未显示

php写入xls文件空白单元格未显示,php,excel,Php,Excel,我正在尝试将从SQL查询获得的数据写入以制表符分隔的文本文件。但有一个问题是,如果有一个空白单元格,它就不会注册。只需在空白单元格中写入下一个文本。 数据库数据: id text 2ndText 1 1t1 2t1 2 2t2 3 1t3 2t3 excel输出: id text 2ndText 1 1t1 2t1 2 2t2 3 1t3

我正在尝试将从SQL查询获得的数据写入以制表符分隔的文本文件。但有一个问题是,如果有一个空白单元格,它就不会注册。只需在空白单元格中写入下一个文本。

数据库数据:

id    text    2ndText
1     1t1     2t1
2             2t2
3     1t3     2t3
excel输出:

id    text            2ndText
1     1t1             2t1
2     2t2
3     1t3             2t3
我们使用的代码是:

while ($row=mysql_fetch_row($Recordset1)) 
{ 
    $line=''; 
    $fc=0;
    for ($i=0;$i<$fields;$i++)
    {
        if (substr(strtoupper(mysql_field_name($Recordset1,$i)),0,7)!="DBSTACK")
        {
            if (strtoupper($_POST['checkbox'.$fc])==strtoupper(mysql_field_name($Recordset1,$i)))
            {   
                $value=$row[$i];
                if ((!isset($value)) | ($value == "")) 
                { 
                    $value = "\t"; 
                } else 
                { 
                    $value=str_replace('"','""',$value); 
                    $value='"'.$value.'"'."\t"; 
                } 
                $line.=$value;
            }
            $fc++;
        }
    } 
    $data.=trim($line)."\n"; 
} 
$data=str_replace("\r","",$data);
$TargetFileName="temp/".session_id().time().".xls";
$target=fopen($TargetFileName,"wb");
$XLData=$header."\n".$data;
fwrite($target,$XLData);
fclose($target);
while($row=mysql\u fetch\u row($Recordset1))
{ 
$line='';
$fc=0;

对于($i=0;$i我不会用一根十英尺长的杆子去碰你的数据库代码。你使用的数据库API已经被弃用多年了;替代品已经有十年了

所以我的第一个建议是使用一个合适的数据库API,它返回一个按列名索引的行数组

我还建议您的数据库查询只选择您需要的列,而不是
select*

如果你想写一个CSV文件(技术上是TSV,但这很好),你应该使用,这将节省你必须滚动你自己的CSV写入程序,并允许你使用数组而不是字符串

您还应该使用
csv
扩展名保存它,以避免在Excel中打开时出错

但是,至于您所问的问题,当有一个空字段时,您没有写入值,只有一个制表符分隔符。那么:

if ((!isset($value)) | ($value == "")) { 
    $value = "\"\"\t"; 
}

PS
$value
将始终被设置,因为您在上面的行中设置了它。

这确实是我们计划解决此问题的遗留代码。关于答案,它非常有效,谢谢。