为什么从PHP导出时,XLS需要“ID#”作为第一列标题?

我写了一个实用程序将数据库中的报告导出到xls文件。 数据库中有一些utf-8字符,当我把它写入excel时,这些字符没有被转换成不可读的文本。 我发现了一个奇怪的解决scheme,如果我发布第一列第一个单元格作为具体的“ID#”,它写得很完美。 不pipe我和其他专栏做什么,都没关系。 但是,如果我把其他东西以外的ID#,打印不可读的行。

例如,当我把ID#放在第一行的第一个单元格时,这就是我所得到的

在这里输入图像说明

这是完美的。

但是,如果我把第一个单元格中的其他东西,这是发生了什么。

在这里输入图像说明

这是代码。

function generate_excel_report($filename, $header_array, $column_names, $data, $attachment_column, $correct_answer_column = FALSE, $insert_correct_answer = False) { header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Type: application/vnd.ms-excel;charset=UTF-8"); iconv_set_encoding("internal_encoding", "UTF-8"); iconv_set_encoding("output_encoding", "ISO-8859-1"); for ($i = 0; $i < count($header_array); $i++) { echo $header_array[$i] . "\t"; } echo "\n"; $j = 0; foreach ($data as $row) { $k = 0; for ($i = 0; $i < count($header_array); $i++) { if ($i == $attachment_column) { if ($row['attachment_type'] != '') { echo '"' . $row['attachment_url'] . '"' . "\t"; } else { echo '"' . $row[$column_names[$k]] . '"' . "\t"; $k++; } } else if ($i == $correct_answer_column && $insert_correct_answer) { echo '"' . $row['option_' . $row['correct_answer']] . '"' . "\t"; } else { if ($i == 0) { echo '"' . ++$j . '"' . "\t"; } else { echo '"' . $row[$column_names[$k]] . '"' . "\t"; $k++; } } } echo "\n"; } } 

我完全不知道为什么这样做…任何人都可以在这里帮忙吗?

谢谢

这是因为Excel认为以IDxxx开头的文本文件是SYLK格式。 请参阅例如这里你可以用Id或ID'(带撇号),但不是ID。