테스트 사이트 - 개발 중인 베타 버전입니다

도와주세요! 도저히 모르겠습니다 .. ㅠㅠ 채택완료

호다 1년 전 조회 1,566

안녕하세요? 항상 도움 받고 있습니다. 감사합니다. 

테이블에 있는 데이터를 엑셀 파일 열에 배치해서 다운로드 기능을 만드는 작업 중인데 

테이블이 각각 <td> 태그를 2가지 경우를 만들어서 한 가지 테이블로 합쳐놨는데 문제는 이걸 어떻게 해야 엑셀 파일로 만들 수 있을지 모르겠습니다 ..

 

테이블 코드는 아래와 같습니다.

 

</p>

<p><div id="table" class="table01"></p>

<p>    <table id="stickyTable"></p>

<p>      <colgroup></p>

<p>        <col width="*%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>        <col width="10%"></p>

<p>      </colgroup></p>

<p>      <thead></p>

<p>        <tr></p>

<p>          <th>[장소번호]게시대명</th></p>

<p>          <th>면</th></p>

<p>          <th>1기<!-- 
(<?php echo $month; ?>/1 ~ <?php echo $month; ?>/5) --></th></p>

<p>          <th>2기<!-- 
(<?php echo $month; ?>/6 ~ <?php echo $month; ?>/10) --></th></p>

<p>          <th>3기<!-- 
(<?php echo $month; ?>/11 ~ <?php echo $month; ?>/15) --></th></p>

<p>          <th>4기<!-- 
(<?php echo $month; ?>/16 ~ <?php echo $month; ?>/20) --></th></p>

<p>          <th>5기<!-- 
(<?php echo $month; ?>/21 ~ <?php echo $month; ?>/25) --></th></p>

<p>          <th>6기<!-- 
(<?php echo $month; ?>/26 ~ <?php echo $month; ?>/31) --></th></p>

<p>        </tr></p>

<p>      </thead></p>

<p>

 </p>

<p>            <?php</p>

<p>                for ($i = 0; $row = sql_fetch_array($result); $i++) {</p>

<p>                    $it_id = $row['it_id'];</p>

<p>            ?></p>

<p>            <tbody></p>

<p>                <tr></p>

<p>                    <td rowspan="<?php echo $row['wr_4']?>">[<?php echo $row['wr_1']?>] <?php echo $row['wr_subject']?></td></p>

<p>                    <td>1</td></p>

<p>                    <?php for ($j = 1; $j <= 6; $j++) : ?></p>

<p>                        <td></p>

<p>                            <?php</p>

<p>                            $banner_data = $banner_array[$it_id][$j][1];</p>

<p>                            if (!$banner_data[0]) {</p>

<p>                                echo "-";</p>

<p>                            } else {</p>

<p>                            ?></p>

<p>                            <span class="fixed"><?php echo $banner_data[0]; ?></span><?php echo $banner_data[1]; ?></p>

<p>                            <?php } ?></p>

<p>                        </td></p>

<p>                    <?php endfor; ?></p>

<p>                </tr></p>

<p>                <?php</p>

<p>                for ($j = 2; $j <= $row['wr_4']; $j++) {</p>

<p>                ?></p>

<p>                <tr></p>

<p>                    <td><?php echo $j; ?></td></p>

<p>                    <?php for ($k = 1; $k <= 6; $k++) : ?></p>

<p>                        <td></p>

<p>                            <?php</p>

<p>                            $banner_data = $banner_array[$it_id][$k][$j];</p>

<p>                            if (!$banner_data[0]) {</p>

<p>                                echo "-";</p>

<p>                            } else {</p>

<p>                            ?></p>

<p>                            <span class="fixed"><?php echo $banner_data[0]; ?></span><?php echo $banner_data[1]; ?></p>

<p>                            <?php } ?></p>

<p>                        </td></p>

<p>                    <?php endfor; ?></p>

<p>                </tr></p>

<p>                <?php } ?></p>

<p>            </tbody></p>

<p>            <?php } ?></p>

<p> </p>

<p>    </table></p>

<p>

 

위와 같이 <td> 가 '1' 인 테이블과 <td> 가 $j 인 테이블을 각각 만들어서 2가지 for문을 만들어서 한 테이블로 합쳤습니다. 

 

저는 아래와 같이 코드를 짰습니다.

 

</p>

<p>while ($row = sql_fetch_array($result)) {</p>

<p>    $it_id = $row['it_id'];</p>

<p>    $wr_1 = $row['wr_1'];</p>

<p>    $wr_subject = $row['wr_subject'];</p>

<p>    $wr_4 = $row['wr_4'];</p>

<p>    $mb_name = $row['mb_name'];</p>

<p>    $mb_company = $row['mb_company'];</p>

<p>    $od_memo = $row['od_memo'];</p>

<p> </p>

<p>    // 면 열의 셀을 합병하기 위해 해당 행을 여러 번 추가</p>

<p>     for ($i = 0; $i < $wr_4; $i++) {</p>

<p>         $row_data = array(</p>

<p>             ($i === 0) ? $wr_1 : '', // 장소번호 (첫 번째 행에서만 표시)</p>

<p>             ($i === 0) ? $wr_subject : '', // 게시대명 (첫 번째 행에서만 표시)</p>

<p>             $rowCounter++, // 면</p>

<p>         );</p>

<p> </p>

<p>         for ($j = 1; $j <= 6; $j++) :</p>

<p>             $banner_data = $banner_array[$it_id][$j][1];</p>

<p>             if (!$banner_data[0]) {</p>

<p>                 $row_data[] = "-";</p>

<p>             } else {</p>

<p>                 $row_data[] = $banner_data[1];</p>

<p>             }</p>

<p>         endfor;</p>

<p> </p>

<p>         for ($j = 2; $j <= $wr_4; $j++) {</p>

<p>             $j;</p>

<p>             for ($k = 1; $k <= 6; $k++) :</p>

<p>                 $banner_data = $banner_array[$it_id][$k][$j];</p>

<p>                 if (!$banner_data[0]) {</p>

<p>                     $row_data[] = "-";</p>

<p>                 } else {</p>

<p>                     $row_data[] = $banner_data[1];</p>

<p>                 }</p>

<p>             endfor;</p>

<p>         }</p>

<p> </p>

<p>

 </p>

<p>        $data[] = $row_data;</p>

<p>


이렇게 하니까 당연히 for문을 2번 도니까 첫 번째 데이터는 엑셀 열에 제대로 들어가는데 2번째는 엑셀 열 바깥으로 생성이 되더라고요. 어떻게 해야 위의 경우처럼 테이블(표) 를 두 번 만들어서 합칠 수 있을까요?

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트

다음과 같은 방법도 있으니 참고해 보세요

</p>

<p><?php

// PHPExcel 라이브러리 로드

require_once 'PHPExcel/PHPExcel.php';</p>

<p>// 엑셀 객체 생성

$objPHPExcel = new PHPExcel();

$objPHPExcel->setActiveSheetIndex(0);

$sheet = $objPHPExcel->getActiveSheet();</p>

<p>// 테이블 데이터 가져오기

while ($row = sql_fetch_array($result)) {

    $it_id = $row['it_id'];

    $wr_1 = $row['wr_1'];

    $wr_subject = $row['wr_subject'];

    $wr_4 = $row['wr_4'];</p>

<p>    // 면 열의 셀을 합병하기 위해 해당 행을 여러 번 추가

    for ($i = 0; $i < $wr_4; $i++) {

        $row_data = array(

            ($i === 0) ? $wr_1 : '',

            ($i === 0) ? $wr_subject : '',

            $i + 1, // 면

        );</p>

<p>        for ($j = 1; $j <= 6; $j++) {

            $banner_data = $banner_array[$it_id][$j][($i === 0) ? 1 : ($i + 1)];

            $row_data[] = $banner_data[0] ? $banner_data[1] : "-";

        }</p>

<p>        // 데이터를 엑셀 시트에 추가

        $sheet->fromArray([$row_data], null, 'A');

    }

}</p>

<p>// 엑셀 파일로 저장

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save('output.xlsx');

?>

output.xlsx 은 원하는 파일로 수정 하시면 됩니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

호다
1년 전
헐!!!!! 우와!!!! 감사합니다!!!! 어떻게 된거죠!!!!! 해결되었어요!!!!! 정말 정말 감사합니다. 몇 시간동안 헤맸는데!!!!! ㅠㅠㅠㅠㅠ
웹메이킹
1년 전
해결되셨다니 다행이네요..~
말로 설명 하기는 좀 어려운 부분이 있네요...^^
즐거운 코딩 되세요~

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인