同じディレクトリにあるExcelファイルと画像を読み込んで、PhpSpreadsheetで指定したシートに画像を出力させたいです。
画像の出力はできるのですが、意図したシートに出力する方法が分かりません。
発生している問題
シートが1つの場合は下記コードで問題ないのですが、複数シートがあった場合に画像だけ違うシートに出力されてしまいます。
PhpSpreadsheetはComporserでインストールしました。
該当のソースコード
php
1<?php 2require 'vendor/autoload.php'; 3 4use PhpOffice\PhpSpreadsheet\Spreadsheet; 5use PhpOffice\PhpSpreadsheet\Writer\Xlsx; 6 7 8 9$file_name = 'base.xlsx'; 10 11//ファイルの読み込み 12$reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); 13$spreadsheet = $reader->load($file_name); 14 15//ファイルからシートを取り出す 16$sheet = $spreadsheet->getSheetByName("sheet1"); 17 18 19//配列から値をセットする 20$array1 = [ 21 //lane1 22 ['テキスト'], 23 //lane2 24 [], 25 //lane3 26 [] 27]; 28 29$sheet->fromArray($array1, null, 'A1'); 30 31 32//画像 33$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); 34$drawing->setName('img01'); 35$drawing->setDescription('img01'); 36$drawing->setPath("img01.PNG"); 37$drawing->setCoordinates('C9'); 38 39$drawing->getShadow()->setVisible(true); 40 41$drawing->setWorksheet($spreadsheet->getActiveSheet()); 42 43 44//書き込み 45$writer = new Xlsx($spreadsheet); 46$writer->save($file_name);
試したこと
・Excelのシートが1つだった場合、指定したsheet1に画像が出力されることを確認しました。
・Excelのシートが2つだった場合、文章はsheet1、画像はsheet2に出力されました。
・Excelのシートが3つだった場合、文章はsheet1、画像はsheet3に出力されたので、41行目のgetActiveSheet()という指定が間違っているのではないかと下記の指定を変えてみました。
getSheetByName("sheet1")としたところUncaught ArgumentCountErrorになりました。
getActiveSheet("sheet1")としたところ、テキストが表示されなくなり画像がsheet3に出力されました。
どのような指定をすれば指定したシートに画像が出力されるでしょうか?
ご教授の程よろしくお願いいたします。
あなたの回答
tips
プレビュー