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

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

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

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

Q&A

解決済

1回答

3260閲覧

Excel出力 ループ セルの位置

kirin311

総合スコア53

PHP

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

0グッド

0クリップ

投稿2018/06/14 00:38

編集2018/06/14 03:13

また行き詰りましたので質問失礼します。

前提・実現したいこと

・PHPでExcel操作のループで理想のセル配置。

■ 理想としては以下の通りです。

ABCDEFG
ダミー1ダミー2
名前1名前2
ダミー3ダミー4
名前3名前5

以降繰り返し~

理想通りにしたいです。

■■な機能を実装中に以下のエラーメッセージが発生しました。
エラーは、ありません。

該当のソースコード

■ $listの中身
array (size=10)
0 =>
array (size=2)
'name' => string '名前1'
'address' => string 'ダミー1'
1 =>
array (size=2)
'name' => string '名前2'
'address' => string 'ダミー2'
2 =>
array (size=2)
'name' => string '名前3'
'address' => string 'ダミー3'
.
.
.
以降繰り返し
.
.
.

php

1if ($is_dlbutton) 2{ //DLボタンを押したら実行 3 4 // テンプレートの読込 5 6 $obj = PHPExcel_IOFactory::createReader('Excel5'); 7 $file = $obj->load("./excel.xls"); 8 $file->setActiveSheetIndex(0); 9 $sheet = $file->getActiveSheet(); 10 $cnt = 0; 11 while ($row = $list[$cnt]) 12 { 13 if ($cnt % 2 == 0) 14 { 15 $sheet->setCellValue('A' . (8 * $cnt + 2) , $row["address"]); //住所 16 $sheet->setCellValue('A' . (8 * $cnt + 5) , $row["name"]); //名前 17 } 18 else 19 { 20 $sheet->setCellValue('G' . (8 * $cnt + 2) , $row["address"]); //住所 21 $sheet->setCellValue('G' . (8 * $cnt + 5) , $row["name"]); //名前 22 } 23 24 $cnt++; 25 } 26 27 header('Content-Type: application/force-download'); 28 header('Content-Disposition: attachment; filename= mb_convert_encoding("excel.xls", "SJIS-win", "UTF-8")'); 29 $writer = PHPExcel_IOFactory::createWriter($sheet, "Excel5"); 30 $writer->save('php://output'); //出力開始 31}

試したこと

色々考えて出来たことは、該当のソースコードの内容に変えてしまってるので出せないです・・

■ 色々考えて出来たこと1

ABCDEFG
ダミー1
名前1
ダミー2
名前2
ダミー3
名前3

■ 色々考えて出来たこと2

ABCDEFG
ダミー1
名前1
ダミー2
名前2
ダミー3
名前3

以上です、ヒントだけでも何らかのアドバイスを頂ければとても助かりますので是非ともよろしくお願いします。

###修正後
papinianus様の回答により、理想通りにできましたので以下に修正いたしました。

PHP

1 if ($is_dlbutton) 2{ //DLボタンを押したら実行 3 4 $obj = PHPExcel_IOFactory::createReader('Excel5'); 5 $file = $obj->load("./excel.xls"); 6 $file->setActiveSheetIndex(0); 7 $sheet = $file->getActiveSheet(); 8 $cnt = 0; 9 10 // テンプレートの読込 11 $obj = PHPExcel_IOFactory::createReader('Excel5'); 12 $file = $obj->load("./excel.xls"); 13 $file->setActiveSheetIndex(0); 14 $sheet = $file->getActiveSheet(); 15 $cnt = 0; 16 17 while ($row = $list[$cnt]) 18 $param1 = floor($cnt/2);//2で割って小数点以下を切り捨てる 19 if($cnt % 2 == 0){ 20 //0*7パターン 21 $sheet->setCellValue('A' . ($param1*8+1), $row["address"]); //住所 22 $sheet->setCellValue('A' . ($param1*8+2) , $row["name"]); //名前 23 }else{ 24 //1*7パターン 25 $sheet->setCellValue('G' . ($param1*8+1), $row["address"]); //住所 26 $sheet->setCellValue('G' . ($param1*8+2) , $row["name"]); //名前 27 } 28 $cnt++; 29 } 30 31 header('Content-Type: application/force-download'); 32 header('Content-Disposition: attachment; filename= mb_convert_encoding("excel.xls", "SJIS-win", "UTF-8")'); 33 $writer = PHPExcel_IOFactory::createWriter($sheet, "Excel5"); 34 $writer->save('php://output'); //出力開始 35 } 36

ただ、非推奨とのことなのでPhpSpreadsheeでこちらの考え方をもとに作らせて頂きます。

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

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

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

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

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

kirin311

2018/06/14 00:53

回答ありがとうございます。レンタルサーバーにアップロードという形でPHPを確認しており、ローカルにはphp自体をインストールしておらず、composerも使ってないので後継について十二分に調べて導入させていただきます。
guest

回答1

0

ベストアンサー

ヒント的な回答を。

$listの各要素(要素自身も連想配列ですが)について、以下のことを考えると、行と列が計算できると思います。

  • $listのインデックス(n番目)というのを、2で割った商に丸める

(0は0、1は0、2は1、3は1、4は2、5は2、といった感じ)

  • 出力行を3行セットと見る。で、3に↑の丸めた値をかける

この2つで、住所を出すべき行数が求まる。名前はこれにプラス1をする

  • $listのインデックス(n番目)というのを、2で割った余りを考える。これを7倍すれば、列が求まる

(07 と17の2パターンになる)

投稿2018/06/14 00:51

papinianus

総合スコア12705

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

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

kirin311

2018/06/14 00:55

回答ありがとうございます。こちらをもとに考えさせていただきます。
kirin311

2018/06/14 03:14

papinianus様の考えのもと理想通りにできましたのでベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問