🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2471閲覧

PHPEXCEL 画像の挿入がある行数から位置が固定になってしまう。

XI_105

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/11/28 02:14

編集2019/11/28 02:26

前提・実現したいこと

PHPであるシステムを製造しています。
その中で多人数へ郵送するDMの作成をしています。

発生している問題・エラーメッセージ

各ページに同一画像を挿入していったところ、31ページ目・1700行付近から画像が正しい位置に挿入されなくなった。

該当のソースコード

PHP5.6.4
下記コードは新規Excelに行番号と画像をセットするのみの検証用コードだが1726行目付近から先が印字できない

$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAh1BMVEVHcEz/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE3/zE1mRQDPojXZqjqziSd5Vgr1xEhwTQWfeB2zooCMZxPZ0b/su0OMdED18++DXg6DaDDisz/i3M+Wf1CWbxjs6N/////GmTC8kSupgCK8ro/GuZ/Pxa9wURCfi2B5XCBjMO3CAAAADXRSTlMA36/PgFCPIJ/vQL9g4e8akwAAAkFJREFUeF7tmNmu4jAMhmlLSwK1uy/sy1mXef/nmyH0RCImTfDM4Wq+GyQj/fJSy7EnI8zSZBHAQLBI0tmEQSwCIAQivk9llkiwIBN/v+YhjBLO/bwR4ER4eDWV4IGcutyJwJNo1KlYgjcyHgkL7sIanoA7ET46fCUBDIQrP/w8xcDEqN1MAhN53XoRsIlIgrhMSWDs4CyV538Dc/hL5oNQCCZZiVhm4GsPhwxRHVRkvna4ZCkBg6pGRV057JpECZGSFThQOOwaebs5Njiwcdk18c3ao2bETr+AYERo6bBrAlUzjke0bum/EUpJ8XnJhmSyAGCUn7BQuWZ8kDTboGC3iEYJ8ZuWCvHhC/0X2uXgpspJ2xrNX20QsTwW2RIsLLPiWCJiV123v9EiDWo23WvxkiuW6ueleO02qGmMFklIg/tiNG16FRlbKJ3MiNCpbw9btPLr0PYnJWQMpMAMbbt++sO+f2vblWK7utC2b/3+/N96awoF5uAvz0pfTw6+zjqlOf5jUjXlkwXtDzbk3SbpUP7s7Tr9Jx3cko7sEi8cTrdlTgdEJJEl9BHxjN+s3kmA6/cVfvN8XTNFaI4KrdV+7L9F9h/toEIHSXjrobVDL3bmQ0shaHB2aGDC8hht0Elje2lP4S6lxr5FRGSkWqCDNhpbIbIardQZXSHsS011RAtHY17HrjUr75CCXe5eRwUZA40RYN3suCtkXnQlKsquyH9uqRU/s67zDwgPOGkwjiwPOPswDlHs09hDj3X88+FvXybnvMjgRHsAAAAASUVORK5CYII="; $book = new PHPExcel(); $sheet = $book->getActiveSheet(); $maxR = 30; for ($i = 1; $i <= 2000; $i++) { $r = $i; $cell1 = "A{$r}"; $cell2 = "C{$r}"; // セルに書込み $sheet->setCellValue($cell1, $i); // 画像の設定 $gdImage = imagecreatefrompng($img); imagesavealpha($gdImage, true); imagepng($gdImage); $objDrawing = new PHPExcel_Worksheet_MemoryDrawing(); $objDrawing ->setName('image') ->setDescription('image') ->setImageResource($gdImage) ->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG) ->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG) ->setResizeProportional(false) ->setHeight(10) ->setWidth(10) ->setCoordinates($cell2) ->setWorksheet($sheet); if (($i % $maxR) === 0) { // 30行に1回改ページ $sheet->setBreak($cell1, PHPExcel_Worksheet::BREAK_ROW); } } // 保存 $writer = PHPExcel_IOFactory::createWriter($book, 'Excel2007'); $writer->save($filePath);

試したこと

上記の簡易コードを作成して検証、現象は変わらず
PhpSpreadseetでも検証したが同じ現象が発生。
他機能もPHPEXCELで作成しているので極力変更はしたくない
イメージ説明イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/11/29 20:39

>PHPEXCEL  実装に大きく変更があるわけではないのですが、非推奨となっているので、 後継のPhpSpreadsheetを利用してください。
XI_105

2019/12/02 00:58

試したことに書いてあるのですがPhpSpreadsheetでも同様の現象が発生しております。
guest

回答2

0

自己解決

画像がおかしくなる上限を超える前にシートを別けることで対応することとしました。

投稿2020/02/20 02:33

XI_105

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考になるか分かりませんが、以下の環境で追試しましたが問題発生しませんでした。

PHP 5.6.9(Windowsのx86版) - Windows10(x64)ローカル環境PHP
PHPExcel v1.8.2 - Composer経由でインストール
Excel 2019相当(Office365: バージョン1902) - 印刷プレビュー&xps出力で問題なし

PHPExcelが作成するファイル内容に差異が出るとは考えづらいので、印刷ソフト側に問題あったりはしないでしょうか?

投稿2019/12/06 06:44

FKD

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問