Salvați PHP în fișierul xls. PHP – încărcarea datelor în Excel dintr-o bază de date MySQL

01.07.2020 Lucrul cu imagini

.
Metoda prezentată în acea notă este într-adevăr foarte simplă, dar poate să nu fie întotdeauna convenabilă.
Există multe alte modalități de a transfera date tabulare din PHP în Excel, o voi descrie pe cea care mi s-a părut cea mai simplă și mai funcțională. De remarcat mai ales că nu vorbesc despre generarea unui fișier xls, ci doar sugerez ca utilizatorul să deschidă datele primite folosind Excel, astfel încât utilizatorii care nu au experiență în programare să nu observe falsificarea.

Deci, primul lucru pe care trebuie să-l faceți este să plasați pe pagina noastră un link către un script care generează următoarele antete:
antet("Pragma: public");
antet ("Expiră: 0");
header("Controlul cache: trebuie revalidat, post-verificare=0, pre-verificare=0");
header("Control-cache: privat", false);
header("Tip de conținut: aplicație/x-msexcel");
header("Conținut-Dispoziție: atașament; nume fișier=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("Conținut-Transfer-Codare: binar");
header("Lungimea conținutului: " . $object->getFileSize());

$object este un obiect sferic în vid, pe care fiecare cititor îl poate implementa după cum vrea. Scopul getter-urilor getFileName() și getFileSize() este clar din numele lor. Merită să evidențiezi o nuanță neevidentă aici (mulțumesc că mi-ai amintit despre asta) - getFileName() poate returna, desigur, orice nume de fișier, dar dacă vrei ca browserul să ofere deschiderea conținutului primit în Excel, atunci extensia fișierului ar trebui să fie xls.
Nu am spus încă nimic nou, toate acestea au fost inventate înaintea mea, totuși, ca ceea ce va fi descris mai jos.
După cum s-a menționat pe bună dreptate în comentariile articolului, Excel funcționează mult mai rapid cu XML. Dar cel mai important avantaj, poate, nu este viteza, ci capabilități mult mai largi. Nu voi intra mai adânc în buruieni, ci voi oferi doar un exemplu simplu și un link către o descriere detaliată a tuturor etichetelor.

Deci, după ce anteturile sunt generate, trebuie să dăm datele reale utilizatorului. De obicei, împachetez generarea tabelelor într-o metodă separată:
echo $obiect->getContent();

Și generez tabelul folosind Smarty:

(foreach from=$data.header item=caption) ($caption.columnName)(/foreach)(foreach from=$data.content item=row) (foreach from=$row item=col) ($col)(/foreach)(/foreach)

După cum puteți vedea din cod, matricea $data este transmisă șablonului, care conține două matrice - linia de titlu a tabelului și datele în sine.
Este demn de remarcat faptul că utilizarea unui motor de șablon numai pentru a genera XML este oarecum costisitoare, iar XML poate fi obținut în multe alte moduri. În cazul meu particular, generarea XML este doar un mic bonus într-un proiect mare în care un motor de șablon este indispensabil.

Ca exemplu, am dat un tabel simplu, dacă doriți, puteți manipula un număr mult mai mare de atribute; Acest lucru este deosebit de frumos având în vedere că nu sunt necesare biblioteci terțe pentru implementare.
Metoda descrisă lucrează la un singur proiect de câțiva ani și niciun utilizator nu a bănuit încă că datele pe care le deschide nu sunt un document MS Office.

Puteți citi mai multe despre structura XML utilizată în MS Excel în

Pentru mulți, atunci când lucrează cu PHP împreună cu MySQL Există o astfel de nevoie precum exportul de date din baza de date în format xls, astfel încât persoanele care au nevoie de aceste date le prelucrează în Excel sau pur și simplu este convenabil pentru utilizatori să vizualizeze aceste date. Recent am avut o astfel de nevoie și astăzi vă voi spune cum poate fi implementată această chestiune.

Voi spune imediat că această metodă este destul de simplă, dar datele sunt încărcate normal.

Pentru început, voi da un exemplu de fișier xls final în Excel, încărcarea va arăta cam așa:

Cu alte cuvinte, nu vor fi încărcate imagini sau stiluri, ci doar antetele de coloană și datele în sine.

Înainte să ajung la această opțiune specială de încărcare, am încercat să încărc în format csv, dar a ieșit puțin stângaci, apoi am încercat să desenez un tabel și să-l salvez cu extensia xls, s-a dovedit, de asemenea, a fi un fel de prostie, metoda pe care o voi descrie acum mi s-a potrivit pe deplin, iar acum o voi împărtăși cu voi.

Pentru început, vă voi da tot codul, pe care l-am comentat cât mai mult posibil, îl puteți selecta și salva cu extensia php și încercați, doar nu uitați să specificați setările conexiunii la baza de date.

Exportați date din MySQL în Excel în PHP

Și pentru a înțelege ce date încarc, voi da un exemplu de tabel simplu în baza de date ( Am testul de nume):

Tabel de testare:

id prenume nume
1 Ivanov Ivan
2 Petrov Petru
2 Petrov2 Petru2
xlsData = pachet("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0);

) // Dacă funcția de număr RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $valoare ) //Dacă funcția text RecText($row, $col, $value)( $len = strlen($value); $this->xlsData .= (" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len->xlsData .= $value ) // Inserați o funcție numerică ($value); if ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ valoare); $this->countCol++; >countRow++ ) $this->RecText($this->countRow, $this->countCol++)( $this->; countCol = 0 ; $this->countRow++; reveni; ) // Salvați funcția fișier SaveFile($fileName)( $this->fileName = $fișierName; $this->SendFile(); ) // Trimiteți funcția fișier SendFile())( $this->EndData(); antet (" Last-Modified: " . gmdate ("D,d M YH:i:s") . " GMT" ("Cache-Control: no-store, no-cache, must-revalidate"); header ("Pragma: no-cache"); header("Tip de conținut: aplicație/x-msexcel"); ->xlsData ; ) ) ) if(isset($_GET["id"])) ( //filtrați datele $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES)))) ; $filename = "File_with_id_".$id // setează numele fișierului $excel = new ExportToExcel(); //interogare la baza de date $rez= mysql_query($sql->InsertText("Identifier"->InsertText("Last Name->InsertText"); excel->GoNewLine(); row=mysql_fetch_assoc($rez))( $excel->InsertNumber($row["id"]);$excel->InsertText($row["prenume"]); $excel->InsertText($row[„nume”]);$excel->GoNewLine(); ) $excel->SaveFile($filename);.

Pentru a verifica funcționalitatea acestui cod, ținând cont de faptul că ați configurat o conexiune la baza de date și ați creat un tabel similar, puteți trimite următoarea solicitare:

Http://site-ul_dvs./nume_fișier. php?id=2

Și ar trebui să descărcați două linii cu id egal cu 2.

Și acum oricine îi permiteți să încarce date le poate exporta cu ușurință pe computerul local prin interfața web. Această metodă este convenabilă atât pentru utilizatorii corporativi, dacă dezvoltați o aplicație pentru organizația dvs., cât și pentru utilizatorii site-ului dvs. de pe Internet. Sper că te-a ajutat această metodă. Noroc!

.
Metoda prezentată în acea notă este într-adevăr foarte simplă, dar poate să nu fie întotdeauna convenabilă.
Există multe alte modalități de a transfera date tabulare din PHP în Excel, o voi descrie pe cea care mi s-a părut cea mai simplă și mai funcțională. De remarcat mai ales că nu vorbesc despre generarea unui fișier xls, ci doar sugerez ca utilizatorul să deschidă datele primite folosind Excel, astfel încât utilizatorii care nu au experiență în programare să nu observe falsificarea.

Deci, primul lucru pe care trebuie să-l faceți este să plasați pe pagina noastră un link către un script care generează următoarele antete:
antet("Pragma: public");
antet ("Expiră: 0");
header("Controlul cache: trebuie revalidat, post-verificare=0, pre-verificare=0");
header("Control-cache: privat", false);
header("Tip de conținut: aplicație/x-msexcel");
header("Conținut-Dispoziție: atașament; nume fișier=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("Conținut-Transfer-Codare: binar");
header("Lungimea conținutului: " . $object->getFileSize());

$object este un obiect sferic în vid, pe care fiecare cititor îl poate implementa după cum vrea. Scopul getter-urilor getFileName() și getFileSize() este clar din numele lor. Merită să evidențiem o nuanță neevidentă aici (mulțumesc lui Savostin pentru că mi-a reamintit acest lucru) - getFileName() poate returna, desigur, orice nume de fișier, dar dacă doriți ca browserul să ofere deschiderea conținutului primit în Excel, atunci fișierul extensia ar trebui să fie xls.
Nu am spus încă nimic nou, toate acestea au fost inventate înaintea mea, totuși, ca ceea ce va fi descris mai jos.
După cum s-a menționat pe bună dreptate în comentariile postării despre generarea xls în PHP, Excel funcționează mult mai rapid cu XML. Dar cel mai important avantaj, poate, nu este viteza, ci capabilități mult mai largi. Nu voi intra mai adânc în buruieni, ci voi oferi doar un exemplu simplu și un link către o descriere detaliată a tuturor etichetelor.

Deci, după ce anteturile sunt generate, trebuie să dăm datele reale utilizatorului. De obicei, împachetez generarea tabelelor într-o metodă separată:
echo $obiect->getContent();

Și generez tabelul folosind Smarty:

(foreach from=$data.header item=caption) ($caption.columnName)(/foreach)(foreach from=$data.content item=row) (foreach from=$row item=col) ($col)(/foreach)(/foreach)

După cum puteți vedea din cod, matricea $data este transmisă șablonului, care conține două matrice - linia de titlu a tabelului și datele în sine.
Este demn de remarcat faptul că utilizarea unui motor de șablon numai pentru a genera XML este oarecum costisitoare, iar XML poate fi obținut în multe alte moduri. În cazul meu particular, generarea XML este doar un mic bonus într-un proiect mare în care un motor de șablon este indispensabil.

Ca exemplu, am dat un tabel simplu, dacă doriți, puteți manipula un număr mult mai mare de atribute; Acest lucru este deosebit de frumos având în vedere că nu sunt necesare biblioteci terțe pentru implementare.
Metoda descrisă lucrează la un singur proiect de câțiva ani și niciun utilizator nu a bănuit încă că datele pe care le deschide nu sunt un document MS Office.

Puteți citi mai multe despre structura XML utilizată în MS Excel în

Un obiect. Dar lucrurile stau diferit dacă trebuie să generați un raport în format Excel pe PHP. Și pentru ca această creație să funcționeze UNIX-sisteme asemănătoare. Dar, din fericire, totul nu este atât de rău. Și există suficiente biblioteci pentru asta. Am ales PHPExcel. Lucrez cu această bibliotecă de câțiva ani și sunt mulțumit. Deoarece este multiplatformă, nu există probleme de portabilitate.


PHPExcel vă permite să importați și să exportați date în Excel. Aplicați diferite stiluri de design la rapoarte. În general, totul este excelent. Există chiar și capacitatea de a lucra cu formule. Este necesar doar să se țină cont de faptul că toate lucrările (citirea și scrierea) trebuie efectuate în codificare utf-8.


Instalarea bibliotecii

Pentru a funcționa, aveți nevoie de versiunea PHP 5.2.0 sau mai mare. Sunt necesare și următoarele extensii: php_zip, php_xml și php_gd2. Puteți descărca biblioteca de aici.


Folosind biblioteca PHPExcel, puteți scrie date în următoarele formate:

  • Excel 2007;
  • Excel 97 și versiuni ulterioare;
  • PHPExcel Serialized Spreadsheet;
  • HTML;

Import de date din PHP în Excel

Să ne uităm la un exemplu de formare a unei tabele de înmulțire.


// Conectați clasa pentru a lucra cu excel require_once("PHPExcel.php"); // Conectați clasa la date de ieșire în format excel require_once("PHPExcel/Writer/Excel5.php"); // Creați un obiect din clasa PHPExcel $xls = new PHPExcel(); // Setați indexul foii active $xls->setActiveSheetIndex(0); // Obține foaia activă $sheet = $xls->getActiveSheet(); // Semnează foaia $sheet->setTitle("Tabelul de înmulțire"); // Inserați text în celula A1 $sheet->setCellValue("A1", "Tabel de înmulțire"); $sheet->getStyle("A1")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyle("A1")->getFill()->getStartColor()->setRGB("EEEEEE"); // Îmbină celule $sheet->mergeCells("A1:H1"); // Aliniați textul $sheet->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); pentru ($i = 2; $i< 10; $i++) { for ($j = 2; $j < 10; $j++) { // Выводим таблицу умножения $sheet->setCellValueByColumnAndRow($i - 2, $j, $i . "x" .$j . "=" . ($i*$j));

// Aplicați alinierea $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()-> setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

) ) // Ieșire antet HTTP ("Expiră: Luni, 1 Apr 1974 05:00:00 GMT"); header("Ultima modificare: " . gmdate ("D,d M YH:i:s") . " GMT");


header("Control-cache: fără cache, trebuie revalidat");

  • header("Pragma: fără cache"); header("Tipul conținut: aplicație/vnd.ms-excel");
  • header("Conținut-Dispoziție: atașament; nume fișier=matrix.xls"); // Afișează conținutul fișierului $objWriter = new PHPExcel_Writer_Excel5($xls);$objWriter->save("php://output");
  • Aici datele generate vor fi imediat „scuipat” în browser. Cu toate acestea, dacă trebuie să salvați fișierul și să nu îl „aruncați” imediat, atunci nu trebuie să scoateți Antete HTTP

și în loc de „php://output” ar trebui să specificați calea către fișierul dvs. Rețineți că directorul în care ar trebui să fie creat fișierul trebuie să aibă permisiuni de scriere. Acest lucru se aplică sistemelor asemănătoare UNIX.

  • Să ne uităm la alte trei instrucțiuni utile ca exemplu:
    • $sheet->getColumnDimension("A")->setWidth(40)([$pCoordinate = "A1" [, $pValue = null [, $returnCell = false]]]) ia trei parametri: coordonatele celulei, datele care urmează să fie transmise în celulă și al treilea parametru este unul dintre boolean constante de tip: adevărat sau fals(dacă treceți valoarea adevărat, atunci metoda va returna un obiect celulă, în caz contrar un obiect foaie de lucru);
    • setCellValueByColumnAndRow([$pColumn = 0 [, $pRow = 1 [, $pValue = null [, $returnCell = false]]]]) ia patru parametri: numărul coloanei celulei, numărul rândului celulei, datele care urmează să fie transmise către celulă, iar al patrulea parametru este valabil similar cu al treilea parametru al metodei $sheet->getColumnDimension("A")->setWidth(40)().
  • Metode pentru obținerea unei celule:
    • getCell([$pCoordinate = "A1"]) ia coordonatele celulei ca parametru;
    • getCellByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) preia doi parametri sub forma numerelor de coloană și rând ale celulei.

După cum putem vedea, metodele de mai sus sunt împerecheate. Prin urmare, putem lucra cu celule folosind șiruri de caractere sau reprezentarea numerică a coordonatelor. Ceea ce desigur este un avantaj suplimentar la locul de muncă.

Generarea unui raport folosind PHP în Excel

Foarte des este nevoie de evidențierea unor date într-un raport. Evidențiați un font sau aplicați un cadru de umplere a fundalului unor celule etc. Acest lucru vă permite să vă concentrați asupra celor mai importante informații (deși vă poate distrage atenția). În aceste scopuri, biblioteca PHPExcel are un întreg set de stiluri care pot fi aplicate celulelor din Excel. Desigur, există un mic „minus” în această bibliotecă - nu puteți aplica un stil mai multor celule în același timp, ci numai fiecăruia individual. Dar acest lucru nu creează disconfort la dezvoltarea aplicațiilor web.


Există două moduri de a atribui un stil unei celule:

  • Aplica metoda applyFromArray, clasa PHPExcel_Style. In metoda applyFromArray Este transmisă o matrice cu următorii parametri:
    • umple- o matrice cu parametri de umplere;
    • font- o matrice cu parametrii fontului;
    • frontiere- matrice cu parametri de cadru;
    • aliniere- matrice cu parametrii de aliniere;
    • format numeric- o matrice cu parametri pentru formatul de prezentare a datelor celulei;
    • protecţie- o matrice cu parametrii de protecție a celulei.
  • Utilizați metoda clasei PHPExcel_Style pentru fiecare stil separat. De exemplu, puteți atribui un font unei celule astfel: $sheet->getStyle("A1")->getFont()->setName("Arial") .

Umple

Valoarea parametrului umple este o matrice cu următorii parametri opționali:

  • tip- tipul de umplere;
  • rotaţie- unghi de gradient;
  • startcolor- valoare sub formă de matrice cu parametrul inițial de culoare în format RGB;
  • culoarea finală- valoare sub formă de matrice cu parametrul final de culoare în format ARGB;
  • culoare- valoare sub forma unui tablou cu parametrul de culoare inițial în format RGB.
Stiluri de umplere
FILL_NONE nici unul
FILL_SOLID solid
FILL_GRADIENT_LINEAR liniar
FILL_GRADIENT_PATH cale
FILL_PATTERN_DARKDOWN întuneric în jos
FILL_PATTERN_DARKGRAY gri închis
FILL_PATTERN_DARKGRID darkGrid
FILL_PATTERN_DARKHORIZONTAL întunecatHorizontal
FILL_PATTERN_DARKTRELLIS DarkTrellis
FILL_PATTERN_DARKUP întuneric
FILL_PATTERN_DARKVERTICAL darkVertical
FILL_PATTERN_GRAY0625 gri0625
FILL_PATTERN_GRAY125 gri125
FILL_PATTERN_LIGHTDOWN lightDown
FILL_PATTERN_LIGHTGRAY gri deschis
FILL_PATTERN_LIGHTGRID lightGrid
FILL_PATTERN_LIGHTHORIZONTAL luminăOrizontală
FILL_PATTERN_LIGHTTRELLIS LightTrellis
FILL_PATTERN_LIGHTUP aprinde
FILL_PATTERN_LIGHTVERTICAL luminăVerticală
FILL_PATTERN_MEDIUMGRAY Gri mediu
Un exemplu de specificare a setărilor pentru umplere:
array("type" => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, "rotation" => 0, "startcolor" => array("rgb" => "000000"), "endcolor" => array("argb" => "FFFFFFFF "), "culoare" => matrice ("rgb" => "000000"));

Sau puteți folosi următoarele metode:

$PHPExcel_Style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR);

$PHPExcel_Style->getFill()->setRotation(0);

$PHPExcel_Style->getFill()->getStartColor()->applyFromArray(array("rgb" => "C2FABD"));

$PHPExcel_Style->getFill()->getEndColor()->applyFromArray(array("argb" => "FFFFFFFF")).

Inserarea imaginilor

Destul de rar, dar poate fi util să inserați o imagine într-un raport. Acesta ar putea fi un logo, o diagramă etc. Pentru a lucra vom avea nevoie de următoarele metode:

  • setPath([$pValue = "", [$pVerifyFile = adevărat]]) această metodă ia doi parametri. Primul parametru specifică calea către fișierul imagine. Și are sens să specificați al doilea parametru dacă este necesar să verificați existența unui fișier (poate lua una dintre valorile adevărat sau fals).
  • setCoordinates([$pValue = "A1"])) принимает на вход один параметр в виде строки с координатой ячейки.!}
  • setOffsetX([$pValue = 0]) preia un parametru cu valoarea X offset din marginea stângă a celulei.
  • setOffsetY([$pValue = 0]) preia un parametru cu o valoare Y offset din marginea superioară a celulei.
  • setWorksheet([$pValue = nul, [$pOverrideOld = fals]]) această metodă ia doi parametri ca intrare. Primul este obligatoriu, al doilea nu. Primul parametru este o instanță a obiectului foaie activă. Dacă treceți ca valoare a celui de-al doilea parametru adevărat, atunci dacă foaia a fost deja atribuită mai devreme, aceasta va fi suprascrisă și, în consecință, imaginea va fi ștearsă.

Codul care demonstrează algoritmul de inserare a unei imagini este prezentat mai jos:


... $sheet->getColumnDimension("B")->setWidth(40); $imagePath = dirname(__FILE__) . „/excel.png”; if (file_exists($imagePath)) ( $logo = nou PHPExcel_Worksheet_Drawing(); $logo->setPath($imagePath); $logo->setCoordinates("B2"); $logo->setOffsetX(0); $logo- >setOffsetY(0); $sheet->getRowDimension(2)->setRowHeight(190); $logo->setWorksheet($sheet)

Iată cum arată un raport cu o imagine inserată:


Font

font este specificată o matrice care conține următorii parametri opționali:

  • nume- numele fontului;
  • dimensiune- dimensiunea fontului;
  • îndrăzneţ- evidențiați cu aldine;
  • cursiv- puneți-o cu caractere cursive;
  • subliniază- stil de subliniere;
  • grevă- tăiați;
  • superScript- superscript;
  • subscript- indice;
  • culoare
Stiluri de subliniere
UNDERLINE_NONE Nu
UNDERLINE_DOUBLE subliniere dublă
UNDERLINE_SINGLE unică subliniere
Un exemplu de specificare a parametrilor de setări pentru un font:
array("name" => "Arial", "size" => 12, "bold" => true, "italic" => false, "subline" => PHPExcel_Style_Font::UNDERLINE_DOUBLE, "strike" => false, " superScript" => false, "subScript" => fals, "culoare" => matrice ("rgb" => "808080"));

Sau utilizați următoarele metode:

$PHPExcel_Style->getFont()->setName(‘Arial’);

$PHPExcel_Style->getFont()->setBold(true);

$PHPExcel_Style->getFont()->setItalic(false);

$PHPExcel_Style->getFont()->setSuperScript(false);

$PHPExcel_Style->getFont()->setSubScript(false);

$PHPExcel_Style->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE);

$PHPExcel_Style->getFont()->setStrikethrough(false);

$PHPExcel_Style->getFont()->getColor()->applyFromArray(array("rgb" => "808080"));

$PHPExcel_Style->getFont()->setSize(12).

Cadru

Ca valoare a parametrului frontiere este specificată o matrice care conține următorii parametri opționali:

  • tipul de cadru- (sus|bootom|stânga|dreapta|diagonală|direcție diagonală);
  • stil- stil cadru;
  • culoare- valoare sub forma unui tablou cu un parametru de culoare în format RGB.
Stiluri de liniiUn exemplu de specificare a parametrilor de setări pentru un cadru:
array("bottom" => array("style" => PHPExcel_Style_Border::BORDER_DASHDOT, "color" => array(" rgb" => "808080")), "top" => array("style" => PHPExcel_Style_Border ::BORDER_DASHDOT, "color" => array ("rgb" => "808080")));

De asemenea, puteți recurge la următoarele metode:

$PHPExcel_Style->getBorders()->getLeft()->applyFromArray(array('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080')));

$PHPExcel_Style->getBorders()->getRight()->applyFromArray(array('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080')));

$PHPExcel_Style->getBorders()->getTop()->applyFromArray(array('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080')));

$PHPExcel_Style->getBorders()->getBottom()->applyFromArray(array('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080')));

$PHPExcel_Style->getBorders()->getDiagonal()->applyFromArray(array('style' => PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080')));

$PHPExcel_Style->getBorders()->setDiagonalDirection(array('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => array('rgb' => '808080'))).

Aliniere

Valoarea parametrului aliniere este o matrice care ia patru parametri opționali ca intrare:

  • orizontală- constanta de aliniere orizontala;
  • vertical- constantă de aliniere verticală;
  • rotaţie- unghi de rotire a textului;
  • înfășura- permite împachetarea textului;
  • shrinkToFit- dacă se modifică dimensiunea fontului atunci când textul depășește zona celulei;
  • indentare- indentare din marginea stângă.
Alinierea orizontalăAlinierea verticală
VERTICAL_BOTTOM de-a lungul marginii inferioare
VERTICAL_SUS de-a lungul marginii superioare
VERTICAL_CENTER în centru
VERTICAL_JUSTIFY in inaltime
Exemplu de setări pentru stilul de aliniere: array("horizontal" => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, "vertical" => PHPExcel_Style_Alignment::VERTICAL_CENTER, "rotation" => 0, "wrap" => true, "shrinkToFit" => false, "indent" => 5)

$PHPExcel_Style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

$PHPExcel_Style->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_JUSTIFY);

$PHPExcel_Style->getAlignment()->setTextRotation(10);

$PHPExcel_Style->getAlignment()->setWrapText(true);

$PHPExcel_Style->getAlignment()->setShrinkToFit(false);

$PHPExcel_Style->getAlignment()->setIndent(5).

Format de prezentare a datelor

Parametru format numeric este o matrice care include un singur parametru: cod- formatul datelor celulei.


Lista de formate posibile
FORMAT_GENERAL General
FORMAT_TEXT @
FORMAT_NUMBER 0
FORMAT_NUMBER_00 0.00
FORMAT_NUMBER_COMMA_SEPARATED1 #,##0.00
FORMAT_NUMBER_COMMA_SEPARATED2 #,##0.00_-
FORMAT_PERCENTAGE 0%
FORMAT_PERCENTAGE_00 0.00%
FORMAT_DATE_AAAAMMDD2 aaaa-mm-zz
FORMAT_DATE_AAAAMMDD aa-mm-zz
FORMAT_DATE_DDMMAAAA zz/ll/aa
FORMAT_DATE_DMYSLASH d/l/a
FORMAT_DATE_DMYMINUS d-m-a
FORMAT_DATE_DMMINUS d-m
FORMAT_DATE_MYMINUS mele
FORMAT_DATE_XLSX14 mm-zz-aa
FORMAT_DATE_XLSX15 d-mmm-aa
FORMAT_DATE_XLSX16 d-mmm
FORMAT_DATE_XLSX17 mmm-aa
FORMAT_DATE_XLSX22 l/z/aa h:mm
FORMAT_DATE_DATETIME d/l/a h:mm
FORMAT_DATE_TIME1 h:mm AM/PM
FORMAT_DATE_TIME2 h:mm:ss AM/PM
FORMAT_DATE_TIME3 h:mm
FORMAT_DATE_TIME4 h:mm:ss
FORMAT_DATE_TIME5 mm:ss
FORMAT_DATE_TIME6 h:mm:ss
FORMAT_DATE_TIME7 eu:s.S
FORMAT_DATE_TIME8 h:mm:ss
FORMAT_DATE_YYYYMMDDSLASH aa/ll/zz; @
FORMAT_CURRENCY_USD_SIMPLE "$"#,##0.00_-;@
FORMAT_CURRENCY_USD $#,##0_-
FORMAT_CURRENCY_EUR_SIMPLE [$EUR ]#,##0,00_-
Exemplu de setare pentru formatul de date al celulei: array("code" => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

Sau puteți folosi metoda:

$PHPExcel_Style->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

Protecția celulelor

Ca valoare a parametrului protecţie acționează ca o matrice care conține doi parametri opționali:

  • încuiat- protejeaza celula;
  • ascuns- ascunde formule.
Exemplu de setare a parametrilor pentru protecția celulelor:
array("blocat" => adevărat, "ascuns" => fals);

Sau utilizați următoarele metode:


$PHPExcel_Style->getProtection()->setLocked(true);

$PHPExcel_Style->getProtection()->setHidden(false);

Acum știm ce setări de stil există și ce parametri are fiecare stil. Acum vom aplica un stil de design celulelor tabelului, dar vom face acest lucru în două moduri. Prima metodă este de a crea o matrice de setări, pe care le vom transmite ca parametru metodei applyFromArray, clasa PHPExcel_Style.


$style = array("font" => array("nume" => "Arial",), "fill" => array("type" => PHPExcel_Style_Fill::FILL_SOLID, "culoare" => matrice ("rgb" => "C2FABD")), "alignment" => array ("orizontal" => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));
În continuare, vom aplica stilul pe care l-am creat pe celulele excel.

$sheet->getStyleByColumnAndRow($i - 2, $j)->applyFromArray($style);

Acum să aplicăm același stil, dar folosind o tehnică diferită.


//Setați alinierea $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Setați fontul $sheet->getStyleByColumnAndRow($i - 2, $j)->getFont()->setName("Arial"); // Aplicați o umplere $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> getStartColor()->applyFromArray(array("rgb" => "C2FABD"));

Iată ce avem:



Dacă trebuie să aplicați stilul de mai multe ori, atunci prima metodă este mai bună, în alte cazuri, este mai bine să rămâneți la a doua. Pentru a obține un obiect (instanță de clasă PHPExcel_Style) celule responsabile pentru stil, trebuie să utilizați una dintre următoarele metode:

  • getStyleByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) – folosit dacă trebuie să faceți referire la o celulă prin coordonate numerice. Metodei trebuie să treacă doi parametri sub formă de numere de coloană și rând ale celulei;
  • getStyle() – folosit pentru a accesa coordonatele șirului unei celule. Metoda necesită trecerea unui parametru, aceasta este o reprezentare șir a coordonatei.

Adăugarea de comentarii

Cred că nu se întâmplă des ca cineva să folosească oportunitatea pentru a adăuga comentarii în celule, dar aceasta este părerea mea pur personală, dar o astfel de oportunitate există. Adăugarea unui comentariu la o celulă este destul de simplă, așa cum puteți vedea în exemplul de mai jos:


... // Stiluri de font $fBold = array("name" => "Tahoma", "size" => 10, "bold" => true); $fNormal = array("nume" => "Tahoma", "dimensiune" => 10); $richText = $sheet->getComment("B2")->getText(); $richText->createTextRun("Lorem ipsum")->getFont()-> applyFromArray($fNormal); $richText->createTextRun("dolor sit")->getFont()->applyFromArray($fBold); $richText->createTextRun(" amet consectetuer")->getFont()-> applyFromArray($fNormal); // Lățimea câmpului de comentariu $sheet->getComment("B2")->setWidth("250"); // Înălțimea câmpului de comentariu $sheet->getComment("B2")->setHeight("25"); ...

Trebuie remarcat faptul că atunci când apelați din nou metoda createTextRun() noul comentariu va fi adăugat celui existent, în loc să-l înlocuiască. Trebuie remarcat faptul că această metodă returnează un obiect din clasa PHPExcel_RichText_Run, care are metode pentru setarea și obținerea parametrilor fontului:

  • getFont() – returnează un obiect de clasă pentru lucrul cu fonturile PHPExcel_Style_Font.
  • setFont([$pFont = nul]))]) – această metodă necesită trecerea unui obiect din clasa PHPExcel_Style_Font ca parametru.

Acesta este genul de comentariu pe care ar trebui să-l primim.