2013-07-22 13 views
12

Tworzę arkusz kalkulacyjny przy użyciu PHPExcel Class. Mam kilka kolumn danych. Używam metody autosize, aby mieć rozmiar najdłuższej wartości danych w każdej kolumnie.Podczas korzystania z PHPExcel, dlaczego autosize powoduje rozciąganie mojego obrazu?

EDIT - Oto mój pełny kod aby wyświetlić więcej szczegółów:

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; 

to co ma miejsce (powinien być tak szeroki, tylko jako pierwszej kolumnie): enter image description here

Usunąłem metoda autosize i ma poprawny rozmiar, więc wiem, że ma to wpływ na rozmiar obrazu.

Jak usunąć autosize z obrazu, ale pozostawić go w kolumnie danych?

+1

Podaj więcej szczegółów, np. który pisarz? Czy to samo dotyczy wszystkich autorów? Jakie są dokładne szczegóły umieszczenia obrazu? (wyświetlasz nazwę, opis, ścieżkę i arkusz roboczy, ale nie widać żadnych wartości dla współrzędnych, wysokości, szerokości, przesunięć itp.) lub czy są one pozostawione jako wartości domyślne? –

+4

Spróbuj dodać '$ objDrawing-> setResizeProportional (fałsz);' –

+4

Dzięki za odpowiedź Mark. Korzystam z programu piszącego Excel5. Właśnie przetestowałem to z Excel2007 i to działa dobrze. Czy masz pojęcie, dlaczego nie działałoby w Excel5? – zeckdude

Odpowiedz

2

miałem ten sam problem, i znalazłem obejście. Tuż przed renderowaniem dokumentu, ręcznie rozpocznij obliczenia, odczytaj dostosowaną szerokość kolumny i ustaw ją ręcznie.

$sheet = $this->phpExcelObject->getActiveSheet(); 
$sheet->calculateColumnWidths(); 
$columnDimension = $sheet->getColumnDimension('B'); 
$columnDimension->setAutoSize(false)->setWidth($columnDimension->getWidth()); 
Powiązane problemy