6

PHPを使用してインポートしたいスプレッドシートがあります。PHPExcelを使用してセルデータをインポートできますが、スプレッドシート内から画像を使用する方法がわかりません。

これを実行してから、PHP内の画像を使用してサーバーなどに保存する方法はありますか?

助けてくれてありがとう!:)


アップデート:

@ mark-baker-これを手伝ってくれてありがとう!

1つのJPGを含むテストXLSファイルで以下のコードを使用しました。

$objPHPExcel = PHPExcel_IOFactory::load("SH.xls");

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();
    }
}

その後、JPEGヘッダーとその内容を出力して画像を表示できると思います$imageContents

「Picture1」など、スプレッドシート内の画像の実際の名前を取得するにはどうすればよいですか?これはPHPExcel_Worksheet_MemoryDrawingで可能ですか?

どうもありがとうございました!

4

3 に答える 3

3

あなた自身かどうかはわかりませんが、PHPExcel ボードで同様の質問をした人がいますが、まだ回答できていません。

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

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

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

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

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

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

編集

変更された質問のコードに基づいて:

$drawing->getName();

あなたが必要とするものをあなたに与えるべきです

于 2011-05-24T20:51:52.520 に答える
2

ワークシートからの画像の読み取りの例を見てきましたが、正常に動作していますが、プロジェクトの要件に合わせて同じ例を次のようにカスタマイズしました。

require 'vendor/autoload.php';

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("./excel.xlsx");

$worksheet = $spreadsheet->getActiveSheet();
$worksheetArray = $worksheet->toArray();
array_shift($worksheetArray);

echo '<table style="width:100%"  border="1">';
echo '<tr align="center">';
echo '<td>Sno</td>';
echo '<td>Name</td>';
echo '<td>Image</td>';
echo '</tr>';

foreach ($worksheetArray as $key => $value) {

    $worksheet = $spreadsheet->getActiveSheet();
    $drawing = $worksheet->getDrawingCollection()[$key];

    $zipReader = fopen($drawing->getPath(), 'r');
    $imageContents = '';
    while (!feof($zipReader)) {
        $imageContents .= fread($zipReader, 1024);
    }
    fclose($zipReader);
    $extension = $drawing->getExtension();

    echo '<tr align="center">';
    echo '<td>' . $value[0] . '</td>';
    echo '<td>' . $value[1] . '</td>';
    echo '<td><img  height="150px" width="150px"   src="data:image/jpeg;base64,' . base64_encode($imageContents) . '"/></td>';
    echo '</tr>';
}

出力: ここに画像の説明を入力

今後の参考のために、GitHub デモ プロジェクト「phpspreadsheet-Reading-Images-from-an-Excel-File」を作成しました。

Github リンク: https://github.com/rajaramtt/phpspreadsheet-Reading-Images-from-an-Excel-File

于 2020-02-14T02:20:35.420 に答える
0

次のことができます。

$im = {excel data} <br>
header("Content-type: image/jpeg"); // or whatever <Br>
$image = imagejpeg($im, NULL, 100);
于 2011-05-24T17:19:36.083 に答える