PHPSpreadsheet -> Как удалить одно изображение / рисунок - PullRequest
0 голосов
/ 11 июня 2018

Я использую PHPSpreadsheet, чтобы открыть Excel-лист и обменять изображение в ячейке A27.Мой фактический код не заменяет изображение, но добавляет его в качестве наложения на существующее изображение:

$inputFileName = $_SERVER['DOCUMENT_ROOT']."output/test.xlsx";
$spreadsheet = $reader->load($inputFileName);
$sheet = $spreadsheet->getActiveSheet();

// Remove old image --> Fails
$sheet->setCellValue("A27", "");
echo "Bild ".$pfad_bild." in Zelle ".$zelle." einfügen<br>";
$image_placer = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$image_placer->setName("myimg");
$image_placer->setDescription("myimg");
$image_placer->setPath("path/to/new/image");
$image_placer->setHeight(500);
$image_placer->setCoordinates('A27');
$image_placer->setOffsetX(0);
$image_placer->setOffsetY(0);
$image_placer->setWorksheet($spreadsheet->getActiveSheet());

// Save file with new tmp-name
$writer = new Xlsx($spreadsheet);
$writer->save($inputFileName."_");
// Delete old file  
unlink($inputFileName);
// Rename new file to correct name
rename($inputFileName."_", $inputFileName);

У кого-нибудь есть идеи, как удалить изображение из ячейки?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Даниэль ответит правильно, но совсем не кратко.Как правило, когда вы знаете индекс $i чертежа, который нужно удалить с рабочего листа $sheet, вы можете использовать:

$drawings = $sheet->getDrawingCollection();
unset($drawings[$i]);
0 голосов
/ 11 июня 2018

Вот ответ, я на самом деле узнал:

global $reader;
$reader = IOFactory::createReader('Xlsx');

function exchange_image_within_cell($path_file,$cell,$path_img) {
    global $reader;
    $inputFileName = $_SERVER['DOCUMENT_ROOT'].$path_file;
    $spreadsheet = $reader->load($inputFileName);

    $bilder_array=$spreadsheet->getActiveSheet()->getDrawingCollection();
    $bilder_array_copy = $bilder_array->getArrayCopy();
    $i = 0;
    foreach ($bilder_array_copy as $drawing) {
        $coordinates=$drawing->getCoordinates();
        if ($coordinates==$cell) {
            // Delete Image from Array/Cell
            unset($bilder_array_copy[$i]);  
        }
        $i++;
    }
    // Reorder and exchange array
    $bilder_array_copy = array_values($bilder_array_copy);
    $bilder_array->exchangeArray($bilder_array_copy);

    $sheet = $spreadsheet->getActiveSheet();

    // Place new image
    $sheet->setCellValue($cell, "");
    $image_placer = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
    $image_placer->setName($path_img);
    $image_placer->setDescription($path_img);
    $image_placer->setPath($path_img);
    $image_placer->setHeight(500);
    $image_placer->setCoordinates(''.$cell.'');
    $image_placer->setOffsetX(0);
    $image_placer->setOffsetY(0);
    $image_placer->setWorksheet($spreadsheet->getActiveSheet());
    // Save file with new tmp-name;
    $writer = new Xlsx($spreadsheet);
    $writer->save($inputFileName."_");
    // Delete old file
    unlink($inputFileName);
    // Rename new file
    rename($inputFileName."_", $inputFileName);
}
...