質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

Q&A

解決済

1回答

4100閲覧

PhpSpreadsheet HTML形式で書き込み時レイアウト設定ができない

ambiti0us

総合スコア4

PHP

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

0グッド

0クリップ

投稿2021/03/26 04:46

編集2021/03/26 04:50

PhpSpreadsheetを使用してEXCEL操作、ダウンロードを行っていますが
HTML形式での書き込み後、レイアウト(枠線など)の操作が反映されません。
以下ソースの//レイアウト設定の部分が反映されないです。
EXCEL自体はダウンロードできて出力データも想定のものが出ています。
PHPはあまり詳しくないので教えていただきたいです。
よろしくお願いいたします。

PHP

1<?php 2ini_set("display_errors", 1); 3require '/home/ec2-user/environment/vendor/autoload.php'; 4 5// Spreadsheet 6use PhpOffice\PhpSpreadsheet\Spreadsheet; 7use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader; 8use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader; 9use PhpOffice\PhpSpreadsheet\Writer\Xlsx; 10use PhpOffice\PhpSpreadsheet\Style\NumberFormat; 11use PhpOffice\PhpSpreadsheet\Style\Border; 12use PhpOffice\PhpSpreadsheet\Style\Alignment; 13use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; 14 15$start_date = $_POST['start_date1']; 16$end_date = $_POST['end_date1']; 17$target_month = $_POST['target_month']; 18$excel_outdate = $_POST['excel_outdate']; 19 20// スプレッドシートを作成 21$spreadsheet = new Spreadsheet(); 22 23// ファイルのプロパティを設定 24$spreadsheet->getProperties() 25 ->setTitle($target_month); 26 27// シート作成 28$spreadsheet->getActiveSheet('sheet1')->UnFreezePane(); 29$sheet = $spreadsheet->getActiveSheet(); 30$sheet->setTitle($target_month); 31 32$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html(); 33$spreadsheet = $reader->loadFromString($excel_outdate); 34 35// レイアウト設定 36$objStyle = $sheet->getStyle('A1:G37')->getBorders(); 37$objStyle->getAllBorders()->setBorderStyle(Border::BORDER_THIN); 38//$sheet->setCellValue("A1", 'helloaaaa'); 39$fileName = "$target_month.xlsx"; 40 41// ダウンロード 42header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 43header('Content-Disposition: attachment;filename="'.$fileName.'"'); 44header('Cache-Control: max-age=0'); 45header('Cache-Control: max-age=1'); 46header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 47header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 48header('Cache-Control: cache, must-revalidate'); 49header('Pragma: public'); 50 51$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); 52$writer->save('write.xlsx'); 53 54// バッファをクリア 55ob_end_clean(); 56mb_http_output("pass"); 57 58$writer->save('php://output'); 59exit(); 60 61?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここ、処理がつながっていますかね?最初に作成した新規ブックからシートを呼び出してる気がします。
こういう複数のスプレッドを並行処理する場合は、変数を上書きしてしまうと想定の処理ができなくなるので、$spreadsheet2とか変数名を変えておきましょう(変数は$spreadsheetと書いているページが多いですが、実際わかりやすければ何でもいいです)。

PHP

1// スプレッドシートを作成 2$spreadsheet = new Spreadsheet(); //Aのブック 3 4// ファイルのプロパティを設定 5$spreadsheet->getProperties() 6 ->setTitle($target_month); 7 8// シート作成 9$spreadsheet->getActiveSheet('sheet1')->UnFreezePane(); 10$sheet = $spreadsheet->getActiveSheet(); //Aのブックから現在のシート呼び出し 11$sheet->setTitle($target_month); 12 13$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html(); 14$spreadsheet = $reader->loadFromString($excel_outdate); //Bのブック 15 16// レイアウト設定 17/*この$sheetはAのブックに対応してるのではないでしょうか?*/ 18$objStyle = $sheet->getStyle('A1:G37')->getBorders(); 19$objStyle->getAllBorders()->setBorderStyle(Border::BORDER_THIN);

投稿2021/03/26 05:13

編集2021/03/26 05:22
FKM

総合スコア3647

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

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

ambiti0us

2021/03/26 05:42 編集

ご回答ありがとうございます。 おっしゃる通りでした。 Aのブック部分をコメントし以下のコードでうまくいきました。 しばらく悩んでいたので大変助かりました。 ありがとうございます。 $reader = new \PhpOffice\PhpSpreadsheet\Reader\Html(); $spreadsheet = $reader->loadFromString($excel_outdate); $sheet = $spreadsheet->getActiveSheet(); // レイアウト設定 $objStyle = $sheet->getStyle('A1:G37')->getBorders(); $objStyle->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問