ატვირთვა Excel-ზე mysql php-დან. ტაბულური მონაცემების გადასატანად მარტივი გზა PHP-დან Excel-ში. მონაცემების ექსპორტი MySQL-დან Excel-ში PHP-ში

Საგანი. მაგრამ ყველაფერი განსხვავებულია, თუ საჭიროა ანგარიშის გენერირება Excel ფორმატში PHP. და ამ ქმნილებამ იმუშაოს UNIX- მსგავსი სისტემები. მაგრამ, საბედნიეროდ, ყველაფერი არც ისე ცუდია. და ამისათვის საკმარისი ბიბლიოთეკებია. მე ვირჩევ PHPExcel. ამ ბიბლიოთეკასთან უკვე რამდენიმე წელია ვმუშაობ და კმაყოფილი ვარ. ვინაიდან ეს არის კროს-პლატფორმული, არ არსებობს პორტაბელურობის პრობლემები.


PHPExcel საშუალებას გაძლევთ იმპორტი და ექსპორტი გააკეთოთ Excel-ში. გამოიყენეთ სხვადასხვა დიზაინის სტილი მოხსენებებში. ზოგადად, ყველაფერი შესანიშნავია. არსებობს ფორმულებთან მუშაობის უნარიც კი. საჭიროა მხოლოდ იმის გათვალისწინება, რომ ყველა სამუშაო (კითხვა და წერა) უნდა განხორციელდეს კოდირებით utf-8.


ბიბლიოთეკის დაყენება

სამუშაოდ, გჭირდებათ PHP ვერსია 5.2.0 ან უფრო მაღალი. ასევე საჭიროა შემდეგი გაფართოებები: php_zip, php_xml და php_gd2. შეგიძლიათ ჩამოტვირთოთ ბიბლიოთეკა აქედან.


PHPExcel ბიბლიოთეკის გამოყენებით შეგიძლიათ დაწეროთ მონაცემები შემდეგ ფორმატებში:

  • Excel 2007;
  • Excel 97 და მოგვიანებით;
  • PHPExcel სერიული ცხრილი;
  • HTML;

მონაცემთა იმპორტი PHP-დან Excel-ში

მოდით შევხედოთ გამრავლების ცხრილის ფორმირების მაგალითს.


// კლასის დაკავშირება excel-თან მუშაობისთვის require_once("PHPExcel.php"); // კლასის დაკავშირება excel-ის ფორმატში მონაცემების გამოსატანად require_once("PHPExcel/Writer/Excel5.php"); // შექმენით PHPExcel კლასის ობიექტი $xls = new PHPExcel(); // აქტიური ფურცლის ინდექსის დაყენება $xls->setActiveSheetIndex(0); // მიიღეთ აქტიური ფურცელი $sheet = $xls->getActiveSheet(); // ფურცლის ხელმოწერა $sheet->setTitle("გამრავლების ცხრილი"); // A1 უჯრედში ტექსტის ჩასმა $sheet->setCellValue("A1", "გამრავლების ცხრილი"); $sheet->getStyle("A1")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyle("A1")->getFill()->getStartColor()->setRGB("EEEEEE"); // უჯრედების შერწყმა $sheet->mergeCells("A1:H1"); // ტექსტის გასწორება $sheet->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); ამისთვის ($i = 2; $i< 10; $i++) { for ($j = 2; $j < 10; $j++) { // Выводим таблицу умножения $sheet->setCellValueByColumnAndRow($i - 2, $j, $i . "x" .$j . "=" . ($i*$j)); // გასწორების გამოყენება $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()-> setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); ))

// HTTP ჰედერის სათაურის გამოტანა ("იწურება: ორშაბათი, 1974 წლის 1 აპრილი 05:00:00 GMT"); header("Last-Modified: " . gmdate("D,d M YH:i:s") . "GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); header ("შინაარსის ტიპი: განაცხადი/vnd.ms-excel"); header("Content-Disposition: attachment; filename=matrix.xls"); // ფაილის შიგთავსის გამოტანა $objWriter = new PHPExcel_Writer_Excel5($xls); $objWriter->save("php://output");

აქ გენერირებული მონაცემები დაუყოვნებლივ "გადაიფრქვევა" ბრაუზერში. თუმცა, თუ თქვენ გჭირდებათ ფაილის შენახვა და არა დაუყოვნებლივ "გადაგდება", მაშინ არ გჭირდებათ გამომავალი HTTP სათაურებიდა ნაცვლად "php://output" თქვენ უნდა მიუთითოთ გზა თქვენი ფაილის. დაიმახსოვრეთ, რომ დირექტორია, რომელშიც ფაილი უნდა შეიქმნას, უნდა ჰქონდეს ჩაწერის ნებართვა. ეს ეხება UNIX-ის მსგავს სისტემებს.


მოდით შევხედოთ კიდევ სამ სასარგებლო ინსტრუქციას, როგორც მაგალითი:

  • $sheet->getColumnDimension("A")->setWidth(40)– აყენებს სვეტის „A“ სიგანეს 40 ერთეულზე;
  • $sheet->getColumnDimension("B")->setAutoSize(true)– აქ „B“ სვეტს ექნება ავტომატური სიგანე;
  • $sheet->getRowDimension(4)->setRowHeight(20)– მეოთხე ხაზის სიმაღლეს ადგენს 20 ერთეულზე.

ასევე ყურადღება მიაქციეთ ანგარიშთან მუშაობისთვის საჭირო შემდეგ მეთოდებს:

  • უჯრედში მონაცემების ჩასმის მეთოდები:
    • setCellValue([$pCoordinate = "A1" [, $pValue = null [, $returnCell = false]]] იღებს სამ პარამეტრს: უჯრედის კოორდინატს, უჯრედში გასატან მონაცემს და მესამე პარამეტრი არის ერთ-ერთი ლოგიკური. ტიპის მუდმივები: მართალიაან ყალბი(თუ თქვენ გადალახავთ მნიშვნელობას მართალია, მაშინ მეთოდი დააბრუნებს უჯრედის ობიექტს, წინააღმდეგ შემთხვევაში სამუშაო ფურცლის ობიექტს);
    • setCellValueByColumnAndRow([$pColumn = 0 [, $pRow = 1 [, $pValue = null [, $returnCell = false]]]] იღებს ოთხ პარამეტრს: უჯრედის სვეტის ნომერს, უჯრედის რიგის ნომერს, მონაცემებს, რომლებიც უნდა გამოვიდეს უჯრედი და მეოთხე პარამეტრი მოქმედებს მეთოდის მესამე პარამეტრის მსგავსად setCellValue().
  • უჯრედის მიღების მეთოდები:
    • getCell([$pCoordinate = "A1"]) პარამეტრად იღებს უჯრედის კოორდინატს;
    • getCellByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) იღებს ორ პარამეტრს უჯრედის სვეტისა და მწკრივის ნომრების სახით.

როგორც ვხედავთ, ზემოთ ჩამოთვლილი მეთოდები დაწყვილებულია. ამიტომ, ჩვენ შეგვიძლია ვიმუშაოთ უჯრედებთან კოორდინატების სტრიქონის ან რიცხვითი წარმოდგენის გამოყენებით. რაც, რა თქმა უნდა, სამსახურში დამატებითი უპირატესობაა.

ანგარიშის გენერირება PHP-ის გამოყენებით Excel-ში

ძალიან ხშირად საჭიროა მოხსენებაში ზოგიერთი მონაცემის ხაზგასმა. გააკეთეთ შრიფტის მონიშვნა ან გამოიყენეთ ფონის შევსების ჩარჩო ზოგიერთ უჯრედზე და ა.შ. ეს საშუალებას გაძლევთ კონცენტრირება მოახდინოთ ყველაზე მნიშვნელოვან ინფორმაციაზე (თუმცა ამან ასევე შეიძლება გადაგაფანტოთ ყურადღება). ამ მიზნებისათვის, PHPExcel ბიბლიოთეკას აქვს სტილის მთელი ნაკრები, რომელიც შეიძლება გამოყენებულ იქნას Excel-ის უჯრედებზე. რა თქმა უნდა, ამ ბიბლიოთეკაში არის პატარა „მინუსი“ - თქვენ არ შეგიძლიათ გამოიყენოთ სტილი ერთდროულად რამდენიმე უჯრედზე, მაგრამ მხოლოდ თითოეულს ინდივიდუალურად. მაგრამ ეს არ ქმნის დისკომფორტს ვებ აპლიკაციების შემუშავებისას.


თქვენ შეგიძლიათ სტილის მინიჭება უჯრედს ორი გზით:

  • გამოყენების მეთოდი applyFromArray, კლასი PHPExcel_Style. მეთოდში applyFromArrayგადაეცემა მასივი შემდეგი პარამეტრებით:
    • შევსება- მასივი შევსების პარამეტრებით;
    • შრიფტი- მასივი შრიფტის პარამეტრებით;
    • საზღვრები- მასივი ჩარჩოს პარამეტრებით;
    • გასწორება- მასივი გასწორების პარამეტრებით;
    • რიცხვის ფორმატი- მასივი უჯრედის მონაცემთა პრეზენტაციის ფორმატის პარამეტრებით;
    • დაცვა- მასივი უჯრედის დაცვის პარამეტრებით.
  • გამოიყენეთ კლასის მეთოდი PHPExcel_Styleთითოეული სტილისთვის ცალკე. მაგალითად, შეგიძლიათ შრიფტი მიანიჭოთ უჯრედს, როგორიცაა: $sheet->getStyle("A1")->getFont()->setName("Arial") .

შეავსეთ

პარამეტრის მნიშვნელობა შევსებაარის მასივი შემდეგი არჩევითი პარამეტრებით:

  • ტიპი- შევსების ტიპი;
  • როტაცია- გრადიენტური კუთხე;
  • საწყისი ფერი- მნიშვნელობა მასივის სახით საწყისი ფერის პარამეტრით RGB ფორმატში;
  • ბოლო ფერი- მნიშვნელობა მასივის სახით საბოლოო ფერის პარამეტრით ARGB ფორმატში;
  • ფერი- მნიშვნელობა მასივის სახით საწყისი ფერის პარამეტრით RGB ფორმატში.
შევსების სტილები
FILL_NONE არცერთი
FILL_SOLID მყარი
FILL_GRADIENT_LINEAR ხაზოვანი
FILL_GRADIENT_PATH გზა
FILL_PATTERN_DARKDOWN darkDown
FILL_PATTERN_DARKGRAY მუქი ნაცრისფერი
FILL_PATTERN_DARKGRID darkGrid
FILL_PATTERN_DARKHORIZONTAL მუქი ჰორიზონტალური
FILL_PATTERN_DARKTRELLIS ბნელი ტრელისი
FILL_PATTERN_DARKUP darkUp
FILL_PATTERN_DARKVERTICAL მუქი ვერტიკალური
FILL_PATTERN_GRAY0625 ნაცრისფერი0625
FILL_PATTERN_GRAY125 ნაცრისფერი 125
FILL_PATTERN_LIGHTDOWN განათება
FILL_PATTERN_LIGHTGRAY ღია ნაცრისფერი
FILL_PATTERN_LIGHTGRID lightGrid
FILL_PATTERN_LIGHTHORIZONTAL მსუბუქი ჰორიზონტალური
FILL_PATTERN_LIGHTTRELLIS მსუბუქი ტრელისი
FILL_PATTERN_LIGHTUP განათება
FILL_PATTERN_LIGHTVERTICAL სინათლე ვერტიკალური
FILL_PATTERN_MEDIUMGRAY საშუალო ნაცრისფერი
შევსების პარამეტრების მითითების მაგალითი:
array("type" => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, "rotation" => 0, "startcolor" => array("rgb" => "000000"), "endcolor" => array ("argb" => "FFFFFFFF" "), "color" => მასივი ("rgb" => "000000"));

ან შეგიძლიათ გამოიყენოთ შემდეგი მეთოდები:

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

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

$PHPExcel_Style->getFill()->getStartColor()->applyFromArray(მასივი("rgb" => "C2FABD"));

$PHPExcel_Style->getFill()->getEndColor()->applyFromArray(მასივი("argb" => "FFFFFFFF")).

სურათების ჩასმა

საკმაოდ იშვიათად, მაგრამ გამოსახულების ჩასმა შეიძლება სასარგებლო იყოს მოხსენებაში. ეს შეიძლება იყოს ლოგო, დიაგრამა და ა.შ. სამუშაოდ დაგვჭირდება შემდეგი მეთოდები:

  • setPath([$pValue = "", [$pVerifyFile = მართალია]]) ეს მეთოდი იღებს ორ პარამეტრს. პირველი პარამეტრი განსაზღვრავს გამოსახულების ფაილის გზას. და აზრი აქვს მეორე პარამეტრის მითითებას, თუ საჭიროა ფაილის არსებობის შემოწმება (შეიძლება მიიღოს ერთ-ერთი მნიშვნელობა მართალიაან ყალბი).
  • კომპლექტი კოორდინატები([$pValue = "A1"])) принимает на вход один параметр в виде строки с координатой ячейки.!}
  • setOffsetX([$pValue = 0]) იღებს ერთ პარამეტრს X ოფსეტური მნიშვნელობით უჯრედის მარცხენა კიდიდან.
  • setOffsetY([$pValue = 0]) იღებს ერთ პარამეტრს Y ოფსეტური მნიშვნელობით უჯრედის ზედა კიდიდან.
  • კომპლექტი სამუშაო ფურცელი([$pValue = null, [$pOverrideOld = ყალბი]]) ეს მეთოდი შეყვანის სახით იღებს ორ პარამეტრს. პირველი სავალდებულოა, მეორე არა. პირველი პარამეტრი არის აქტიური ფურცლის ობიექტის მაგალითი. თუ მეორე პარამეტრის მნიშვნელობად გადასცემთ მართალია, მაშინ თუ ფურცელი უკვე ადრე იყო მინიჭებული, ის გადაიწერება და, შესაბამისად, სურათი წაიშლება.

სურათის ჩასმის ალგორითმის დემონსტრირების კოდი მოცემულია ქვემოთ:


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

ასე გამოიყურება ანგარიში ჩასმული სურათით:


შრიფტი

შრიფტიმითითებულია მასივი, რომელიც შეიცავს შემდეგ არჩევით პარამეტრებს:

  • სახელი- შრიფტის სახელი;
  • ზომა- შრიფტის ზომა;
  • გაბედული- მონიშნეთ თამამად;
  • დახრილი- ჩასვით დახრილი ასოებით;
  • ხაზი გაუსვით- ხაზგასმის სტილი;
  • გაფიცვა- გადაკვეთა;
  • სუპერსკრიპტი- ზედწერილი;
  • ქვესკრიპტი- ხელმოწერა;
  • ფერი
ხაზი გაუსვით სტილებს
UNDERLINE_NONE არა
UNDERLINE_DOUBLE ორმაგი ხაზგასმა
UNDERLINE_SINGLE ერთი ქვედა ხაზი
შრიფტისთვის პარამეტრების პარამეტრების მითითების მაგალითი:
array("name" => "Arial", "size" => 12, "bold" => true, "italic" => false, "underline" => PHPExcel_Style_Font::UNDERLINE_DOUBLE, "strike" => false, " superScript" => false, "subScript" => false, "color" => array("rgb" => "808080"));

ან გამოიყენეთ შემდეგი მეთოდები:

$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(მასივი("rgb" => "808080"));

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

ჩარჩო

როგორც პარამეტრის მნიშვნელობა საზღვრებიმითითებულია მასივი, რომელიც შეიცავს შემდეგ არჩევით პარამეტრებს:

  • ჩარჩოს ტიპი- (ზედა|ჩატვირთვა|მარცხნივ|მარჯვნივ|დიაგონალი|დიაგონალური მიმართულება);
  • სტილი- ჩარჩო სტილი;
  • ფერი- მნიშვნელობა მასივის სახით ფერის პარამეტრით RGB ფორმატში.
ხაზის სტილებიჩარჩოსთვის პარამეტრების პარამეტრების მითითების მაგალითი:
მასივი ("ქვედა" => მასივი ("სტილი" => PHPExcel_Style_Border::BORDER_DASHDOT, "color" => მასივი (" rgb" => "808080")), "ზემო" => მასივი ("სტილი" => PHPExcel_Style_Border ::BORDER_DASHDOT, "color" => მასივი ("rgb" => "808080")));

თქვენ ასევე შეგიძლიათ მიმართოთ შემდეგი მეთოდების გამოყენებას:

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

$PHPExcel_Style->getBorders()->getRight()->applyFromArray(მასივი('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(მასივი('style' =>PHPExcel_Style_Border::BORDER_DASHDOT,'color' => მასივი ('rgb' => '808080'))).

გასწორება

პარამეტრის მნიშვნელობა გასწორებაარის მასივი, რომელიც შეყვანის სახით იღებს ოთხ არჩევით პარამეტრს:

  • ჰორიზონტალური- ჰორიზონტალური განლაგების მუდმივი;
  • ვერტიკალური- ვერტიკალური განლაგების მუდმივი;
  • როტაცია- ტექსტის ბრუნვის კუთხე;
  • შეფუთვა- დაუშვას ტექსტის შეფუთვა;
  • shrinkToFit- შეიცვალოს თუ არა შრიფტის ზომა, როდესაც ტექსტი სცილდება უჯრედის ზონას;
  • შეწევა- შეწევა მარცხენა კიდიდან.
ჰორიზონტალური განლაგებავერტიკალური განლაგება
VERTICAL_BOTTOM ქვედა კიდის გასწვრივ
VERTICAL_TOP ზედა კიდის გასწვრივ
VERTICAL_CENTER ცენტრში
VERTICAL_JUSTIFY სიმაღლეში
გასწორების სტილის პარამეტრების მაგალითი:მასივი ("ჰორიზონტალური" => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, "ვერტიკალური" => PHPExcel_Style_Alignment::VERTICAL_CENTER, "როტაცია" => 0, "wrap" => true, "shrinkToFit" = false, "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_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_YYYYMMDD2 წწ-მმ-დდ
FORMAT_DATE_YYYYMMDD წ-მმ-დდ
FORMAT_DATE_DDMMYYYY დდ/მმ/წთ
FORMAT_DATE_DMYSLASH დ/მ/წ
FORMAT_DATE_DMYMINUS დ-მ-წ
FORMAT_DATE_DMMINUS დ-მ
FORMAT_DATE_MYMINUS ჩემი
FORMAT_DATE_XLSX14 მმ-დდ-წტ
FORMAT_DATE_XLSX15 დ-მმ-წთ
FORMAT_DATE_XLSX16 დ-მმმ
FORMAT_DATE_XLSX17 მმმ-წთ
FORMAT_DATE_XLSX22 მ/დ/წთ სთ: მმ
FORMAT_DATE_DATETIME დ/მ/წ სთ:მმ
FORMAT_DATE_TIME1 სთ:მმ AM/PM
FORMAT_DATE_TIME2 სთ:მმ:სს AM/PM
FORMAT_DATE_TIME3 სთ: მმ
FORMAT_DATE_TIME4 სთ:მმ:სს
FORMAT_DATE_TIME5 მმ: სს
FORMAT_DATE_TIME6 სთ:მმ:სს
FORMAT_DATE_TIME7 მე:ს.ს
FORMAT_DATE_TIME8 სთ:მმ:სს
FORMAT_DATE_YYYYMMDDSLASH წ/მმ/დდ; @
FORMAT_CURRENCY_USD_SIMPLE "$"#,##0.00_-;@
FORMAT_CURRENCY_USD $#,##0_-
FORMAT_CURRENCY_EUR_SIMPLE [$EUR ]#,##0.00_-
უჯრედის მონაცემთა ფორმატის პარამეტრის მაგალითი:მასივი ("კოდი" => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

ან შეგიძლიათ გამოიყენოთ მეთოდი:

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

უჯრედის დაცვა

როგორც პარამეტრის მნიშვნელობა დაცვამოქმედებს როგორც მასივი, რომელიც შეიცავს ორ არჩევით პარამეტრს:

  • ჩაკეტილი- დაიცვას უჯრედი;
  • დამალული- ფორმულების დამალვა.
უჯრედის დაცვის პარამეტრების დაყენების მაგალითი:
array("ჩაკეტილი" => true, "დამალული" => false);

ან გამოიყენეთ შემდეგი მეთოდები:


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

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

ახლა ჩვენ ვიცით, რა სტილის პარამეტრები არსებობს და რა პარამეტრები აქვს თითოეულ სტილს. ახლა ჩვენ გამოვიყენებთ დიზაინის სტილს ცხრილის უჯრედებზე, მაგრამ ამას გავაკეთებთ ორი მეთოდის გამოყენებით. პირველი მეთოდი არის პარამეტრების მასივის შექმნა, რომელსაც პარამეტრად გადავცემთ მეთოდს applyFromArray, კლასი PHPExcel_Style.


$style = მასივი ("font" => მასივი ("name" => "Arial",), "fill" => array ("type" => PHPExcel_Style_Fill::FILL_SOLID, "color" => მასივი ("rgb" => "C2FABD")), "განლაგება" => მასივი ("ჰორიზონტალური" => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));
შემდეგი, ჩვენ გამოვიყენებთ ჩვენს მიერ შექმნილ სტილს excel უჯრედებზე.

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

ახლა მოდით გამოვიყენოთ იგივე სტილი, მაგრამ განსხვავებული ტექნიკის გამოყენებით.


//დააყენეთ გასწორება $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // შრიფტის დაყენება $sheet->getStyleByColumnAndRow($i - 2, $j)->getFont()->setName("Arial"); // შევსების გამოყენება $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> getStartColor()->applyFromArray(მასივი("rgb" => "C2FABD"));

აი რა მივიღეთ:



თუ სტილის გამოყენება ბევრჯერ გჭირდებათ, მაშინ პირველი მეთოდი უკეთესია, თორემ ჯობია მეორეზე დარჩეს. ობიექტის მისაღებად (კლასის მაგალითი PHPExcel_Style) სტილზე პასუხისმგებელი უჯრედები, თქვენ უნდა გამოიყენოთ ერთ-ერთი შემდეგი მეთოდი:

  • getStyleByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) – გამოიყენება, თუ საჭიროა უჯრედის მითითება რიცხვითი კოორდინატებით. მეთოდს უნდა გადაეცეს ორი პარამეტრი უჯრედის სვეტისა და მწკრივის ნომრის სახით;
  • getStyle() – გამოიყენება უჯრედის სიმებიანი კოორდინატზე წვდომისათვის. მეთოდი მოითხოვს ერთი პარამეტრის გადაცემას, ეს არის კოორდინატის სიმებიანი წარმოდგენა.

კომენტარების დამატება

მე ვფიქრობ, რომ ხშირად არ ხდება, რომ ვინმე იყენებს საკნებში კომენტარების დასამატებლად, მაგრამ ეს მხოლოდ ჩემი პირადი აზრია, მაგრამ ასეთი შესაძლებლობა არსებობს. საკანში კომენტარის დამატება საკმაოდ მარტივია, როგორც ხედავთ ქვემოთ მოცემულ მაგალითში:


... // შრიფტის სტილები $fBold = array("name" => "Tahoma", "size" => 10, "bold" => true); $fNormal = მასივი ("name" => "Tahoma", "size" => 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); // კომენტარის ველის სიგანე $sheet->getComment("B2")->setWidth("250"); // კომენტარის ველის სიმაღლე $sheet->getComment("B2")->setHeight("25"); ...

უნდა აღინიშნოს, რომ მეთოდის ხელახლა გამოძახებისას createTextRun()ახალი კომენტარი დაემატება არსებულს, ვიდრე ჩაანაცვლებს მას. უნდა აღინიშნოს, რომ ეს მეთოდი აბრუნებს PHPExcel_RichText_Run კლასის ობიექტს, რომელსაც აქვს შრიფტის პარამეტრების დაყენებისა და მიღების მეთოდები:

  • getFont() – აბრუნებს კლასის ობიექტს PHPExcel_Style_Font შრიფტებთან მუშაობისთვის.
  • setFont([$pFont = null]))]) – ეს მეთოდი მოითხოვს PHPExcel_Style_Font კლასის ობიექტის პარამეტრად გადაცემას.

სწორედ ასეთი კომენტარი უნდა მივიღოთ.

ბევრისთვის მუშაობისას PHP MySQL-თან ერთადარსებობს ისეთი საჭიროება, როგორიცაა მონაცემთა ექსპორტი მონაცემთა ბაზიდან xls ფორმატში, რათა ადამიანები, რომლებსაც ეს მონაცემები სჭირდებათ, დაამუშავონ ისინი Excel-ში, ან უბრალოდ მოსახერხებელი იყოს მომხმარებლებისთვის ამ მონაცემების ნახვა. ცოტა ხნის წინ ასეთი საჭიროება გამიჩნდა და დღეს გეტყვით, როგორ შეიძლება ამ საქმის განხორციელება.

მაშინვე ვიტყვი, რომ ეს მეთოდი საკმაოდ მარტივია, მაგრამ მონაცემები ჩვეულებრივ იტვირთება.

დასაწყისისთვის მე მივცემ საბოლოო xls ფაილის მაგალითს Excel-ში, ატვირთვა ასე გამოიყურება:

სხვა სიტყვებით რომ ვთქვათ, არცერთი სურათი ან სტილი არ აიტვირთება, მხოლოდ სვეტების სათაურები და თავად მონაცემები.

სანამ ატვირთვის ზუსტად ამ ვარიანტზე მოვდიოდი, ვცადე csv ფორმატში ატვირთვა, მაგრამ ცოტა მოუხერხებლად გამომივიდა, მერე ცხრილის დახატვა და xls გაფართოებით შენახვა ვცადე, ესეც რაღაც სისულელე აღმოჩნდა. , მეთოდი, რომელსაც ახლა აღვწერ, სრულიად მომეწონა და ახლა გაგიზიარებთ.

დასაწყისისთვის მოგცემ ყველა კოდს რაც შეძლებისდაგვარად დავაკომენტარე, შეგიძლიათ აირჩიოთ და შეინახოთ php გაფართოებით და სცადოთ, უბრალოდ არ დაგავიწყდეთ მონაცემთა ბაზასთან დაკავშირების პარამეტრების მითითება .

მონაცემების ექსპორტი MySQL-დან Excel-ში PHP-ში

და ისე რომ გაიგოთ რა მონაცემებს ვტვირთავ, მონაცემთა ბაზაში მარტივი ცხრილის მაგალითს მივცემ ( მე მაქვს მისი სახელის ტესტი):

ტესტის ცხრილი:

id სახელი სახელი
1 ივანოვი ივანე
2 პეტროვი პეტრე
2 პეტროვი 2 პეტრე 2
xlsData = პაკეტი ("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0); ) // თუ რიცხვის ფუნქცია RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData pack("d", $value ) //თუ ტექსტური ფუნქცია RecText($ col, $value)($len = strlen($value);$this->xlsData .= pack); (" s*", 0x0204, 8 + $len, $ col, 0x00, $this->xlsData .= $value return ) // ჩადეთ რიცხვითი ფუნქცია InsertNumber($value); if ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ ღირებულება $this->countCol++ ) // InsertText ($value) ფუნქცია ($this->countCol == $this->totalCol) ($this->countCol = 0); >countRow++ ) $this->RecText($this->countCol, $this->countCol++) ($this->); countCol = 0 ; დაბრუნების;

) // ფაილის ფუნქციის შენახვა SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // ფაილის ფუნქციის გაგზავნა SendFile())( $this->EndData(); header ("Last-Modified: " . gmdate("D,d M YH:i:s") . "GMT" ("Cache-Control: no-store, no-cache, must-revalidate"); header (" Pragma: no-cache" ("Content-type: application/x-msexcel"); ->xlsData ) ) if(isset($_GET["id"])) (//გაფილტრე მონაცემები $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES))) $filename = "File_with_".$id // დააყენეთ ფაილის სახელი $excel = new ExportToExcel( // შექმენით ინსტანცია კლასის $sql="SELECT * FROM test.test"; //შეკითხვა $rez= mysql_query($sql->InsertText("Identifier">InsertText("გვარი"); =mysql_fetch_assoc($rez))($excel->InsertNumber($row["id"]); $excel->InsertText($row["firstname"]); $excel->InsertText($row["name"]); $excel->GoNewLine(); ) $excel->SaveFile($filename); ) ?> მთელი იდეა აქ არის ფუნქციაშეფუთვა () , რომელიც ათავსებს მონაცემებს ორობით სტრიქონში და ჩვენ, თავის მხრივ, თანმიმდევრულად ვავსებთ ამ სტრიქონს მონაცემთა ბაზიდან გადმოწერილი მონაცემებით MySql რეგულარული ფუნქციის გამოყენებით.

ამ კოდის ფუნქციონირების შესამოწმებლად, იმის გათვალისწინებით, რომ თქვენ დააკონფიგურირეთ კავშირი მონაცემთა ბაზასთან და შექმენით მსგავსი ცხრილი, შეგიძლიათ გაგზავნოთ შემდეგი მოთხოვნა:

Http://your_site/file_name. php?id=2

და თქვენ უნდა განტვირთოთ ორი ხაზი, რომელთა ID ტოლია 2.

ახლა კი ყველას, ვისაც მონაცემების ატვირთვის უფლებას აძლევთ, შეუძლიათ მარტივად გაიტანონ ისინი ადგილობრივ კომპიუტერში ვებ ინტერფეისის საშუალებით. ეს მეთოდი მოსახერხებელია როგორც კორპორატიული მომხმარებლებისთვის, თუ თქვენ ამზადებთ აპლიკაციას თქვენი ორგანიზაციისთვის, ასევე თქვენი ვებსაიტის მომხმარებლებისთვის ინტერნეტში. იმედი მაქვს, რომ ეს მეთოდი დაგეხმარა. Წარმატებები!

.
ამ შენიშვნაში წარმოდგენილი მეთოდი მართლაც ძალიან მარტივია, მაგრამ შეიძლება ყოველთვის არ იყოს მოსახერხებელი.
ტაბულური მონაცემების PHP-დან Excel-ში გადატანის მრავალი სხვა გზა არსებობს, მე აღვწერ იმას, რაც მეჩვენებოდა ყველაზე მარტივი და ფუნქციონალური. განსაკუთრებით უნდა აღინიშნოს, რომ მე არ ვსაუბრობ xls ფაილის გენერირებაზე, არამედ მხოლოდ ვთავაზობ, რომ მომხმარებელმა გახსნას მიღებული მონაცემები Excel-ის გამოყენებით, რათა პროგრამირების გამოცდილების მქონე მომხმარებლებმა არ შეამჩნიონ გაყალბება.

ასე რომ, პირველი, რაც უნდა გააკეთოთ, არის ჩვენს გვერდზე განათავსოთ ბმული სკრიპტზე, რომელიც წარმოქმნის შემდეგ სათაურებს:
header ("პრაგმა: საჯარო");
header ("იწურება: 0");
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Cache-Control: private", false);
header ("Content-Type: application/x-msexcel");
header("Content-Disposition: დანართი; ფაილის სახელი=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header ("შინაარსი-გადაცემა-დაშიფვრა: ორობითი");
header("Content-Length: " . $object->getFileSize());

$object არის სფერული ობიექტი ვაკუუმში, რომელიც თითოეულ მკითხველს შეუძლია განახორციელოს როგორც მას სურს. getFileName() და getFileSize() მიმღებების დანიშნულება გასაგებია მათი სახელებიდან. აქ ღირს ერთი არააშკარა ნიუანსის ხაზგასმა (გმადლობთ, რომ შემახსენეთ) - getFileName() რა თქმა უნდა შეუძლია დააბრუნოს ნებისმიერი ფაილის სახელი, მაგრამ თუ გსურთ ბრაუზერმა შესთავაზოს მიღებული შინაარსის გახსნა Excel-ში, მაშინ ფაილის გაფართოება უნდა იყოს xls.
ახალი ჯერ არაფერი მითქვამს, ეს ყველაფერი ჩემამდე იყო გამოგონილი, თუმცა, როგორც ქვემოთ იქნება აღწერილი.
როგორც სწორად აღინიშნა სტატიის კომენტარებში, Excel ბევრად უფრო სწრაფად მუშაობს XML-ით. მაგრამ ყველაზე მნიშვნელოვანი უპირატესობა, ალბათ, არ არის სიჩქარე, არამედ ბევრად უფრო ფართო შესაძლებლობები. მე არ ჩავუღრმავდები სარეველებს, მაგრამ უბრალოდ მივცემ მარტივ მაგალითს და ყველა ტეგის დეტალური აღწერილობის ბმულს.

ასე რომ, სათაურების გენერირების შემდეგ, ჩვენ უნდა მივცეთ ფაქტობრივი მონაცემები მომხმარებელს. მე ჩვეულებრივ ვახვევ მაგიდის გენერაციას ცალკე მეთოდით:
echo $object->getContent();

და მე ვქმნი ცხრილს Smarty-ის გამოყენებით:

(foreach from=$data.header item=caption) ($caption.columnName)(/ foreach)(წინასწარ =$data.content ელემენტი=რიგი) (წინასწარ =$row item=col) ($col)(/ foreach)(/ foreach)

როგორც კოდიდან ხედავთ, $data მასივი გადაეცემა შაბლონს, რომელიც შეიცავს ორ მასივს - ცხრილის სათაურის ხაზს და თავად მონაცემებს.
აღსანიშნავია, რომ შაბლონის ძრავის გამოყენება მხოლოდ XML-ის გენერირებისთვის გარკვეულწილად ძვირია და XML-ის მიღება შესაძლებელია მრავალი სხვა გზით. ჩემს კონკრეტულ შემთხვევაში, XML თაობა მხოლოდ მცირე ბონუსია დიდ პროექტში, სადაც შაბლონის ძრავა შეუცვლელია.

მაგალითად, მე მივეცი მარტივი ცხრილი, თუ სასურველია, შეგიძლიათ ატრიბუტების ბევრად უფრო დიდი რაოდენობით მანიპულირება. ეს განსაკუთრებით სასიამოვნოა იმის გათვალისწინებით, რომ არ არის საჭირო მესამე მხარის ბიბლიოთეკები განსახორციელებლად.
აღწერილი მეთოდი რამდენიმე წელია მუშაობს ერთ პროექტზე და ჯერ არც ერთ მომხმარებელს არ აქვს ეჭვი, რომ მის მიერ გახსნილი მონაცემები არ არის MS Office დოკუმენტი.

შეგიძლიათ მეტი წაიკითხოთ MS Excel-ში გამოყენებული XML სტრუქტურის შესახებ

.
ამ შენიშვნაში წარმოდგენილი მეთოდი მართლაც ძალიან მარტივია, მაგრამ შეიძლება ყოველთვის არ იყოს მოსახერხებელი.
ტაბულური მონაცემების PHP-დან Excel-ში გადატანის მრავალი სხვა გზა არსებობს, მე აღვწერ იმას, რაც მეჩვენებოდა ყველაზე მარტივი და ფუნქციონალური. განსაკუთრებით უნდა აღინიშნოს, რომ მე არ ვსაუბრობ xls ფაილის გენერირებაზე, არამედ მხოლოდ ვთავაზობ, რომ მომხმარებელმა გახსნას მიღებული მონაცემები Excel-ის გამოყენებით, რათა პროგრამირების გამოცდილების მქონე მომხმარებლებმა არ შეამჩნიონ გაყალბება.

ასე რომ, პირველი, რაც უნდა გააკეთოთ, არის ჩვენს გვერდზე განათავსოთ ბმული სკრიპტზე, რომელიც წარმოქმნის შემდეგ სათაურებს:
header ("პრაგმა: საჯარო");
header ("იწურება: 0");
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Cache-Control: private", false);
header ("Content-Type: application/x-msexcel");
header("Content-Disposition: დანართი; ფაილის სახელი=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header ("შინაარსი-გადაცემა-დაშიფვრა: ორობითი");
header("Content-Length: " . $object->getFileSize());

$object არის სფერული ობიექტი ვაკუუმში, რომელიც თითოეულ მკითხველს შეუძლია განახორციელოს როგორც მას სურს. getFileName() და getFileSize() მიმღებების დანიშნულება გასაგებია მათი სახელებიდან. აქ ღირს ერთი არააშკარა ნიუანსის ხაზგასმა (მადლობა savostin-ს, რომ შემახსენა ამის შესახებ) - getFileName()-ს შეუძლია დააბრუნოს ნებისმიერი ფაილის სახელი, მაგრამ თუ გსურთ ბრაუზერმა შესთავაზოს მიღებული შინაარსის გახსნა Excel-ში, მაშინ ფაილი გაფართოება უნდა იყოს xls.
ახალი ჯერ არაფერი მითქვამს, ეს ყველაფერი ჩემამდე იყო გამოგონილი, თუმცა, როგორც ქვემოთ იქნება აღწერილი.
როგორც სწორად აღინიშნა პოსტის კომენტარებში PHP-ში xls თაობის შესახებ, Excel ბევრად უფრო სწრაფად მუშაობს XML-ით. მაგრამ ყველაზე მნიშვნელოვანი უპირატესობა, ალბათ, არ არის სიჩქარე, არამედ ბევრად უფრო ფართო შესაძლებლობები. მე არ ჩავუღრმავდები სარეველებს, მაგრამ უბრალოდ მივცემ მარტივ მაგალითს და ყველა ტეგის დეტალური აღწერილობის ბმულს.

ასე რომ, სათაურების გენერირების შემდეგ, ჩვენ უნდა მივცეთ ფაქტობრივი მონაცემები მომხმარებელს. მე ჩვეულებრივ ვახვევ მაგიდის გენერაციას ცალკე მეთოდით:
echo $object->getContent();

და მე ვქმნი ცხრილს Smarty-ის გამოყენებით:

(foreach from=$data.header item=caption) ($caption.columnName)(/ foreach)(წინასწარ =$data.content ელემენტი=რიგი) (წინასწარ =$row item=col) ($col)(/ foreach)(/ foreach)

როგორც კოდიდან ხედავთ, $data მასივი გადაეცემა შაბლონს, რომელიც შეიცავს ორ მასივს - ცხრილის სათაურის ხაზს და თავად მონაცემებს.
აღსანიშნავია, რომ შაბლონის ძრავის გამოყენება მხოლოდ XML-ის გენერირებისთვის გარკვეულწილად ძვირია და XML-ის მიღება შესაძლებელია მრავალი სხვა გზით. ჩემს კონკრეტულ შემთხვევაში, XML თაობა მხოლოდ მცირე ბონუსია დიდ პროექტში, სადაც შაბლონის ძრავა შეუცვლელია.

მაგალითად, მე მივეცი მარტივი ცხრილი, თუ სასურველია, შეგიძლიათ ატრიბუტების ბევრად უფრო დიდი რაოდენობით მანიპულირება. ეს განსაკუთრებით სასიამოვნოა იმის გათვალისწინებით, რომ არ არის საჭირო მესამე მხარის ბიბლიოთეკები განსახორციელებლად.
აღწერილი მეთოდი რამდენიმე წელია მუშაობს ერთ პროექტზე და ჯერ არც ერთ მომხმარებელს არ აქვს ეჭვი, რომ მის მიერ გახსნილი მონაცემები არ არის MS Office დოკუმენტი.

შეგიძლიათ მეტი წაიკითხოთ MS Excel-ში გამოყენებული XML სტრუქტურის შესახებ



გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: