PHPSpreadsheet如何复制带格式单元格 仅复制值无格式及原格式丢失问题咨询
问题根源
你使用的getValue()、getFormattedValue()、getCalculatedValue()三个方法仅能提取单元格的存储值/展示值/计算后的值,不包含单元格的填充、字体、对齐、边框等样式属性,因此仅靠这几个方法无法实现带格式的单元格复制。
你提到的原J5单元格格式消失属于异常情况,你提供的代码中没有对J5单元格做任何修改操作,建议排查是否是PhpSpreadsheet版本兼容性、原文件本身存在格式损坏的问题。
正确实现代码
要实现值+格式的完整复制,需要在复制值之后单独调用样式复制方法,示例如下:
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; $spreadsheet = IOFactory::load("test.xlsx"); $sheet = $spreadsheet->getSheet(0); // 定义源单元格和目标单元格 $sourceCell = $sheet->getCell("J5"); $targetCell = $sheet->getCell("C2"); // 1. 复制单元格值 $targetCell->setValue($sourceCell->getValue()); // 2. 复制单元格完整样式 $sheet->duplicateStyle($sourceCell->getStyle(), $targetCell->getCoordinate()); // 保存文件 $oWriter = IOFactory::createWriter($spreadsheet, 'Xlsx'); $oWriter->save("test_result.xlsx"); ?>
补充说明
如果需要批量复制多个单元格的样式,也可以直接传入单元格范围作为duplicateStyle方法的第二个参数,比如要把J5的样式复制给C2到C10的所有单元格,第二个参数写'C2:C10'即可。
内容的提问来源于stack exchange,提问作者cyber01
相关产品推荐
相关产品推荐

