2013-04-30 4 views
5

Ho il mio lettore Excel per funzionare ma c'è un problema fastidioso in cui posso solo trovare informazioni su come applicare un bordo a un intervallo di celle, che è inutile per la mia applicazione.Come applicare i bordi a tutte le celle, non un intervallo !

Gli utenti caricano fogli Excel che possono essere visualizzati in seguito. Quindi il metodo dell'intervallo di celle non funzionerà poiché l'intervallo cambia.

Non esiste un parametro predefinito per impostare tutti gli stili di cella ecc.?

Ecco quello che ho:

require_once ROOT . '/libs/PHPExcel/IOFactory.php'; 
     $excel = PHPExcel_IOFactory::load('../public_html/uploads/' . $filename); 
     PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT); 
     $writer = PHPExcel_IOFactory::createWriter($excel, 'HTML'); 

     $writer->setUseInlineCSS(true); 
     $styleArray = array(
      'borders' => array(
       'allborders' => array(
        'style' => PHPExcel_Style_Border::BORDER_THIN 
      ) 
     ) 
    ); 

     $excel->getActiveSheet()->getStyle('A1:B1')->applyFromArray($styleArray); 
     unset($styleArray); 
     $writer->save('uploads/excel-sheet.html'); 
     header('Location: ' . WROOT . 'uploads/excel-sheet.html'); 
+0

Non lavoro con PHP ma logicamente pensando perché tutte le celle ? Faresti molto pesante la tua cartella di lavoro. Php ha qualche metodo per trovare l'ultima cella nell'intervallo di dati? Se sì, allora puoi definire il tuo intervallo e poi applicare il bordo a quell'intervallo? –

risposta

24

Impostare uno stile predefinito che si applica a tutta la cartella di lavoro

$excel->getDefaultStyle()->applyFromArray($styleArray); 

Anche se si dovrebbe essere in grado di leggere il campo per qualsiasi foglio di lavoro che è stato caricato, e quindi impostare lo stile per tale intervallo

$excel->getActiveSheet()->getStyle(
    'A1:' . 
    $excel->getActiveSheet()->getHighestColumn() . 
    $excel->getActiveSheet()->getHighestRow() 
)->applyFromArray($styleArray); 
+0

Grazie, ha funzionato per la maggior parte delle celle ma ce ne sono alcune che non hanno un bordo applicato. Qualche idea sul perché questo? – imperium2335

+0

Suggerisce che quelle celle siano formattate in modo esplicito su border = none. Gli stili di singole celle sostituiscono gli stili di intervallo, che a loro volta sovrascrivono gli stili predefiniti –

+0

+ 1 Quindi avevo ragione :) C'è un metodo per trovare l'ultima cella che ha dati ... –

Problemi correlati