我想通过从数据库中获取数据来制作excel文件。一切正常,但电话号码字段在Excel工作表中返回未知值,但它在浏览器中显示正确的值。
<?php
include('connection.php');
header( "Content-Type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=spreadsheet.xls" );
$q = mysql_query("select * from members order by id desc");
echo 'First Name' . "\t" . 'email' . "\t" . 'Phone' . "\t". 'address' . "\t". 'Membership Number' . "\t". 'Membership Category' . "\n";
while($r = mysql_fetch_array($q))
{
$name = $r['name'];
$email = $r['email'];
$phone = $r['phone'];
$address = $r['address'];
$mem_num = $r['mem_num'];
$mem_cat = $r['mem_category'];
echo "$name"."\t"."$email"."\t"."$phone"."\t"."$address"."\t"."$mem_num"."\t"."$mem_cat"."\n";
}
mysql_close($con);
?>
答案 0 :(得分:1)
您是否尝试过扩展(拉伸)Excel文件中的电话列?有时如果列很小且数字很大,excel会显示如(1.23 + 09)这个数字。
如果拉伸柱不起作用。您可以将数字转换为字符串,然后将它们放在excel文件中
抱歉,我无法在评论中添加此内容,因为我还没有权利发表评论。
答案 1 :(得分:1)
我相信你在这里混淆了数据类型。例如,电话号码不是号码。 但它被称为一个数字!是的,我知道,因为它中有很多数字,但是,它仍然不是一个数字......为什么?
电话号码确实是由一组数字构成的 - 代表数字的符号 - 但这还不是一个数字。比较字母和单词;一个单词由一组字母构成,但并非每一组字母都是一个单词。例如: dfslkwpdjkcnj 不是一个单词,不是我至少知道的语言......如果它是一个数字,你会如何加起来两个电话号码?或者你如何将电话号码除以另一个?这会是[grandma's phonenumber] / [mom's phonenumber] = [my phonenumber]
吗?
因此,要将电话号码存储在数据库中,varchar将是更合适的列类型。例如,国际电话号码以+
符号或双零(00
)开头。它们都不能存储在数字字段类型中。 +
不是数字符号,或用于指定正数,并将被截断。数字中的前导零点根本没有任何功能,并且也将被切断......
如此底线;在您的数据库中,使用varchar存储电话号码,并使用转换功能格式化您喜欢的电话号码。几乎可以肯定有十几种算法可以将电话号码格式化为某种标准格式。
然后回到你的excel:你没有创建一个excel文件,而是一个csv文件,你给它一个excel mime-type。但是给某人一张CD并说它是一张DVD也是一样的。如果你把CD放在DVD播放器中,它几乎肯定能够播放它,但它只是运气而非智慧。
创建excel文件并不像设置mime类型那么容易,因为你不能指望浏览器知道如何将文本转换为excel文件,因为它不知道excel的内部。因此,如果您真的想要创建excel文件并设置某些列的数据类型,请使用像phpExcel或any other available这样的库,如果您不想自己创建库。
答案 2 :(得分:0)
如果使用您的API,您可以格式化单元格,那就是您需要做的事情。您将电话号码存储为BigInt而不是String。我一直把电话号码存储为字符串。
Excel正确地解释您的数据 - 作为数字,而不是文本。如果您希望继续将您的电话号码存储为BigInt(我不建议这样做),您需要先将其转换为String,然后再将其写入Excel。或者,如果您的API允许,请将其作为数字写入Excel,但随后应用单元格格式以使其达到您期望的格式。