PHPSpreadsheet 如何复制带格式的单元格?

PHPSpreadsheet how to copy cell with formatting?

你能告诉我如何将一个单元格的值及其格式复制到另一个单元格吗? 您有一个 Excel 文档 (xlsx),例如,单元格 J5 包含值“positive”,黑色填充和白色文本(黑色背景上的白色文本)。 我想将此值复制到单元格 C2 中,但无论我如何尝试(既不是 getValue 也不是 getFormattingValue)- 只复制了值,没有格式化。

下面是一些尝试不同选项的代码。顺便说一下,我还注意到在生成的文件 (test_result.xlsx) 中,单元格 J5 的格式完全消失了。

我做错了什么?

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("test.xlsx");
$links2 = $spreadsheet->getSheet(0)->getCell("J5")->getValue();
$links3 = $spreadsheet->getSheet(0)->getCell("J5")->getFormattedValue();
$links4 = $spreadsheet->getSheet(0)->getCell("J5")->getCalculatedValue();
$spreadsheet->getSheet(0)->setCellValueByColumnAndRow(3, 2, $links2);
$spreadsheet->getSheet(0)->setCellValueByColumnAndRow(3, 3, $links3);
$spreadsheet->getSheet(0)->setCellValueByColumnAndRow(3, 4, $links4);
$oWriter = IOFactory::createWriter($spreadsheet, 'Xlsx');
$oWriter->save("test_result.xlsx");
?>

getFormattedValue 仅传输单元格本身的格式(文本、cilo 等),但不传输样式。 这样您就可以将数据复制到数组中,然后应用它。那些。最终的伪代码将如下所示:

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("test.xlsx");
$links2 = $spreadsheet->getSheet(0)->getCell("J5")->getValue();
$styleArray = $spreadsheet->getSheet(0)->getStyle('J5')->exportArray();
$spreadsheet->getSheet(0)->setCellValueByColumnAndRow(3, 2, $links2);
$spreadsheet->getSheet(0)->getStyle('С2')->applyFromArray($styleArray);
$oWriter = IOFactory::createWriter($spreadsheet, 'Xlsx');
$oWriter->save("test_result.xlsx");
?>