gpt4 book ai didi

php - 如何知道为什么由 phpSpreadsheet 生成的 .xls 文件已损坏?

转载 作者:行者123 更新时间:2023-12-04 19:49:42 29 4
gpt4 key购买 nike

我编写了一个 PHP 脚本,它使用 PhpSpreadSheet 从 MariaDB 上的 SQL 查询生成 XL 文件。大多数时候它工作得很好,但我最大的提取物有问题:Excel 告诉我(当我尝试打开文件时)它“已损坏”。如果我跳过警报并打开它,所有预期的行都在文件中(我的 Mac 用户根本无法打开它)。

以下是我的调查和观察结果:- 对于一个给定的查询,我可以设置一个 SQL“LIMIT”(最大行数)以再次拥有一个未损坏的文件。对于一个给定的查询,正常文件与未损坏文件和损坏文件之间的此 LIMIT 将始终是相同的数字。- 对于一个给定的查询,无论 ID 是 ASCendig 还是 DESCending 排序(在 SQL 查询中),损坏文件和未损坏文件之间的这个“LIMIT”几乎是相同的。这样,假设它不是一行中的特定字符中断文件。这个结论是通过以下事实得到验证的:如果我排除此限制周围的行,问题仍然存在。但是,如果我用一个大的随机字符串(“abcdefghijklm”替换要写入 XL 文件的单元格中的每个值,略大于我要求的每个单元格的平均长度),问题就消失了。

我正在使用 PHP V7.0.33(内存限制 1024M)/Ubuntu16.04.1/MariaDB。Apache2/log/error.log中没有内存限制警告(完全没有错误)

<?php  

//Initialization
require '/var/www/html/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
ob_clean();

//Getting data from DB
$connect = mysqli_connect("localhost", "user", "pass", "base","port");
$query = "SELECT * FROM ... WHERE ...";
$result = mysqli_query($connect, $query);
$filename="...";

//If data exist
if(mysqli_num_rows($result) > 0){

$spreadsheet = new Spreadsheet(); /*----Spreadsheet object-----*/
$Excel_writer = new Xls($spreadsheet); /*----- Excel (Xls) Object*/
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();

$first = true;
$irow=0;

//Loop on each row
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){
//Headers
if ($first) {
$irow++;
$icol=0;
foreach (array_keys($row) as &$value) {
$icol++;
$activeSheet->setCellValueByColumnAndRow( $icol,$irow, $value );
}
$first = false;
}
//DataBodyRange
$irow++;
$icol=0;
foreach (($row) as &$value) {
$icol++;
$activeSheet->setCellValueByColumnAndRow( $icol,$irow, $value );
}
}

//Finalizartion
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$Excel_writer->save('php://output');
}

?>

最佳答案

罗曼配音,我有几乎相同的问题。我的稍微颠倒了。我想要一个 xlsx,但像你一样一直收到错误。创建电子表格后,我将扩展名更改为 xls,然后打开电子表格,当它打开时,我在电子表格中找到了关于几个 undefined variable 的行。如果您需要解决您的错误,可能会检查您的代码是否有 undefined variable 被插入到您的电子表格中。只是一个想法,可能会或可能不会解决您的问题。

关于php - 如何知道为什么由 phpSpreadsheet 生成的 .xls 文件已损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54410586/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com