개발 Q&A

제목 phpexcel 에서 column width 계산해서 지정하는 방법 아시는분?
글쓴이 건곤대나이 작성시각 2015/10/27 15:41:43
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 17505   RSS
phpexcel을 이용해서 확장된 게시판 데이타를 excel로 출력하는데요.

setAutoSize()를 이용해서 여러가지 시도를 해보았지만 해결책을 못찾겠더군요.

그래서 직접 column width를 계산하려고 하니 적용시에 에러가 나는군요.

혹시 아시는분 계시는지요?
 다음글 https에서 index.php 없애는 방법 (6)
 이전글 mysql insert 할때 한글 ???표기 때문에 죽... (3)

댓글

변종원(웅파) / 2015/10/27 21:21:19 / 추천 0
어떤 에러가 나는지 올려주시는게...
매뉴얼에도 나와있는 기능인데 에러를 알아야 답변을 하겠죠? ^^

autosize에 대한 질문답변은 구글에 넘쳐나구요.
건곤대나이 / 2015/10/28 01:03:57 / 추천 0
@웅파님 

헐~ 질문하기전에는 autosize 그렇게 적용해도 안되더니 웅파님 답변보고 다시 구글에서 검색된 결과중 

for($col = 'A'; $col !== 'O'; $col++) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}

이걸로 적용하니 그나마 비슷하게 나오네요. 

아~ 에러부분은 제가 이것저것 마구 적용하다보니 지금 코드를 뭘로했는지 안남아 있어요 ㅜㅜ
건곤대나이 / 2015/10/28 04:26:02 / 추천 0
휴~ 주먹구구식으로 해결했습니다 ㅋ

// 전체 열(column)에 대해서 autosize 실행
$maxColumn = PHPExcel_Cell::columnIndexFromString($objWorksheet->getHighestColumn());
for($col = 0; $col < $maxColumn; $col++) {
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
    $objWorksheet->getColumnDimensionByColumn($col)->setAutoSize(true);
}
$objWorksheet->calculateColumnWidths();

// 전체 열(column)에 대해서 autosize 실행후 맞지 않는 부분에 대해 보정
for($col = 0; $col < $maxColumn; $col++) {
    $objWorksheet->getColumnDimensionByColumn($col)->setAutoSize(false); // 수동폭 지정시 꼭 호출해야 됩니다.
    $calculatedWidth = round( $objWorksheet->getColumnDimensionByColumn($col)->getWidth(), 0 );
    //print("<p>" . $col . ":" . $calculatedWidth . "</p>");
    if( $calculatedWidth < 9 ) {
        $objWorksheet->getColumnDimensionByColumn($col)->setWidth( round(1.8*$calculatedWidth, 0) );
    }
    else if( $calculatedWidth < 12 ) {
        $objWorksheet->getColumnDimensionByColumn($col)->setWidth( round(1.6*$calculatedWidth, 0) );
    }
    else if( $calculatedWidth < 16 ) {
        $objWorksheet->getColumnDimensionByColumn($col)->setWidth( round(1.4*$calculatedWidth, 0) );
    }
}
$objWorksheet->calculateColumnWidths();
jebum / 2019/05/02 18:25:45 / 추천 0
건곤대나이 // 감사합니다 autoSize false 를 안해서 변경이 안되고 있었네요 ㅠ
작은별 / 2020/12/28 12:20:15 / 추천 0

건곤대나이 // 저도 위 내용 참조해서 비슷하게 동작 하고 있습니다. 

다만 아래 부분에서 셀에 한글이 들어 있는경우에는 width 값이 문제가 있는것 같습니다. 

영어로 되어 있는 내용은 잘 되는데 한글이 들어있으면 잘 안되네요. ^^

$objWorksheet->getColumnDimensionByColumn($col)->getWidth()