2013-10-16 12 views
17

Attualmente sto cercando di impostare tutti i bordi per il mio foglio di lavoro, anche la formattazione come la dimensione automatica.PHPExcel imposta il bordo e il formato per tutti i fogli nel foglio di calcolo

Il mio codice sotto funziona, per il foglio 1. Tutti gli altri fogli all'interno del foglio di calcolo sono completamente intatti. Ho cercato di farlo funzionare con tutti gli altri fogli all'interno di questo foglio di calcolo, ma senza fortuna.

Qualche idea su come posso impostare la formattazione globale in modo che tutti i fogli abbiano bordi e dimensioni automatiche? Il layout di tutti i fogli in questo foglio di calcolo sono tutti uguali. Sto esportando nel file XLSX.

Cheers,

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


/** Borders for all data */ 
    $objPHPExcel->getActiveSheet()->getStyle(
    'A2:' . 
    $objPHPExcel->getActiveSheet()->getHighestColumn() . 
    $objPHPExcel->getActiveSheet()->getHighestRow() 
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 



/** Borders for heading */ 
    $objPHPExcel->getActiveSheet()->getStyle(
    'A1:O1' 
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); 

DOMANDA EXTRA: ho attualmente impostato intestazioni. I titoli appaiono sul foglio 1, ma non appaiono in nessun altro foglio .. è possibile mostrare i titoli di tutti i fogli? Le intestazioni sono impostate nella riga 1. I risultati provengono dalla riga 2 in basso.

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Asset_id'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Asset_name'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Asset_type'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Asset_make'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Asset_model'); 

risposta

37

È possibile impostare uno stile predefinito per l'intera cartella di lavoro (tutti i fogli):

$objPHPExcel->getDefaultStyle() 
    ->getBorders() 
    ->getTop() 
     ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getDefaultStyle() 
    ->getBorders() 
    ->getBottom() 
     ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getDefaultStyle() 
    ->getBorders() 
    ->getLeft() 
     ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getDefaultStyle() 
    ->getBorders() 
    ->getRight() 
     ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 

o

$styleArray = array(
     'borders' => array(
      'allborders' => array(
       'style' => PHPExcel_Style_Border::BORDER_THIN 
     ) 
    ) 
); 
$objPHPExcel->getDefaultStyle()->applyFromArray($styleArray); 

e questo può essere utilizzato per tutte le proprietà di stile, non solo i confini .

Tuttavia, l'autosizing della colonna è structural anziché stylistic e deve essere impostato singolarmente per ciascuna colonna di ciascun foglio di lavoro.

EDIT

nota che lo stile predefinito di lavoro si applica solo a Excel5 Writer

+0

Ho ricevuto un errore per l'opzione 1: Errore irreversibile: eccezione non rilevata 'Eccezione' con messaggio 'Può ottenere solo uno pseudo-bordo per supervisore'. in C: \ wamp \ www \ site \ Excel \ Classes \ PHPExcel \ Style \ Borders.php sulla riga 384 (!) Eccezione: è possibile ottenere solo il pseudo-bordo per supervisore. in C: \ wamp \ www \ site \ Excel \ Classes \ PHPExcel \ Style \ Borders.php sulla linea 384 – Tuzki

+0

Il mio male, devi impostare i singoli bordi, o usare il metodo applyFromArray() per impostare allborders –

+0

Ho deciso per usare Excel5 e ora funziona: opzione 1, TUTTAVIA c'è un modo per limitare la quantità di bordi tracciati come dal mio codice sopra, da A2? – Tuzki

1
for ($s=65; $s<=90; $s++) { 
    //echo chr($s); 
    $objPHPExcel->getActiveSheet()->getColumnDimension(chr($s))->setAutoSize(true); 
} 
+0

offset lettera maiuscola ascii. – TARKUS

0

Per rispondere alla tua extra question:

È possibile impostare quali righe devono essere ripetute in ogni pagina utilizzando:

$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 5);

Ora, le righe 1, 2, 3, 4 e 5 verranno ripetute.

Problemi correlati