PHPSReadSheet:表在过程中丢失

PHPSReadSheet:表在过程中丢失,php,excel,phpspreadsheet,Php,Excel,Phpspreadsheet,我有一个Excel文件,我用PHPSReadSheet读写它。在这个过程中,我所有的表和引用都消失了。是否有需要设置为true/false的标志,或者表只是PhpSpreadsheet无法处理的东西?请参见导出前后的屏幕截图 我尝试了不同的真/假组合,但没有任何运气setIncludeCharts(真)和设置预计算公式(真) 我有什么明显的遗漏吗 require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; u

我有一个Excel文件,我用PHPSReadSheet读写它。在这个过程中,我所有的表和引用都消失了。是否有需要设置为true/false的标志,或者表只是PhpSpreadsheet无法处理的东西?请参见导出前后的屏幕截图

我尝试了不同的真/假组合,但没有任何运气
setIncludeCharts(真)
设置预计算公式(真)

我有什么明显的遗漏吗

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load("template.xlsx");

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="result.xlsx"');
header('Cache-Control: max-age=0');

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
如果与此有关,我会使用
错误报告(0)
来抑制这些通知/警告。然而,这是PhpSpreadsheet代码中的代码,我不想真正弄乱它:

我还尝试了同一模板的另一个版本,该版本导致了以下错误:



智能表在后台使用数据透视表。我找到的唯一解决方法是手工设置单元格样式。

智能表在后台使用数据透视表。我找到的唯一解决办法就是手工制作细胞样式。

有什么想法吗?非常感谢。这些表就是所谓的透视表,对吗?这些表不是透视表。它们被称为“智能表”或“智能表”(“VBA中的ListObject”),然后被转换为简单范围。它们通常用于获取下拉列表,其中包含“数据验证”的建议值或允许值。也许其中一个术语有助于谷歌搜索…@Asger更正,它们用于下拉列表。那么,在通过PHPSReadSheet机器后,有没有办法保存它们呢?有人提示吗?谢谢有什么想法吗?非常感谢。这些表就是所谓的透视表,对吗?这些表不是透视表。它们被称为“智能表”或“智能表”(“VBA中的ListObject”),然后被转换为简单范围。它们通常用于获取下拉列表,其中包含“数据验证”的建议值或允许值。也许其中一个术语有助于谷歌搜索…@Asger更正,它们用于下拉列表。那么,在通过PHPSReadSheet机器后,有没有办法保存它们呢?有人提示吗?谢谢谢谢你有这样的例子吗?如果我的原始excel文件从第二个工作表中获取下拉列表,是否可以保持该列表的完整性或重新创建?您可以使用
$spreadsheet->getSheetByName('NAME')轻松调用另一个工作表中的值。要进行格式化,请使用类似以下内容的函数:cellColor($sheet,$cells,$bgColor,$fontColor){$sheet->getStyle($cells)->setARGB($fontColor);$sheet->getStyle($cells)->getfilltype(\PhpOffice\PhpSpreadsheet\Style\Fill::Fill\u SOLID);$sheet->getStyle($cells)->getFill()->getStartColor()->setARGB($bgColor);}
谢谢!事实上,我不在乎款式会不会丢失。我需要的是下拉菜单,仍然可以从一个工作表到下一个工作表。你知道如何用PHPSReadSheet重新创建下拉菜单吗?这有点困难。您可以使用自动筛选,但每个工作表只能有一个表。你可以在这篇文章里多读一些啊好的。因此,我将仅限于一个。如你所见,我有7个。自动筛选也可以设置条件吗?所以我最好的办法就是把所有的下拉引用都放在同一张纸上?我认为这很有效,但看起来很糟糕。谢谢!你有这样的例子吗?如果我的原始excel文件从第二个工作表中获取下拉列表,是否可以保持该列表的完整性或重新创建?您可以使用
$spreadsheet->getSheetByName('NAME')轻松调用另一个工作表中的值。要进行格式化,请使用类似以下内容的函数:cellColor($sheet,$cells,$bgColor,$fontColor){$sheet->getStyle($cells)->setARGB($fontColor);$sheet->getStyle($cells)->getfilltype(\PhpOffice\PhpSpreadsheet\Style\Fill::Fill\u SOLID);$sheet->getStyle($cells)->getFill()->getStartColor()->setARGB($bgColor);}
谢谢!事实上,我不在乎款式会不会丢失。我需要的是下拉菜单,仍然可以从一个工作表到下一个工作表。你知道如何用PHPSReadSheet重新创建下拉菜单吗?这有点困难。您可以使用自动筛选,但每个工作表只能有一个表。你可以在这篇文章里多读一些啊好的。因此,我将仅限于一个。如你所见,我有7个。自动筛选也可以设置条件吗?所以我最好的办法就是把所有的下拉引用都放在同一张纸上?我认为这很有效,但看起来很糟糕。
Notice: Undefined offset: 2 in
/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php
on line 3472

Warning: trim() expects parameter 1 to be string, array given in
/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php
on line 3680
Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Exception: Invalid cell
coordinate 1))) in
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php:42
Stack trace: #0
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php(111):
PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString('1)))')
#1 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php(86):
PhpOffice\PhpSpreadsheet\Cell\Coordinate::absoluteCoordinate('1)))')
#2 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php(416):
PhpOffice\PhpSpreadsheet\Cell\Coordinate::absoluteReference('1)))') #3
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php(267):
PhpOffice\PhpSpreadsheet\Writer\Xlsx\Workbook->writeDefinedNameForPrintArea(Object(PhpOffice\PhpSpreadsheet\Shared\XMLWriter),
Object(PhpOffice\PhpS in
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php
on line 42