使用 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 这样的库,如果您不想自己创建一个库的话。