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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
도와주세요! 도저히 모르겠습니다 .. ㅠㅠ

QA

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

본문

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

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

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

 

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

 


<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문을 만들어서 한 테이블로 합쳤습니다. 

 

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

 


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

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


<?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 은 원하는 파일로 수정 하시면 됩니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 59,960
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT