2010-10-12 12 views
6

Nella mia applicazione è necessario esportare nel file xls in un formato predefinito.php_excel07- Come aumentare l'altezza della cella in base ai dati della cella (xls)

quindi ho appena integrato php_excel2007. Sto usando un modello con un formato predefinito.

Il problema qui sono i dati delle celle possono cambiare in modo dinamico. se i dati sono molto più grandi dell'altezza della cella, i dati stanno crollando.

Quindi è comunque necessario aumentare l'altezza della cella in base al contenuto della cella (in XLX non xlsx)?

risposta

1
<?php 
error_reporting(E_ALL); 
require_once ROOT.'/PHPExcel.php'; 

function down($details) 
{ 
    // Create new PHPExcel object 
    $objPHPExcel = new PHPExcel(); 
    $objReader = PHPExcel_IOFactory::createReader('Excel5'); 
    $objPHPExcel = $objReader->load(ROOT."/templates/project_report1.xls"); 

    // Set properties 
    $p_i=5;$alpa="B";$row_no=5;$mil="";$d_cel="B"; 
    $objPHPExcel->setActiveSheetIndex() 
       ->setCellValue('K1', $details['report_details']['cur_time']); 
    $objPHPExcel->setActiveSheetIndex() 
       ->setCellValue('C2', 'REPORT START DATE:'.$details['report_details']['start_date']) 
       ->setCellValue('H2', $details['report_details']['details']) 
       ->setCellValue('C3', 'SHOWING:'.$details['report_details']['showing']); 
    foreach($details as $p_name=>$date){ 
     //thisis to display date at the top 
     foreach($date as $p1=>$m_name1){ 
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($d_cel.'4', $p1);$d_cel++;//to display date in the top 
     } 
     break; 
    } 

    foreach($details as $p_name=>$date){ 
     if($p_name=="report_details")break; 
     $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$p_i, $p_name); 
     $objPHPExcel->getActiveSheet(0)->duplicateStyle($objPHPExcel->getActiveSheet()->getStyle('A5'), 'A'.$p_i); 
     $objPHPExcel->setActiveSheetIndex(0)->getStyle('A'.$p_i)->getAlignment()->setWrapText(true);  

     foreach($date as $p=>$m_name){ 
      $mil=$tic=$st=" "; 

      foreach($m_name as $name=>$val){ 

      if($name=="milestone") 
      foreach($val as $in_det=>$det){ 
       if($det && isset($det['start_date'])) 
        $mil.=$det['name']."\n".$det['start_date']."\n"; 
       else 
        $mil.=$det['name']; 
      } 
      if($name=="ticket") 
       foreach($val as $in_det=>$det){        
        if($det) 
         $tic.=$det['name']." ".$det['start_date']."\n"; 
       } 
      if($name=="task") 
       foreach($val as $in_det=>$det){ 
        if($det) 
         $st.=$det['name']." ".$det['start_date']."\n"; 
       } 
      } 
      $summary=$mil.$tic.$st; 
      $objPHPExcel->getActiveSheet(0)->duplicateStyle($objPHPExcel->getActiveSheet()->getStyle('B5'), $alpa.$p_i); 
      $objPHPExcel->getActiveSheet(0)->getRowDimension($p_i)->setRowHeight(); 
      $objPHPExcel->getActiveSheet(0)->getStyle('A'.$p_i.':'.'M'.$p_i)->getAlignment()->setWrapText(true); 
      $objPHPExcel->setActiveSheetIndex(0)->getStyle($alpa.$p_i)->getFont()->setSize(5); 
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($alpa.$p_i, $summary); 
      $alpa++; 
     } 
     $alpa="B"; 
     $p_i++; 
    } 
    $objPHPExcel->setActiveSheetIndex(0); 
    $objPHPExcel->getActiveSheet()->setTitle('Report'); 
    // Set active sheet index to the first sheet, so Excel opens this as the first sheet 

    // Redirect output to a client’s web browser (Excel2007) 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="project_report.xls"'); 
    header('Cache-Control: max-age=0'); 

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

Sarebbe utile evidenziare solo il codice in cui si fa crescere l'altezza della cella in base ai dati della cella ... – Yuri

5

L'unico modo è come descritto nel this answer alla tua domanda precedente su questo argomento: impostare l'altezza della riga per autofit, e l'allineamento delle cellule per avvolgere. Questo dovrebbe funzionare allo stesso modo, sia che si utilizzi Excel5 Writer o Excel2007 Writer.

$objPHPExcel = new PHPExcel(); 

// Set some long string values in some cells 
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("This is a large block of text,\ncomprising several lines,\nthat will be set to autofit."); 
$objPHPExcel->getActiveSheet()->getCell('A2')->setValue("This is a large block of text that will NOT be set to autofit."); 
$objPHPExcel->getActiveSheet()->getCell('B1')->setValue("This is another large block of text without any line breaks, that will be set to autofit."); 
$objPHPExcel->getActiveSheet()->getCell('A3')->setValue("This is another large block of text,\ncomprising several lines,\nthat will be set to autofit."); 
$objPHPExcel->getActiveSheet()->getCell('A4')->setValue("This is another large block of text without any line breaks, that will be set to autofit but not wrap."); 
// Fix the column width to a reasonable size 
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30); 
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30); 
// Set text wrap for cells A1 and B1. This forces the text to wrap, but doesn't adjust the height of the row 
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setWrapText(true); 
// Set rows 1, 3 and 4 to autofit the height to the size of text 
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1); 
$objPHPExcel->getActiveSheet()->getRowDimension(3)->setRowHeight(-1); 
$objPHPExcel->getActiveSheet()->getRowDimension(4)->setRowHeight(-1); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('testAutoHeight.xls'); 

EDIT

commenti aggiunti al codice di esempio per spiegare ciò che ogni metodo chiamato realmente fa

+0

Ho provato questo, ma se apro il file in LibreOffice Calc, la riga hei ght non è impostato. Qualche idea di cosa potrebbe essere sbagliato? Ecco un link a [mio codice] (https://gist.github.com/mikehaertl/280455b503dc8c4ccddd) –

+0

Spiacente, ho provato questo ma non ha alcun effetto. L'altezza della riga non si adatta all'altezza del contenuto del testo :( –

+0

@AndreiDiaconescu - il codice che ho citato funziona, se pensi diversamente, poi fornisci le specifiche ..... "non funziona" non è accettabile come un rapporto di errore –

1

setRowHeight a -1 in altezza Auto Make (sulla base di dati di cella)

// auto-size on row 1 

$objWorksheet->getRowDimension('1')->setRowHeight(-1); 
+0

Funziona alla grande ed è facile da implementare. Grazie. – krx

+0

Siamo spiacenti, ho provato questo ma non ha alcun effetto. L'altezza della riga non si adatta all'altezza del contenuto del testo :( –

+0

@AndreiDiaconescu - il codice che ho citato funziona, se pensi diversamente, quindi fornisci informazioni specifiche ... "non funziona" non è accettabile come rapporto di errore –

Problemi correlati