また行き詰りましたので質問失礼します。
前提・実現したいこと
・PHPでExcel操作のループで理想のセル配置。
■ 理想としては以下の通りです。
A | B | C | D | E | F | G |
---|---|---|---|---|---|---|
ダミー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
A | B | C | D | E | F | G |
---|---|---|---|---|---|---|
ダミー1 | ||||||
名前1 | ||||||
ダミー2 | ||||||
名前2 | ||||||
ダミー3 | ||||||
名前3 |
■ 色々考えて出来たこと2
A | B | C | D | E | F | G |
---|---|---|---|---|---|---|
ダミー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でこちらの考え方をもとに作らせて頂きます。
回答1件
あなたの回答
tips
プレビュー