我正在一个 PHP 站点上工作,我必须从 mysql 数据库中导出所有用户。一切正常,但是当我打开导出的 csv 文件时,手机号码和日期没有以正确的格式显示,即手机号码显示为十六进制,日期显示为 #####。我想以正确的格式显示数据格式有什么帮助吗?提前致谢
3 回答
它实际上不是那个标志,点击它会显示你的价值。CSV 只是将其显示为预览。
您对 CSV 格式有很高的期望。它只是分为列的纯文本,因为您可以自己检查是否只是在文本编辑器中打开生成的文件(而不是双击它并由默认程序加载它)。其内容的解释基本上留给客户端电子表格软件,您显然使用的是最不可用的:Microsoft Excel。
双击文件时,Excel 不会提示任何选项。它对所有内容都使用默认选项,并且大多数默认选项选择不当:
文件编码为电脑默认编码:Win-1252、EUC-JP...
列分隔符是计算机的默认列表分隔符:
,
在美国,;
在一些欧洲国家...日期必须采用计算机的默认日期格式:美国的 MM/DD/YYYY,其他几乎所有地方的 DD/MM/YYYY。
前导零被丢弃。
如果您在例如 LibreOffice Calc 中加载文件,您会看到一个对话框,您可以在其中确保正确加载数据(但是,这仍然是您每次都需要执行的手动任务)。
总结一下:如果您无法控制如何处理 CSV,那么 CSV 是一种糟糕的格式(但它很受欢迎,因为它很容易生成)。
至于你的确切问题:
手机号码显示为十六进制
我怀疑你的意思是:
6.00912E+15
这不是十六进制,它是您在学校学习的科学记数法 (6.00912 × 10 15 ),因为它通常在计算机中表示。这就是 Excel 显示大数的方式;因为,是的,Excel 将坚持将电话作为数字处理(事实并非如此)。如果单击单元格,您将在顶部栏中看到完整的值。
请注意,以电话号码开头的电话号码(例如格式0
中的国际号码)将无法在 Excel 中正确加载。00<country code>
它将删除前导零并将单元格格式更改为“文本”不会让它们恢复原状。
日期显示为#####。
这就是 Excel 表示列太窄而无法显示值的方式。只需拖动列标题之间的小分隔符。
<?php
session_start();
$csv_output = '';
$query_result=mysql_query("select * from tablename");
//add your table field name and proceed forther
while($result=mysql_fetch_array($query_result)){
$csv_output.=",".$result['fildname']." ";
}
//$csv_output.="\n";
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=csvfile.csv");
header("Pragma: no-cache");
header("Expires: 0");
print $csv_output;
exit;
?>
我试试这个希望你能用这个东西