PHP を利用したウェブシステムを開発している者です。
現在担当しているウェブシステムの開発も大詰めを迎えているのですが、
エクセル出力するプログラムに不具合があるようなのですが、
私の技量では到底解決できそうにないと判断して、ここに質問した次第です。
現在開発中のウェブシステムの概要を簡潔にまとめますと、
DBに登録されているデータをエクセルファイルに出力するシステムです。
基本は1レコードに対して1エクセルファイルを出力します。
出力するエクセルファイルは決まった様式(テンプレートファイル)に値を入れて出力します。
エクセルファイルを出力するプログラムの流れ
- 1.1.DBからデータを取得する => 2.へ
- 2.1.エクセルファイル読込(最初はテンプレートファイルを、以降は1ループ前に出力したエクセルファイル読込)
- 2.2.それぞれの値を決められたセルに出力
- 2.3.出力
※「2.」については、DBから取得したデータのレコード数分繰り返します。
エクセルファイルの取り扱いについては、PHPSpreadsheet というライブラリを利用しています。
バージョンは 1.4.0 です。
プログラムの流れ「2.2.」の最中に、透過背景に黒色の丸印を置いた PNG 画像を指定したセルに配置するのですが、
そのプログラムに問題があるのか、出力されたエクセルファイルを開こうとすると、
エクセルファイルが破損している旨のエラーメッセージが表示されます。修復するか否かの選択で「はい」を選択すると、
丸印の PNG 画像は決まったセルに表示されているので、エラーは出るものの出力できていました。
しかし、プログラムの流れ「2.」はレコード数分ループするので、2回目以降のループで先ほど出力したエクセルファイルを
ライブラリが開こうとしたときにエラーが発生して、PHP がエラーを吐いて強制終了してしまいます。
さて、その問題のソースコードを以下に載せます。
PHP
1// テンプレートファイル読込 2$book = $reader -> load($dir . 'template/○○○一覧表.xlsx'); 3 4// Sheet1 を指定 5$sheet = $book -> getSheet(0); 6 7 8 9// 図形等を扱うクラスのインスタンス生成 10$circle = new Drawing(); 11 12// 図の名称を設定 13$circle -> setName($name); 14// 図の説明文を設定 15$circle -> setDescription($description); 16 17// 画像のフルパスを指定 18$circle -> setPath($path); 19// 図を出力するシートを指定 20$circle -> setWorksheet($sheet); 21// 図の高さを指定 22$circle -> setHeight($height); 23// 配置するセル番地を指定("A1"という具合に文字列で指定) 24$circle -> setCoordinates($coordinate); 25// 指定したセルの左上を起点としたオフセット横 26$circle -> setOffsetX($offsetX); 27// 指定したセルの左上を起点としたオフセット縦 28$circle -> setOffsetY($offsetY); 29 30$writer = new XlsxWriter($book); 31$writer -> save($filePath . $fileName);
インターネットで様々なワードで検索してみたものの、解決策を見つけることができませんでした。
以上となりますが、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー