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

엑셀 스타일 부분 질문입니다. 채택완료

호다 1년 전 조회 2,872

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

지금 엑셀 파일 다운로드 기능을 해서 데이터를 표시하는건 성공을 했는데 a1열 부터 데이터를 출력하다보니 a1:a2 를 병합해서 데이터가 출력이 되는 부분과 헤더가 겹쳐서 데이터 제일 처음 부분이 헤더에 가려서 보이지 않습니다. 데이터 부분을 a5 부터 가져오게 하려면 어떻게 해야 하나요?

그리고 전체 중앙 정렬을 하고 싶고 테두리를 추가하고 싶은데 이 부분도 어떻게 해야 하나요?

</p>

<p><?php</p>

<p>include_once('./_common.php');</p>

<p>include_once(G5_LIB_PATH.'/PHPExcel.php');</p>

<p> </p>

<p>$year = isset($_POST['year']) ? $_POST['year'] : '';</p>

<p>$start_month = isset($_POST['start_month']) ? $_POST['start_month'] : '';</p>

<p>$end_month = isset($_POST['end_month']) ? $_POST['end_month'] : '';</p>

<p>$keyword = isset($_POST['keyword']) ? $_POST['keyword'] : '';</p>

<p> </p>

<p>$start_date = $year . '-' . $start_month . '-01';</p>

<p>$end_date = $year . '-' . $end_month . '-31';</p>

<p> </p>

<p>$keyword_condition = !empty($keyword) ? " AND (c.mb_name = '$keyword' OR c.mb_company = '$keyword')" : '';</p>

<p> </p>

<p>$order_name = ($order_name)? $order_name:'ct_id';</p>

<p>$order_sort = ($order_sort)? $order_sort:'asc';</p>

<p> </p>

<p>$sql = "SELECT c.mb_name,</p>

<p>              c.mb_company,</p>

<p>              c.mb_hp,</p>

<p>              c.mb_tel,</p>

<p>              SUM(b.wr_8) AS total_wr_8,</p>

<p>              SUM(b.wr_9) AS total_wr_9,</p>

<p>              SUM(b.wr_8 + b.wr_9) AS total_sum,</p>

<p>              COUNT(*) AS total_cnt              </p>

<p>        FROM {$g5['g5_shop_cart_table']} AS a</p>

<p>        LEFT JOIN g5_write_menu02_1 AS b ON a.it_id = b.it_id</p>

<p>        LEFT JOIN {$g5['member_table']} AS c ON a.mb_id = c.mb_id</p>

<p>        WHERE a.mb_id != 'admin'</p>

<p>        AND a.ct_status = '입금'</p>

<p>        AND a.ct_time BETWEEN '$start_date 00:00:00' AND '$end_date 23:59:59'</p>

<p>        $keyword_condition</p>

<p>        GROUP BY a.mb_id</p>

<p>        ORDER BY $order_name $order_sort";</p>

<p> </p>

<p>$result = sql_query($sql);</p>

<p> </p>

<p>if (!function_exists('column_char')) {</p>

<p>    function column_char($i)</p>

<p>    {</p>

<p>        return chr(65 + $i);</p>

<p>    }</p>

<p>}</p>

<p> </p>

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

<p>    array('월별-신청자별 통계'),</p>

<p>    array($year . "년" . $start_month . "월~" . $end_month . "월"),</p>

<p>    array('연번', '신청자', '신청건수', '허가수수료', '도로점용료', '소계', '비고')</p>

<p>);</p>

<p> </p>

<p>$widths = array(5, 30, 20, 20, 20, 20, 40);</p>

<p>$last_char = column_char(count($headers[2]) - 1);</p>

<p> </p>

<p>$data = array_merge($headers, array());</p>

<p> </p>

<p>$rowCounter = 1;</p>

<p> </p>

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

<p> </p>

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

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

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

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

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

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

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

<p> </p>

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

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

<p>        (!empty($mb_name) && !empty($mb_company)) ? $mb_name . " / " . $mb_company : $mb_name . $mb_company,  // 신청자</p>

<p>        (!empty($total_cnt)) ? $total_cnt . "건" : $total_cnt,  // 신청건수</p>

<p>        number_format($total_wr_8), // 허가수수료</p>

<p>        number_format($total_wr_9), // 도로점용료</p>

<p>        number_format($total_wr_8 + $total_wr_9), // 소계</p>

<p>        (!empty($mb_hp) && !empty($mb_tel)) ? $mb_hp . " / " . $mb_tel : $mb_hp . $mb_tel  // 비고</p>

<p>    );</p>

<p> </p>

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

<p> </p>

<p>    // 각 항목을 누적하여 총합 계산</p>

<p>    $grand_total_wr_8 += $total_wr_8;</p>

<p>    $grand_total_wr_9 += $total_wr_9;</p>

<p>    $grand_total += ($total_wr_8 + $total_wr_9);</p>

<p>    $grand_total_cnt += $total_cnt;</p>

<p>}</p>

<p> </p>

<p>$excel = new PHPExcel();</p>

<p>$last_row = count($data);</p>

<p>$last_col = count($data[0]) - 1; // 마지막 열의 인덱스</p>

<p>$last_col_char = column_char($last_col);</p>

<p> </p>

<p>$excel->setActiveSheetIndex(0)->getStyle("A:$last_col_char")->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setWrapText(true);</p>

<p>foreach ($widths as $i => $w) $excel->setActiveSheetIndex(0)->getColumnDimension(column_char($i))->setWidth($w);</p>

<p>$excel->getActiveSheet()->fromArray($data, NULL, 'A1');</p>

<p> </p>

<p>// A1에서 G2 까지 병합</p>

<p>// 볼드체와 중앙 정렬 적용</p>

<p>$excel->getActiveSheet()->mergeCells("A1:G2");</p>

<p>$excel->getActiveSheet()->getStyle('A1:G2')->getFont()->setBold(true)->setSize(14);</p>

<p>$excel->getActiveSheet()->getStyle('A1:G2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);</p>

<p>$excel->getActiveSheet()->setCellValue('A1', '월별-신청자별 통계');</p>

<p> </p>

<p>// A3 에서 G3 까지 병합</p>

<p>// 볼드체와 중앙 정렬 적용</p>

<p>$excel->getActiveSheet()->mergeCells("A3:G3");</p>

<p>$excel->getActiveSheet()->getStyle('A3:G3')->getFont()->setBold(true);</p>

<p>$excel->getActiveSheet()->getStyle('A3:G3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);</p>

<p>$excel->getActiveSheet()->setCellValue('A3', "$year 년 $start_month 월 ~ $end_month 월");</p>

<p> </p>

<p>// A4에서 G4까지 회색으로 배경색</p>

<p>$excel->getActiveSheet()->getStyle("A4:G4")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('d3d3d3');</p>

<p>$excel->getActiveSheet()->setCellValue('A4', '연번');</p>

<p>$excel->getActiveSheet()->setCellValue('B4', '신청자');</p>

<p>$excel->getActiveSheet()->setCellValue('C4', '신청건수');</p>

<p>$excel->getActiveSheet()->setCellValue('D4', '허가수수료');</p>

<p>$excel->getActiveSheet()->setCellValue('E4', '도로점용료');</p>

<p>$excel->getActiveSheet()->setCellValue('F4', '소계');</p>

<p>$excel->getActiveSheet()->setCellValue('G4', '비고');</p>

<p> </p>

<p>// 마지막 행에 합계 및 값 추가 (콤마 포함)</p>

<p>$excel->getActiveSheet()->setCellValueByColumnAndRow($last_col + 1, $last_row + 1, '합계');</p>

<p>$excel->getActiveSheet()->setCellValueByColumnAndRow($last_col + 2, $last_row + 1, number_format($grand_total_cnt) . "건");</p>

<p>$excel->getActiveSheet()->setCellValueByColumnAndRow($last_col + 3, $last_row + 1, number_format($grand_total_wr_8));</p>

<p>$excel->getActiveSheet()->setCellValueByColumnAndRow($last_col + 4, $last_row + 1, number_format($grand_total_wr_9));</p>

<p>$excel->getActiveSheet()->setCellValueByColumnAndRow($last_col + 5, $last_row + 1, number_format($grand_total));</p>

<p> </p>

<p>header("Content-Type: application/octet-stream");</p>

<p>// header("Content-Type: application/vnd.ms-excel");</p>

<p>// header("Content-Disposition: attachment; filename=\"월별 접수목록-" . date("ymd", time()) . ".xls\"");</p>

<p> </p>

<p>// 엑셀 파일 이름 설정</p>

<p>$formatted_month = str_pad($month, 2, '0', STR_PAD_LEFT);</p>

<p>$formatted_day = str_pad(date('d'), 2, '0', STR_PAD_LEFT);</p>

<p>$filename = "월별통계관리-신청자별(" . date("ym", time()) . $formatted_month . $formatted_day . ").xls";</p>

<p> </p>

<p>header("Content-Disposition: attachment; filename=\"$filename\"");</p>

<p> </p>

<p>header("Cache-Control: max-age=0");</p>

<p> </p>

<p>$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');</p>

<p>$writer->save('php://output');</p>

<p>?></p>

<p> </p>

<p>

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

답변 2개

채택된 답변
+20 포인트

제가 테스트 해보려한데 엑셀은 어떤거 쓰시나요?

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

답변에 대한 댓글 3개

호다
1년 전
엑셀 api 말씀하시는 건가요? 코드에 적힌대로 phpExcel 쓰는데 .. 무슨 말씀인지 이해를 못 했는데 다시 정확하게 말씀해주실 수 있으신가요?
리오닥터
1년 전
아! 제가 자료를 갖고 있지 않다보니까 테스트를 해야지 뭔가 좀 알수있는데 헤더가 겹친다는 부분을 캡쳐해서 보여줄수있나요?
호다
1년 전
답변에 이미지 추가해서 달았습니다. 감사합니다.

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

호다
1년 전



아래와 같이 연번이 1에서 시작을 해야 하는데 헤더와 데이터 시작 부분이 겹쳐서 2번 부터 나옵니다.

 

이런 식으로 a1 a2 부분을 병합해서 그런거 같습니다.

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

답변에 대한 댓글 2개

리오닥터
1년 전
그러면 신청자 와 건수, 수수료 등 수치는 맞나요?
호다
1년 전
네 데이터는 제가 db 에서 돌려봤고 제대로 출력 됩니다.

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

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

로그인