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

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

QA

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

답변 1

본문

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

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

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 85
© SIRSOFT
현재 페이지 제일 처음으로