php - 使用 phpSpreedSheet 加载图形
问题描述
我正在使用 PhpSpreedSheet 加载一个 excel,更新它并再次保存它......我发现的问题是它不能很好地保存图形,当你打开 excel 它告诉你典型的事情已经一个问题和“您希望我们尝试恢复尽可能多的内容吗?”并删除图形。
Excel 已完成文件级别的验证和修复。本书的某些部分可能已被修复或丢弃。部分已移除:文档的部分属性。(图纸形式) 部分删除:图纸形式。删除部分:图纸表格。
$reader = IOFactory::createReader('Xlsx');
$reader->setIncludeCharts(true);
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($this->spreadsheet);
$writer->setIncludeCharts(true);
解决方案
要包含绘图,您应该使用以下内容:
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Logo');
$drawing->setPath('./images/officelogo.jpg');
$drawing->setCoordinates('B15');
$drawing->setHeight(36);
$drawing->setWorksheet($spreadsheet->getActiveSheet());
要读取所有图像,您应该使用文档中的代码:
$i = 0;
foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $drawing) {
if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) {
ob_start();
call_user_func(
$drawing->getRenderingFunction(),
$drawing->getImageResource()
);
$imageContents = ob_get_contents();
ob_end_clean();
switch ($drawing->getMimeType()) {
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_PNG :
$extension = 'png';
break;
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_GIF:
$extension = 'gif';
break;
case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_JPEG :
$extension = 'jpg';
break;
}
} else {
$zipReader = fopen($drawing->getPath(),'r');
$imageContents = '';
while (!feof($zipReader)) {
$imageContents .= fread($zipReader,1024);
}
fclose($zipReader);
$extension = $drawing->getExtension();
}
$myFileName = '00_Image_'.++$i.'.'.$extension;
file_put_contents($myFileName,$imageContents);
}
推荐阅读
- javascript - 尝试将对象添加到数组时出现意外结果
- jetbrains-ide - 在 JetBrains IDE 中进行 linting 时忽略 yaml 文件
- python - Floyd-Warshall 最多有 k 个边
- c# - 如何在调用 display() 时摆脱 namespace.Classname?
- nodegit - 在 Linux 中安装 nodegit 时出错
- node.js - 如何在mongodb的整个集合中获取给定键的所有值
- javascript - 如何选择多个具有相同名称的类并触发相同的功能?
- reactjs - useRef 抛出不可分配给类型 LegacyRef
| 不明确的 - rust - 如何让 Rust 在不安全的代码中强制执行 *mut 的生命周期?
- sql - 如何将具有多个结果的子查询插入多行?