3

PHPExcelを使用してExcelファイルから画像を読み取り、画像をサーバーに保存して表示するにはどうすればよいですか? ファイルの拡張子は .xlsx です。

私のコード:

$objPHPExcel = PHPExcel_IOFactory::load($path);

foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) {
    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();

        ob_end_clean();
    }

}

ありがとう!!

4

1 に答える 1

6
$objPHPExcel->getActiveSheet()->getDrawingCollection()

アクティブなワークシート内のすべての画像オブジェクトの ArrayObject を返します。

これらのオブジェクトは、PHPExcel_Worksheet_Drawing または PHPExcel_Worksheet_MemoryDrawing オブジェクトのいずれかになります。[is_a()][1] を使用してどちらを識別できます。その後、(API で説明されているように) そのクラスに適したメソッドを使用して、ファイルから (PHPExcel_Worksheet_Drawing オブジェクトの場合) または直接 PHPExcel_Worksheet_MemoryDrawing オブジェクト自体から画像データを読み取ることができます。getName() および getDescription() メソッドを使用して、画像オブジェクトから関連する値を取得できます。

画像オブジェクトを印刷ヘッダーに関連付けることもできることに注意してください。

$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()

ヘッダー/フッターから画像を取得するために使用できます。これは PHPExcel_Worksheet_HeaderFooterDrawing オブジェクトの配列です。PHPExcel_Worksheet_Drawing のすべてのメソッドを使用して、これらのオブジェクトから画像ファイルを抽出できます。

編集

スプーンフィーディングタイム。

これにより、現在アクティブなワークシートからすべての画像が抽出され、サーバー上のファイルに書き込まれます。

$objPHPExcel = PHPExcel_IOFactory::load($path);

$i = 0;
foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) {
    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
        ob_start();
        call_user_func(
            $drawing->getRenderingFunction(),
            $drawing->getImageResource()
        );
        $imageContents = ob_get_contents();
        ob_end_clean();
        switch ($drawing->getMimeType()) {
            case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG :
                    $extension = 'png'; break;
            case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_GIF:
                    $extension = 'gif'; break;
            case PHPExcel_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);
}

ファイルには名前が付けられます

00_Image_n.extension

ここで、n は 1 から始まる数値で、extension は画像の種類に適した拡張子 (png、jpg、gif など) です。

于 2012-06-06T07:51:23.210 に答える