엑셀 스타일 부분 질문입니다. 채택완료
호다
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년 전
답변에 이미지 추가해서 달았습니다. 감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인

