在PHPExcel和Spreadsheet中,如何防止图片因自动换行而拉伸变形?

为什么无论PHPExcel和Spreadsheet插入图片,只要同一行其他列有自动换行。图片就会自动拉伸变形?并且设置了图片宽高,取消按比例都没用?
image.png

$drawingContent = new Drawing();
        foreach ($listDatas as $item) {

            // 插入图片
            $drawingContent->setPath($item[3])
                ->setCoordinates('D' . $row)
                ->setResizeProportional(false)
                ->setWidthAndHeight(50, 50)
                ->setWorksheet($sheet);

            $sheet->setCellValue('A' . $row, $item[0]);
            $sheet->setCellValue('B' . $row, $item[1]);
            $sheet->setCellValue('C' . $row, $item[2]);
            $sheet->setCellValue('E' . $row, $item[4]);
            $sheet->setCellValue('F' . $row, $item[5]);
            $sheet->setCellValue('G' . $row, $item[6]);
            $sheet->setCellValue('H' . $row, $item[7]);
            $sheet->setCellValue('I' . $row, $item[8]);
            $sheet->setCellValue('J' . $row, $item[9]);
            $sheet->setCellValue('K' . $row, $item[10]);
            $sheet->setCellValue('L' . $row, $item[11]);
            $sheet->setCellValue('M' . $row, $item[12]);
            $sheet->setCellValue('N' . $row, $item[13]);
            $sheet->setCellValue('O' . $row, $item[14]);
            $row++;
        }

        // 居中
        $sheet->getStyle('A9:C'.$row)->applyFromArray($styleArray);
        $sheet->getStyle('E9:O'.$row)->applyFromArray($styleArray);

希望图片能按宽高设置去实现

阅读 435
avatarAI BotBETA

在 PHPExcel 和 PhpSpreadsheet 中,图片可能被拉伸的原因可能与单元格的自动调整大小功能有关。当您在一个单元格中插入图片,并且该单元格所在行的其他列包含自动换行的文本时,Excel 可能会尝试调整行高以适应最大的内容(包括图片和文本)。这可能导致图片被拉伸或压缩。

要解决这个问题,您可以尝试以下方法:

  1. 设置行高为固定值:在插入图片之前,设置包含图片的行的行高为固定值,这样 Excel 就不会尝试自动调整行高。
$sheet->getRowDimension($row)->setRowHeight(行高值);
  1. 设置图片的属性:确保在插入图片时,您已经设置了图片的宽度和高度,并且禁用了按比例缩放。
$drawingContent->setResizeProportional(false)
    ->setWidthAndHeight(50, 50);
  1. 避免自动换行:如果可能,尝试避免在包含图片的行的其他列中使用自动换行。或者,您可以尝试将文本放入文本框(形状)中,而不是直接在单元格中。
  2. 检查其他因素:确保没有其他因素(如合并的单元格、其他格式设置等)影响行高或图片的大小。

如果上述方法仍然无法解决问题,您可能需要进一步调试代码或检查 Excel 的具体行为。另外,请确保您使用的是最新版本的 PhpSpreadsheet,因为旧版本可能存在已知的问题或限制。

最后,请注意,Excel 的行为可能因版本而异,因此某些解决方案可能只在特定版本的 Excel 中有效。如果您在使用 PhpSpreadsheet 时遇到与 Excel 兼容性相关的问题,建议查阅相关文档或社区论坛以获取更多帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏