도와주세요! 도저히 모르겠습니다 .. ㅠㅠ
본문
안녕하세요? 항상 도움 받고 있습니다. 감사합니다.
테이블에 있는 데이터를 엑셀 파일 열에 배치해서 다운로드 기능을 만드는 작업 중인데
테이블이 각각 <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 은 원하는 파일로 수정 하시면 됩니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.