- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个 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/
好吧,除了对我来说很神秘的 API 文档外,我没有找到图表的任何文档,所以如果任何 PHP 电子表格看到这个,请考虑记录这个类。我的问题是如何绘制饼图并将其实现到excel表中,直接查看或将其保存到文
我想使用 phpspreadsheet 在 excel 中设置页面设置。我发现使用来自 here 的 phpexcel 来做到这一点.我不知道在 PHPExcel_Worksheet_PageSe
我已经使用 Composer 安装了 phpoffice/phpspreadsheet。它安装在基本的“供应商”目录中。但是,我需要使用它的地方是在子域目录中。 我手动将其移至不同的“供应商”目录。
使用phpSpredSheet开始使用PHP。测试基本代码会返回错误FATAL ERROR:UNAUCAT ERROR:CLASS“PhpOffice\PhpSpreadSheet\SpreadShe
我正在使用 PHP 库 PhpSpreadsheet并希望使用循环遍历单元格和行来使用 MySQL 表中的数据填充电子表格 (xlsx),类似于此: .------------------------
我需要检查当前是否使用 PHPSpreadsheet 打开了 excel 文件。 我想到了一个解决方案,处理这条线 $writer->save(file_name)进入 if else条件,但仍然无法
我正在尝试使用 PHPSpreadsheet 格式化时间单元格,但在查看公式栏时它似乎也包括日期。从字符串、日期时间对象或 unix 时间戳转换时,似乎也存在一些不一致。 getActiveSheet
我的 phpSpreadSheet 文件有问题。 Link to PhpSpreadSheet Documentation 我制作了工作簿并添加了一堆带有名称的工作表。当我记录工作表的数量及其名称时,
我正在使用 PHPSpreadsheet 来处理一些任务。 我想要做的是获取字段的填充颜色。 load("missingean.xlsx"); $allMissing = $spreadsheet->
我是一个长期的读者,但对提问还是陌生的。如果我以某种方式问错了,请纠正我。 简介 我们正在将我们的服务器从 PHP 5.4 升级到 PHP 7.2,与新版本的 PHP 不完全兼容的库之一是 PHPEx
我有一个包含 3070 个值的多维数组 $tbl= array( array( "KDNR" => 1, "GESCHL" => "test", "TITEL" => "t
我想用 PHPSpreadsheet 计算两个日期时间之间的差异(以小时为单位)。 Excel 是这样做的: A1 和 A2 单元格格式为: 这是网络上的结果: 当我通过 PHPSpreadsheet
我在我的 php 代码中创建了一个带有一个选项卡的 excel 文件并为其命名。 我使用的代码是这样的: // CREATE PHPSPREADSHEET OBJECT require "../ven
使用 PhpSpreadsheet,我想为 Excel 单元格设置白色背景。 $cells = 'A1'; $spreadsheet ->getActiveSheet() ->getS
我需要生成一个excel文件(xls)并在生成后触发下载。 我在 documentation 中找到了这个例子. getActiveSheet(); $sheet->setCellValue('A1'
我已经生成了 xmlx 文件,我可以保存它并通过以下方式提供给用户: $writer->save('hello world.xlsx'); header('Location: hello world.
我有以下单元格数据: bla bla bla abcd efgh ijkl 注意,abcd 是粗体,efgh 是斜体,ijkl 同时是粗体和斜体。 我想读取整个单元格的数据,并将其保存在数据库中,这样
我有以下单元格数据: bla bla bla abcd efgh ijkl 注意,abcd 是粗体,efgh 是斜体,ijkl 同时是粗体和斜体。 我想读取整个单元格的数据,并将其保存在数据库中,这样
如何使用 PHPSpreadsheet\Reader\Xlsx::load() 方法找出已加载的行数? 我也找不到在电子表格或工作表类中获取行数的方法(或属性)。 顺便说一句,我正在使用以下代码: $
我一直在尝试设置特定列或整个电子表格的默认格式。我正在使用 PhpOffice\PhpSpreadsheet 包来创建 Excel 电子表格。有没有办法一次设置整张或整列的格式? 以下是我如何使用该库
我是一名优秀的程序员,十分优秀!