使用 PHP 在 Excel Sheet 中显示长度为 10 的 BigInt 数据类型
Display BigInt DataType of length 10 in Excel Sheet using PHP
我想通过从数据库中获取数据来制作一个 excel 文件。一切正常,但 phone 数字字段 return 在 excel sheet 中的未知值,但它在浏览器中显示正确的值。
<?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);
?>
您是否尝试过在 excel 文件中扩展(拉伸)phone 列?有时,如果列很小而数字很大,excel 会显示像 (1.23+09) 这样的数字。
如果拉伸列不起作用。您可以将数字转换为字符串,然后将它们放入 excel 文件
抱歉,我无法在评论中添加此内容,因为我还没有发表评论的权限。
如果您的 API 能够设置单元格格式,那么您需要这样做。您将 phone 号码存储为 BigInt 而不是字符串。我一直将 phone 个数字存储为字符串。
Excel 正在正确解释您的数据——作为数字,而不是文本。如果您希望继续将 phone 数字存储为 BigInt(我不推荐这样做),则需要先将其转换为字符串,然后再将其写入 Excel。或者,如果您的 API 允许,将其作为数字写到 Excel,然后应用单元格格式将其设置为您期望的格式。
我相信您在这里混淆了数据类型。例如,phone 数字不是数字。 但是它被称为数字!是的,我知道,因为里面有很多数字,但它仍然不是数字...为什么?
一个 phone 数字确实是由一组数字构成的——代表数字的符号——但这还不能使它成为一个数字。比较字母和单词;一个词是由一组字母构成的,但并不是每组字母都是一个词。例如:dfslkwpdjkcnj 不是一个词,不是我至少知道的一种语言......如果它是一个数字,你如何将两个 phone 数字?或者您如何将 phone 数字除以另一个数字?那会是 [grandma's phonenumber] / [mom's phonenumber] = [my phonenumber]
吗?
因此,要在数据库中存储 phone 数字,varchar 将是更合适的列类型。例如,国际 phone 号码以 +
符号或双零 (00
) 开头。它们都不能存储在数字字段类型中。 +
不是数字符号,或用于指定正数,将被截断。数字中的前导零根本没有任何作用,也会被截断...
所以底线;在您的数据库中,使用 varchar 存储 phone 数字,并使用转换函数根据您的喜好格式化 phone 数字。几乎可以肯定有十几种算法可以将 phone 数字格式化为某种标准化格式。
然后回到您的 excel:您不是在创建 excel 文件,而是在创建一个 csv 文件,并且您给它一个 excel mime 类型。但这与给某人一张 CD 并说它是 DVD 是一样的。如果把cd放入dvd播放器,几乎肯定能播放,但只能靠运气和智慧。
创建 excel 文件并不像设置 mime 类型那么简单,因为您不能指望浏览器知道如何将文本转换为 excel 文件,因为它不知道 excel 的内部结构。因此,如果您真的想创建一个 excel 文件,并设置某些列的数据类型,请使用像 phpExcel or any other available 这样的库,如果您不想自己创建一个库的话。
我想通过从数据库中获取数据来制作一个 excel 文件。一切正常,但 phone 数字字段 return 在 excel sheet 中的未知值,但它在浏览器中显示正确的值。
<?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);
?>
您是否尝试过在 excel 文件中扩展(拉伸)phone 列?有时,如果列很小而数字很大,excel 会显示像 (1.23+09) 这样的数字。
如果拉伸列不起作用。您可以将数字转换为字符串,然后将它们放入 excel 文件
抱歉,我无法在评论中添加此内容,因为我还没有发表评论的权限。
如果您的 API 能够设置单元格格式,那么您需要这样做。您将 phone 号码存储为 BigInt 而不是字符串。我一直将 phone 个数字存储为字符串。
Excel 正在正确解释您的数据——作为数字,而不是文本。如果您希望继续将 phone 数字存储为 BigInt(我不推荐这样做),则需要先将其转换为字符串,然后再将其写入 Excel。或者,如果您的 API 允许,将其作为数字写到 Excel,然后应用单元格格式将其设置为您期望的格式。
我相信您在这里混淆了数据类型。例如,phone 数字不是数字。 但是它被称为数字!是的,我知道,因为里面有很多数字,但它仍然不是数字...为什么?
一个 phone 数字确实是由一组数字构成的——代表数字的符号——但这还不能使它成为一个数字。比较字母和单词;一个词是由一组字母构成的,但并不是每组字母都是一个词。例如:dfslkwpdjkcnj 不是一个词,不是我至少知道的一种语言......如果它是一个数字,你如何将两个 phone 数字?或者您如何将 phone 数字除以另一个数字?那会是 [grandma's phonenumber] / [mom's phonenumber] = [my phonenumber]
吗?
因此,要在数据库中存储 phone 数字,varchar 将是更合适的列类型。例如,国际 phone 号码以 +
符号或双零 (00
) 开头。它们都不能存储在数字字段类型中。 +
不是数字符号,或用于指定正数,将被截断。数字中的前导零根本没有任何作用,也会被截断...
所以底线;在您的数据库中,使用 varchar 存储 phone 数字,并使用转换函数根据您的喜好格式化 phone 数字。几乎可以肯定有十几种算法可以将 phone 数字格式化为某种标准化格式。
然后回到您的 excel:您不是在创建 excel 文件,而是在创建一个 csv 文件,并且您给它一个 excel mime 类型。但这与给某人一张 CD 并说它是 DVD 是一样的。如果把cd放入dvd播放器,几乎肯定能播放,但只能靠运气和智慧。
创建 excel 文件并不像设置 mime 类型那么简单,因为您不能指望浏览器知道如何将文本转换为 excel 文件,因为它不知道 excel 的内部结构。因此,如果您真的想创建一个 excel 文件,并设置某些列的数据类型,请使用像 phpExcel or any other available 这样的库,如果您不想自己创建一个库的话。