채택완료

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

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

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

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

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

Copy
<div id="table" class="table01">

    <table id="stickyTable">

      <colgroup>

        <col width="*%">

        <col width="10%">

        <col width="10%">

        <col width="10%">

        <col width="10%">

        <col width="10%">

        <col width="10%">

        <col width="10%">

      </colgroup>

      <thead>

        <tr>

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

          <th>면</th>

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

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

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

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

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

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

        </tr>

      </thead>


 

            <?php

                for ($i = 0; $row = sql_fetch_array($result); $i++) {

                    $it_id = $row['it_id'];

            ?>

            <tbody>

                <tr>

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

                    <td>1</td>

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

                        <td>

                            <?php

                            $banner_data = $banner_array[$it_id][$j][1];

                            if (!$banner_data[0]) {

                                echo "-";

                            } else {

                            ?>

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

                            <?php } ?>

                        </td>

                    <?php endfor; ?>

                </tr>

                <?php

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

                ?>

                <tr>

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

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

                        <td>

                            <?php

                            $banner_data = $banner_array[$it_id][$k][$j];

                            if (!$banner_data[0]) {

                                echo "-";

                            } else {

                            ?>

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

                            <?php } ?>

                        </td>

                    <?php endfor; ?>

                </tr>

                <?php } ?>

            </tbody>

            <?php } ?>

 

    </table>

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

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

Copy
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'];

    $mb_name = $row['mb_name'];

    $mb_company = $row['mb_company'];

    $od_memo = $row['od_memo'];

 

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

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

         $row_data = array(

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

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

             $rowCounter++, // 면

         );

 

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

             $banner_data = $banner_array[$it_id][$j][1];

             if (!$banner_data[0]) {

                 $row_data[] = "-";

             } else {

                 $row_data[] = $banner_data[1];

             }

         endfor;

 

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

             $j;

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

                 $banner_data = $banner_array[$it_id][$k][$j];

                 if (!$banner_data[0]) {

                     $row_data[] = "-";

                 } else {

                     $row_data[] = $banner_data[1];

                 }

             endfor;

         }

 


 

        $data[] = $row_data;


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

답변 1개 / 댓글 2개

채택된 답변
+20 포인트
2024-01-03 (수) 16:34:09

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

Copy
<?php
// PHPExcel 라이브러리 로드
require_once 'PHPExcel/PHPExcel.php';

// 엑셀 객체 생성
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();

// 테이블 데이터 가져오기
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'];

    // 면 열의 셀을 합병하기 위해 해당 행을 여러 번 추가
    for ($i = 0; $i < $wr_4; $i++) {
        $row_data = array(
            ($i === 0) ? $wr_1 : '',
            ($i === 0) ? $wr_subject : '',
            $i + 1, // 면
        );

        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] : "-";
        }

        // 데이터를 엑셀 시트에 추가
        $sheet->fromArray([$row_data], null, 'A');
    }
}

// 엑셀 파일로 저장
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('output.xlsx');
?>

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

답변에 대한 댓글 2개

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

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