2013-07-22 4 views
12

PHPExcel Class을 사용하여 스프레드 시트를 만듭니다. 데이터 열이 여러 개 있습니다. 각 열의 가장 긴 데이터 값의 크기를 사용하려면 autosize 메서드를 사용하고 있습니다.PHPExcel을 사용할 때 이미지 크기가 자동으로 늘어나는 이유는 무엇입니까?

require_once '../../Classes/PHPExcel.php'; 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 

// Adding values for Header Row 
$objPHPExcel->getActiveSheet() 
      ->setCellValue('A3', '#') 
      ->setCellValue('B3', 'Name') 
      ->setCellValue('C3', 'Email') 
      ->setCellValue('D3', 'Phone') 
      ->setCellValue('E3', 'Address') 
      ->setCellValue('F3', 'Date Registered'); 

//Setting column values to the Listers Spreadsheet 
$counter = 4; 
$entries_num = 1;   
//while($listers_export_row = $listers_export_result->fetch_assoc()) { 
while($listers_export_row = $listers_export_result->fetch(PDO::FETCH_ASSOC)) { 
    //Adding Numbers to Listers Spreadsheet (Column A) 
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$counter, $entries_num); 

    //Adding Names to Listers Spreadsheet (Column B) 
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$counter, $listers_export_row['first_name'].' '.$listers_export_row['last_name']); 

    //Adding Email to Listers Spreadsheet (Column C) 
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$counter, $listers_export_row['email']); 

    //Adding Phone to Listers Spreadsheet (Column D) 
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$counter, '('.$listers_export_row['phone_prefix'].')'.$listers_export_row['phone_first'].'-'.$listers_export_row['phone_last']); 

    //Adding Address to Listers Spreadsheet (Column E) 
    $address = $listers_export_row['address']; 
     if($listers_export_row['apt'] != '') { $address .= ' '.$listers_export_row['apt']; } 
    $address .= ', '.$listers_export_row['city'].', '.$listers_export_row['state'].' '.$listers_export_row['zip_1']; 

    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$counter, $address); 

    //Adding Date Registered to Listers Spreadsheet (Column F) 
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$counter, date('m/d/y',$listers_export_row['date_created'])); 

    $counter++; 
    $entries_num++; 
} 

// Forces the spreadsheet to take the size of the longest value    
for ($col = 'A'; $col != 'G'; $col++) { //Runs through all cells between A and E and sets to autosize 
    $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true); 
} 

// Add a drawing to the worksheet 

$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setResizeProportional(false); 
$objDrawing->setName('Logo'); 
$objDrawing->setDescription('Logo'); 
$objDrawing->setPath('../images/crl_logo.png'); 
$objDrawing->setHeight(35); 
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 

// Redirect output to a client’s web browser (Excel5) 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="Accounts - '.date('m.d.y',time()).'.xls"'); 
header('Cache-Control: max-age=0'); 
// If you're serving to IE 9, then the following may be needed 
header('Cache-Control: max-age=1'); 

// If you're serving to IE over SSL, then the following may be needed 
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
header ('Pragma: public'); // HTTP/1.0 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
exit; 

이 (그것은 단지 첫 번째 열 한 넓게해야한다)로 발생되는 것입니다 : enter image description here

나는 제거한 -

편집은 여기에서 자세한 내용을 보여주는 내 전체 코드 자동 크기 조정 방법은 올바른 크기를 사용하므로 이미지 크기에 영향을줍니다.

이미지에서 자동 크기 조정을 제거하지만 데이터 열에 그대로두면 어떻게됩니까?

+1

자세한 정보를 입력하십시오. 어느 작가? 모든 작가에게 똑같은가요? 이미지 배치의 정확한 세부 사항은 무엇입니까? (이름, 설명, 경로 및 워크 시트를 표시하고 있지만 좌표, 높이, 너비, 오프셋 등에 대한 값을 표시하지 않음) 또는 기본값으로 남겨 두었습니까? –

+4

'$ objDrawing-> setResizeProportional (false);을 추가해보십시오. –

+4

답장 표시를 해주셔서 감사합니다. Excel5 작가를 사용하고 있습니다. 난 그냥 Excel2007로 그것을 테스트하고 잘 작동합니다. Excel5에서 작동하지 않는 이유를 알고 있습니까? – zeckdude

답변

1

고정 된 이미지 너비를 설정하려 했습니까?

또는 이미지의 오프셋을 설정하여 올바른 위치를 설정하십시오.

2

http://www.cmsws.com/examples/applications/phpexcel/Documentation/API/PHPExcel_Worksheet/PHPExcel_Worksheet_Drawing.html 내가 같은 문제가 있고, 나는 해결 방법을 발견했습니다

PHPExcel_Worksheet_BaseDrawing::setOffsetX() 
PHPExcel_Worksheet_BaseDrawing::setOffsetY() 

자세한 내용은 참조하십시오. 문서를 렌더링하기 직전에 수동으로 계산을 초기화하고 조정 된 너비를 읽고 수동으로 설정하십시오.

$sheet = $this->phpExcelObject->getActiveSheet(); 
$sheet->calculateColumnWidths(); 
$columnDimension = $sheet->getColumnDimension('B'); 
$columnDimension->setAutoSize(false)->setWidth($columnDimension->getWidth()); 
관련 문제