【问题标题】:How can I force a Integer-to-String export to Excel using php/mysql?如何使用 php/mysql 强制将整数到字符串导出到 Excel?
【发布时间】:2019-09-21 22:28:07
【问题描述】:

我需要将 MySql 表中的所有数据导出到 Excel。我正在使用下面的代码,它工作正常。

问题是:有 2 个字段是超过 30 位的整数。因此,当我将其导出到 .csv 文件时,excel 会将它们转换为科学记数法。

示例:字段“95145612345641859415634194164163”转换为“9.51456E+31”

如何强制它以字符串形式读取?

<?php


exportMysqlToCsv('export_csv.csv');



function exportMysqlToCsv($filename = 'export_csv.csv')
{

   $conn = dbConnection();

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $sql_query = "SELECT * FROM cadastros";


    $result = $conn->query($sql_query);

    $f = fopen('php://temp', 'wt');
    $first = true;
    while ($row = $result->fetch_assoc()) {
        if ($first) {
            fputcsv($f, array_keys($row));
            $first = false;
        }
        fputcsv($f, $row);
    } // end while

    $conn->close();

    $size = ftell($f);
    rewind($f);

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: $size");
    header("Content-type: text/x-csv");
    header("Content-type: text/csv");
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=$filename");
    fpassthru($f);
    exit;

}

// db connection function
function dbConnection(){
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "creche_escolas";
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    return $conn;
}

【问题讨论】:

标签: php mysql excel


【解决方案1】:

你应该确保你的数字是一个字符串,当你插入一个值时,试试:

fputcsv($f, ['12343231743986248756324354595', '123456', 12123437829564329758623456789]);

第一个值将保持不变,而最后一个值将转换为1.21234378296E+28

因此您需要将fputcsv($f, $row); 行替换为转换为字符串的函数,例如number_format

fputcsv($f, array_map(function($v){return number_format($v, 0, '', '');}, $row));

【讨论】:

    【解决方案2】:

    我的逻辑工作正常请在您在 excel 中导出大量数字时使用此功能首先为您设置大量 if 条件并使用逗号“'”和字符串 $large_number= " ' ".(string)$data->orders_id; 导出您的 excel 文件后。再次将逗号“'”替换为“'”。您的 excel 文件单元格可以容纳大量数字,谢谢

    【讨论】:

      【解决方案3】:

      我的逻辑工作正常,请在您在 excel 中导出大量数字时使用它 首先,将 if 条件设为一个大数,并在字符串中使用逗号“'”

      $large_number= "'".(string)$data->orders_id;
      

      导出您的 excel 文件后。再次将逗号“'”替换为“'”。您的 excel 文件单元格可以容纳大量数字

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-04
        • 2013-09-09
        • 1970-01-01
        • 2012-10-25
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        相关资源
        最近更新 更多