使用PHP在Excel工作表中显示长度为10的BigInt数据types

我想通过从数据库中获取数据来创build一个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); ?> 

截图

我相信你在这里混淆了数据types。 一个电话号码,例如,不是一个数字。 但它被称为一个数字! 是的,我知道,因为它里面有很多数字,但是还是不是数字…为什么?

一个电话号码确实是由一组数字构成的,这些数字代表一个数字,但是这个数字还没有成为数字。 比较字母和单词; 一个字是由一组字母构成的,但不是每一组字母都是一个字。 例如: dfslkwpdjkcnj是不是一个字,至less不是我所知道的一种语言…如果它是一个数字,你将如何合计两个电话号码? 或者如何将另一个电话号码分开? 那会是[grandma's phonenumber] / [mom's phonenumber] = [my phonenumber]

所以,要将一个电话号码存储在数据库中,varchar将是一个更合适的列types。 例如,国际电话号码以+符号或双零( 00 )开头。 它们都不能以数字字段types存储。 +不是一个数字符号,或者用于指定一个正数,并将被切断。 在一个数字中的零引导没有任何function,并将被切断…

所以底线; 在你的数据库中,使用varchar来存储一个电话号码,并使用转换函数来格式化一个你喜欢的电话号码。 几乎可以肯定有十几种algorithm可以将电话号码格式化为某种标准格式。

然后回到你的excel:你不是创build一个excel文件,而是一个csv文件,你给它一个Excel MIMEtypes。 但是,这将是一样的给一个人一个CD,并说这是一个DVD。 如果你把CD放在DVD播放机上,几乎肯定能播放它,但它只是运气而已。

创build一个excel文件并不像设置mimetypes那么容易,因为你不能指望浏览器知道如何将文本转换成excel文件,因为它不知道excel的内部。 所以,如果你真的想创build一个excel文件,并设置某些列的数据types,使用像phpExcel或任何其他可用的库,如果你不想自己创build一个库。

你有没有尝试扩展(拉伸)在你的Excel文件的电话列? 如果列数小而数字大的话,excel显示的数字就像(1.23 + 09)这样。

如果拉伸柱不起作用。 你可以将数字转换成string,然后把它们放在Excel文件中

对不起,我不能添加这个评论,因为我没有特权发表评论呢。

在这里输入图像说明

如果使用你的API,你可以格式化单元格,这就是你需要做的。 您将您的电话号码存储为BigInt而不是string。 我一直将电话号码存储为string。

Excel正确地解释你的数据 – 作为一个数字,而不是文本。 如果您希望继续将您的电话号码存储为BigInt(我不build议这么做),则在将其写入Excel之前,需要将其转换为string。 或者,如果您的API允许,将其作为数字写入Excel,然后应用单元格格式将其转换为您期望的格式。