การอัปโหลดไปยัง Excel จาก mysql php วิธีง่ายๆ ในการถ่ายโอนข้อมูลแบบตารางจาก PHP ไปยัง Excel ส่งออกข้อมูลจาก MySQL ไปยัง Excel ใน PHP
วัตถุ แต่สิ่งต่างๆ จะแตกต่างออกไปหากคุณต้องการสร้างรายงานในรูปแบบ Excel PHP. และเพื่อให้การสร้างสรรค์นี้ดำเนินต่อไป ยูนิกซ์-เหมือนระบบ แต่โชคดีที่ทุกอย่างก็ไม่ได้แย่ขนาดนั้น และมีห้องสมุดเพียงพอสำหรับสิ่งนี้ ฉันเลือก PHPExcel. ฉันทำงานกับห้องสมุดนี้มาสองสามปีแล้ว และฉันก็พอใจ เนื่องจากเป็นแพลตฟอร์มข้ามแพลตฟอร์ม จึงไม่มีปัญหาเรื่องการพกพา
PHPExcel ช่วยให้คุณสามารถนำเข้าและส่งออกข้อมูลไปยัง Excel ใช้สไตล์การออกแบบที่แตกต่างกันกับรายงาน โดยทั่วไปแล้วทุกอย่างเป็นเลิศ มีแม้กระทั่งความสามารถในการทำงานกับสูตร จำเป็นต้องคำนึงว่างานทั้งหมด (การอ่านและการเขียน) จะต้องดำเนินการในการเข้ารหัส utf-8.
การติดตั้งห้องสมุด
ในการทำงาน คุณต้องใช้ PHP เวอร์ชัน 5.2.0 ขึ้นไป จำเป็นต้องมีส่วนขยายต่อไปนี้: php_zip, php_xml และ php_gd2 คุณสามารถดาวน์โหลดห้องสมุดได้จากที่นี่
เมื่อใช้ไลบรารี PHPExcel คุณสามารถเขียนข้อมูลในรูปแบบต่อไปนี้:
- เอ็กเซล 2007;
- Excel 97 และใหม่กว่า;
- PHPExcel สเปรดชีตต่อเนื่อง;
- HTML;
การนำเข้าข้อมูลจาก PHP ไปยัง Excel
ลองดูตัวอย่างการสร้างตารางสูตรคูณ
// เชื่อมต่อคลาสเพื่อทำงานกับ excel need_once("PHPExcel.php"); // เชื่อมต่อคลาสเพื่อส่งออกข้อมูลในรูปแบบ Excel need_once("PHPExcel/Writer/Excel5.php"); // สร้างอ็อบเจ็กต์ของคลาส PHPExcel $xls = new PHPExcel(); // ตั้งค่าดัชนีของแผ่นงานที่ใช้งานอยู่ $xls->setActiveSheetIndex(0); // รับแผ่นงานที่ใช้งานอยู่ $sheet = $xls->getActiveSheet(); // เซ็นชื่อในชีต $sheet->setTitle("ตารางสูตรคูณ"); // ใส่ข้อความลงในเซลล์ A1 $sheet->setCellValue("A1", "Multiplication table"); $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 ("หมดอายุ: จันทร์, 1 เมษายน 1974 05:00:00 GMT"); header("แก้ไขล่าสุด: " . gmdate("D,d M YH:i:s") . " GMT"); header("การควบคุมแคช: ไม่มีแคช, ต้องตรวจสอบใหม่"); header("Pragma: ไม่มีแคช"); header("ประเภทเนื้อหา: application/vnd.ms-excel"); header("การจัดการเนื้อหา: ไฟล์แนบ; 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(จริง)– ที่นี่คอลัมน์ “B” จะมีความกว้างอัตโนมัติ
- $sheet->getRowDimension(4)->setRowHeight(20)– กำหนดความสูงของบรรทัดที่สี่เป็น 20 หน่วย
ให้ความสนใจกับวิธีการต่อไปนี้ที่จำเป็นสำหรับการทำงานกับรายงานด้วย:
- วิธีการแทรกข้อมูลลงในเซลล์:
- ตั้งค่าเซลล์([$pCoordinate = "A1" [, $pValue = null [, $returnCell = false]]]) รับพารามิเตอร์สามตัว: พิกัดของเซลล์ ข้อมูลที่จะส่งออกไปยังเซลล์ และพารามิเตอร์ตัวที่สามเป็นหนึ่งในบูลีน ประเภทค่าคงที่: จริงหรือ เท็จ(หากผ่านค่า จริงจากนั้นเมธอดจะส่งคืนออบเจ็กต์เซลล์ มิฉะนั้นจะเป็นออบเจ็กต์เวิร์กชีต)
- ตั้งค่า CellValueByColumnAndRow([$pColumn = 0 [, $pRow = 1 [, $pValue = null [, $returnCell = false]]]]) รับพารามิเตอร์สี่ตัว ได้แก่ หมายเลขคอลัมน์ของเซลล์ หมายเลขแถวของเซลล์ ข้อมูลที่จะส่งออกไปยัง เซลล์ และพารามิเตอร์ที่สี่นั้นถูกต้องเหมือนกับพารามิเตอร์ที่สามของวิธีการ ตั้งค่าเซลล์().
- วิธีการรับเซลล์:
- รับเซลล์([$pCoordinate = "A1"]) รับพิกัดของเซลล์เป็นพารามิเตอร์
- รับ CellByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) รับพารามิเตอร์สองตัวในรูปแบบของคอลัมน์และหมายเลขแถวของเซลล์
ดังที่เราเห็นวิธีการข้างต้นถูกจับคู่กัน ดังนั้นเราจึงสามารถทำงานกับเซลล์โดยใช้สตริงหรือการแสดงพิกัดเป็นตัวเลข ซึ่งแน่นอนว่าเป็นข้อได้เปรียบเพิ่มเติมในการทำงาน
การสร้างรายงานโดยใช้ PHP ใน Excel
บ่อยครั้งมีความจำเป็นต้องเน้นข้อมูลบางอย่างในรายงาน ไฮไลต์แบบอักษรหรือใช้กรอบเติมพื้นหลังกับบางเซลล์ ฯลฯ วิธีนี้ช่วยให้คุณมุ่งความสนใจไปที่ข้อมูลที่สำคัญที่สุดได้ (ถึงแม้จะสามารถเบี่ยงเบนความสนใจของคุณได้ก็ตาม) เพื่อวัตถุประสงค์เหล่านี้ ไลบรารี PHPExcel มีชุดรูปแบบทั้งหมดที่สามารถนำไปใช้กับเซลล์ใน Excel แน่นอนว่ามี "ลบ" เล็กน้อยในไลบรารีนี้ - คุณไม่สามารถใช้สไตล์กับหลาย ๆ เซลล์ในเวลาเดียวกันได้ แต่จะใช้กับแต่ละเซลล์เท่านั้น แต่สิ่งนี้ไม่ได้สร้างความรู้สึกไม่สบายเมื่อพัฒนาเว็บแอปพลิเคชัน
มีสองวิธีในการกำหนดสไตล์ให้กับเซลล์:
- ใช้วิธีการสมัคร ApplyFromArray, ระดับ PHPExcel_Style.php. ในวิธีการ ApplyFromArrayอาร์เรย์ที่มีพารามิเตอร์ต่อไปนี้จะถูกส่งผ่าน:
- เติม- อาร์เรย์พร้อมพารามิเตอร์การเติม
- แบบอักษร- อาร์เรย์พร้อมพารามิเตอร์แบบอักษร
- เส้นขอบ- อาร์เรย์พร้อมพารามิเตอร์เฟรม
- การจัดตำแหน่ง- อาร์เรย์พร้อมพารามิเตอร์การจัดตำแหน่ง
- รูปแบบตัวเลข- อาร์เรย์พร้อมพารามิเตอร์สำหรับรูปแบบการนำเสนอข้อมูลเซลล์
- การป้องกัน- อาร์เรย์พร้อมพารามิเตอร์การป้องกันเซลล์
- ใช้วิธีเรียน PHPExcel_Style.phpสำหรับแต่ละสไตล์แยกกัน ตัวอย่างเช่น คุณสามารถกำหนดแบบอักษรให้กับเซลล์ดังนี้: $sheet->getStyle("A1")->getFont()->setName("Arial")
เติม
ค่าพารามิเตอร์ เติมเป็นอาร์เรย์ที่มีพารามิเตอร์เผื่อเลือกดังต่อไปนี้:
- พิมพ์- ประเภทการเติม;
- การหมุน- มุมไล่ระดับสี
- สีเริ่มต้น- ค่าในรูปแบบของอาร์เรย์พร้อมพารามิเตอร์สีเริ่มต้นในรูปแบบ RGB
- สีท้าย- ค่าในรูปแบบของอาร์เรย์พร้อมพารามิเตอร์สีสุดท้ายในรูปแบบ ARGB
- สี- ค่าในรูปแบบของอาร์เรย์พร้อมพารามิเตอร์สีเริ่มต้นในรูปแบบ RGB
กรอก_NONE | ไม่มี |
เติม_SOLID | แข็ง |
FILL_GRADIENT_LINEAR | เชิงเส้น |
FILL_GRADIENT_PATH | เส้นทาง |
FILL_PATTERN_DARKDOWN | มืดลง |
FILL_PATTERN_DARKGRAY | สีเทาเข้ม |
FILL_PATTERN_DARKGRID | darkGrid |
FILL_PATTERN_DARKHORIZONTAL | มืดแนวนอน |
FILL_PATTERN_DARKTRELLIS | ไม้เลื้อยสีเข้ม |
FILL_PATTERN_DARKUP | ดาร์กอัพ |
FILL_PATTERN_DARKVERTICAL | แนวตั้งสีเข้ม |
FILL_PATTERN_GRAY0625 | สีเทา0625 |
FILL_PATTERN_GRAY125 | สีเทา125 |
FILL_PATTERN_LIGHTDOWN | เบาลง |
FILL_PATTERN_LIGHTGRAY | แสงสีเทา |
FILL_PATTERN_LIGHTGRID | lightGrid |
FILL_PATTERN_LIGHTแนวนอน | เบาแนวนอน |
FILL_PATTERN_LIGHTTRELLIS | 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 "), "สี" => array("rgb" => "000000"));
หรือคุณสามารถใช้วิธีการต่อไปนี้:
$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"))
การแทรกรูปภาพ
ค่อนข้างน้อย แต่การแทรกรูปภาพลงในรายงานอาจมีประโยชน์ นี่อาจเป็นโลโก้ ไดอะแกรม ฯลฯ ในการทำงานเราจะต้องมีวิธีการดังต่อไปนี้:
- กำหนดเส้นทาง([$pValue = "", [$pVerifyFile = จริง]]) เมธอดนี้รับพารามิเตอร์สองตัว พารามิเตอร์แรกระบุเส้นทางไปยังไฟล์รูปภาพ และควรระบุพารามิเตอร์ตัวที่สองหากจำเป็นต้องตรวจสอบการมีอยู่ของไฟล์ (สามารถใช้ค่าใดค่าหนึ่งได้ จริงหรือ เท็จ).
- กำหนดพิกัด([$pValue = "A1"])) принимает на вход один параметр в виде строки с координатой ячейки.!}
- setOffsetX([$pValue = 0]) รับหนึ่งพารามิเตอร์ที่มีค่าออฟเซ็ต X จากขอบด้านซ้ายของเซลล์
- ตั้งค่าออฟเซ็ตY([$pValue = 0]) รับหนึ่งพารามิเตอร์ที่มีค่าออฟเซ็ต Y จากขอบด้านบนของเซลล์
- ชุดแผ่นงาน([$pValue = โมฆะ, [$pOverrideเก่า = เท็จ]]) เมธอดนี้รับพารามิเตอร์สองตัวเป็นอินพุต อันแรกเป็นข้อบังคับ อันที่สองไม่ใช่ พารามิเตอร์แรกคืออินสแตนซ์ของวัตถุแผ่นงานที่ใช้งานอยู่ หากคุณส่งผ่านเป็นค่าของพารามิเตอร์ตัวที่สอง จริงจากนั้นหากกำหนดแผ่นงานไว้ก่อนหน้านี้ แผ่นงานนั้นจะถูกเขียนทับ และรูปภาพจะถูกลบตามไปด้วย
รหัสที่สาธิตอัลกอริทึมสำหรับการแทรกรูปภาพได้รับด้านล่าง:
... $sheet->getColumnDimension("B")->setWidth(40); $imagePath = dirname(__FILE__) . "/excel.png"; if (file_exists($imagePath)) ( $logo = new PHPExcel_Worksheet_ Drawing(); $logo->setPath($imagePath); $logo->setCoordinates("B2"); $logo->setOffsetX(0); $logo- >setOffsetY(0); $sheet->getRowDimension(2)->setRowHeight(190); $logo->setWorksheet($sheet); ) ...
นี่คือลักษณะของรายงานที่มีการแทรกรูปภาพ:
แบบอักษร
แบบอักษรอาร์เรย์ถูกระบุซึ่งมีพารามิเตอร์ทางเลือกต่อไปนี้:
- ชื่อ- ชื่อแบบอักษร;
- ขนาด- ขนาดตัวอักษร;
- ตัวหนา- เน้นด้วยตัวหนา;
- ตัวเอียง- ใส่เป็นตัวเอียง;
- ขีดเส้นใต้- สไตล์การขีดเส้นใต้;
- โจมตี- ข้ามออก;
- ซุปเปอร์สคริปต์- ตัวยก;
- สคริปต์ย่อย- ตัวห้อย;
- สี
ขีดล่าง_NONE | เลขที่ |
อันเดอร์ไลน์_ดับเบิ้ล | ขีดเส้นใต้คู่ |
ใต้บรรทัด_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(จริง);
$PHPExcel_Style->getFont()->setItalic(เท็จ);
$PHPExcel_Style->getFont()->setSuperScript(เท็จ);
$PHPExcel_Style->getFont()->setSubScript(เท็จ);
$PHPExcel_Style->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE);
$PHPExcel_Style->getFont()->setStrikethrough(เท็จ);
$PHPExcel_Style->getFont()->getColor()->applyFromArray(array("rgb" => "808080"));
$PHPExcel_Style->getFont()->setSize(12)
กรอบ
เป็นค่าพารามิเตอร์ เส้นขอบอาร์เรย์ถูกระบุซึ่งมีพารามิเตอร์ทางเลือกต่อไปนี้:
- ประเภทเฟรม- (บน|บูทอม|ซ้าย|ขวา|แนวทแยง|ทิศทางแนวทแยง);
- สไตล์- สไตล์เฟรม;
- สี- ค่าในรูปแบบของอาร์เรย์พร้อมพารามิเตอร์สีในรูปแบบ RGB
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")));
คุณยังสามารถใช้วิธีการต่อไปนี้:
$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')))
การจัดตำแหน่ง
ค่าพารามิเตอร์ การจัดตำแหน่งเป็นอาร์เรย์ที่รับพารามิเตอร์ทางเลือกสี่ตัวเป็นอินพุต:
- แนวนอน- ค่าคงที่การจัดตำแหน่งแนวนอน
- แนวตั้ง- ค่าคงที่การจัดตำแหน่งแนวตั้ง
- การหมุน- มุมการหมุนข้อความ
- ห่อ- อนุญาตให้มีการตัดข้อความ
- ShrinkToFit- จะเปลี่ยนขนาดตัวอักษรเมื่อข้อความเกินพื้นที่เซลล์หรือไม่
- เยื้อง- รอยเยื้องจากขอบด้านซ้าย
VERTICAL_BOTTOM | ตามขอบด้านล่าง |
แนวตั้ง_TOP | ตามขอบด้านบน |
แนวตั้ง_CENTER | อยู่ตรงกลาง |
แนวตั้ง_จัดชิดขอบ | ในความสูง |
$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(จริง);
$PHPExcel_Style->getAlignment()->setShrinkToFit(เท็จ);
$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 | ปปปป-mm-dd |
FORMAT_DATE_YYYYMMDD | ปปป-ดด-วว |
FORMAT_DATE_DDMMYYYY | วว/ดด/ปปป |
FORMAT_DATE_DMYSLASH | วัน/เดือน/ปี |
FORMAT_DATE_DMYMINUS | d-m-y |
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 | ชม.:นาที:ss AM/PM |
FORMAT_DATE_TIME3 | อืม |
FORMAT_DATE_TIME4 | ชม:นาที:สส |
FORMAT_DATE_TIME5 | มม.:เอส |
FORMAT_DATE_TIME6 | ชม:นาที:สส |
FORMAT_DATE_TIME7 | ฉัน:s.S |
FORMAT_DATE_TIME8 | ชม:นาที:สส |
FORMAT_DATE_YYYYMMDDSLASH | ปปป/ดด/วว; @ |
FORMAT_CURRENCY_USD_SIMPLE | "$"#,##0.00_-;@ |
FORMAT_CURRENCY_USD | $#,##0_- |
FORMAT_CURRENCY_EUR_SIMPLE | [$ยูโร ]#,##0.00_- |
หรือคุณสามารถใช้วิธีการ:
$PHPExcel_Style->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
การป้องกันเซลล์
เป็นค่าพารามิเตอร์ การป้องกันทำหน้าที่เป็นอาร์เรย์ที่มีพารามิเตอร์ทางเลือกสองตัว:
- ล็อค- ปกป้องเซลล์
- ที่ซ่อนอยู่- ซ่อนสูตร
array("locked" => true, "hidden" => false);
หรือใช้วิธีการดังต่อไปนี้:
$PHPExcel_Style->getProtection()->setLocked(จริง);
$PHPExcel_Style->getProtection()->setHidden(เท็จ);
ตอนนี้เรารู้แล้วว่าการตั้งค่าสไตล์มีอะไรบ้าง และแต่ละสไตล์มีพารามิเตอร์อะไรบ้าง ตอนนี้เราจะใช้สไตล์การออกแบบกับเซลล์ตาราง แต่เราจะทำสิ่งนี้โดยใช้สองวิธี วิธีแรกคือการสร้างอาร์เรย์ของการตั้งค่า ซึ่งเราจะส่งผ่านเป็นพารามิเตอร์ไปยังวิธีการนั้น ApplyFromArray, ระดับ PHPExcel_Style.php.
$style = array("font" => array("name" => "Arial"),), "fill" => array("type" => PHPExcel_Style_Fill::FILL_SOLID, "color" => array ("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(array("rgb" => "C2FABD"));
นี่คือสิ่งที่เราได้รับ:
หากคุณต้องการใช้สไตล์หลายครั้ง วิธีแรกจะดีกว่า มิฉะนั้น ควรใช้วิธีที่สองจะดีกว่า เพื่อรับวัตถุ (คลาส instance PHPExcel_Style.php) เซลล์ที่รับผิดชอบสไตล์ คุณต้องใช้วิธีใดวิธีหนึ่งต่อไปนี้:
- getStyleByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) – ใช้หากคุณต้องการอ้างอิงเซลล์ด้วยพิกัดตัวเลข วิธีการจะต้องส่งผ่านพารามิเตอร์สองตัวในรูปแบบของคอลัมน์และหมายเลขแถวของเซลล์
- getStyle() - ใช้เพื่อเข้าถึงพิกัดสตริงของเซลล์ วิธีการนี้ต้องส่งผ่านพารามิเตอร์ตัวเดียว ซึ่งเป็นการแสดงสตริงของพิกัด
การเพิ่มความคิดเห็น
ฉันคิดว่าไม่บ่อยนักที่บางคนจะใช้โอกาสในการเพิ่มความคิดเห็นลงในเซลล์ แต่นี่เป็นความเห็นส่วนตัวของฉันล้วนๆ แต่มีโอกาสเช่นนี้อยู่ การเพิ่มความคิดเห็นลงในเซลล์นั้นค่อนข้างง่าย ดังที่คุณเห็นในตัวอย่างด้านล่าง:
... // รูปแบบตัวอักษร $fBold = array("name" => "Tahoma", "size" => 10, "bold" => true); $fNormal = array("name" => "Tahoma", "size" => 10); $richText = $sheet->getComment("B2")->getText(); $richText->createTextRun("Lorem ipsum")->getFont()-> ApplyFromArray($fNormal); $richText->createTextRun("นั่งเฉยๆ")->getFont()->applyFromArray($fBold); $richText->createTextRun(" amet consectetuer")->getFont()-> ApplyFromArray($fNormal); // ความกว้างของช่องแสดงความคิดเห็น $sheet->getComment("B2")->setWidth("250"); // ความสูงของช่องแสดงความคิดเห็น $sheet->getComment("B2")->setHeight("25"); ...
ควรสังเกตว่าเมื่อเรียกใช้วิธีการอีกครั้ง createTextRun()ความคิดเห็นใหม่จะถูกเพิ่มลงในความคิดเห็นที่มีอยู่ แทนที่จะแทนที่ ควรสังเกตว่าวิธีนี้ส่งคืนออบเจ็กต์ของคลาส PHPExcel_RichText_Run ซึ่งมีวิธีการตั้งค่าและรับพารามิเตอร์แบบอักษร:
- รับแบบอักษร() – ส่งคืนวัตถุคลาสสำหรับการทำงานกับแบบอักษร PHPExcel_Style_Font
- setFont([$pแบบอักษร = โมฆะ]))]) – วิธีการนี้ต้องส่งวัตถุของคลาส PHPExcel_Style_Font เป็นพารามิเตอร์
นั่นคือความคิดเห็นที่เราควรจะได้รับ
สำหรับหลาย ๆ คนเมื่อต้องทำงานด้วย PHP ร่วมกับ MySQLมีความจำเป็นเช่นการส่งออกข้อมูลจากฐานข้อมูลเป็นรูปแบบ xls เพื่อให้ผู้ที่ต้องการข้อมูลนี้ประมวลผลใน Excel หรือสะดวกสำหรับผู้ใช้ในการดูข้อมูลนี้ เมื่อเร็วๆ นี้ ข้าพเจ้ามีความต้องการเช่นนี้ และวันนี้ข้าพเจ้าจะเล่าให้ฟังว่าเรื่องนี้จะปฏิบัติได้อย่างไร
ฉันจะบอกทันทีว่าวิธีนี้ค่อนข้างง่าย แต่ข้อมูลจะถูกอัปโหลดตามปกติ
ขั้นแรก ฉันจะยกตัวอย่างไฟล์ xls สุดท้าย ใน Excel การอัปโหลดจะมีลักษณะดังนี้:
กล่าวอีกนัยหนึ่ง จะไม่มีการอัปโหลดรูปภาพหรือสไตล์ มีเพียงส่วนหัวของคอลัมน์และข้อมูลเท่านั้น
ก่อนที่ฉันจะมาถึงตัวเลือกในการอัปโหลดนี้ฉันพยายามอัปโหลดในรูปแบบ CSV แต่มันดูงุ่มง่ามเล็กน้อยจากนั้นฉันก็พยายามวาดตารางและบันทึกด้วยส่วนขยาย xls มันก็กลายเป็นเรื่องไร้สาระเช่นกัน วิธีที่ฉันจะอธิบายตอนนี้เหมาะกับฉันอย่างยิ่ง และตอนนี้ฉันจะแบ่งปันกับคุณ
ขั้นแรกฉันจะให้โค้ดทั้งหมดที่ฉันแสดงความคิดเห็นให้มากที่สุดเท่าที่จะเป็นไปได้ คุณสามารถเลือกและบันทึกด้วยส่วนขยาย php แล้วลอง เพียงอย่าลืมระบุการตั้งค่าสำหรับการเชื่อมต่อกับฐานข้อมูล
ส่งออกข้อมูลจาก MySQL ไปยัง Excel ใน PHP
และเพื่อให้คุณเข้าใจว่าฉันกำลังอัพโหลดข้อมูลใด ฉันจะยกตัวอย่างตารางง่ายๆ ในฐานข้อมูล ( ฉันมีการทดสอบชื่อของมัน):
ตารางทดสอบ:
รหัส | ชื่อจริง | ชื่อ |
1 | อีวานอฟ | อีวาน |
2 | เปตรอฟ | ปีเตอร์ |
2 | เปตรอฟ2 | ปีเตอร์2 |
แนวคิดทั้งหมดที่นี่คือฟังก์ชัน หีบห่อ()ซึ่งแพ็คข้อมูลลงในสตริงไบนารี และในทางกลับกัน เราก็เติมสตริงนี้ด้วยข้อมูลที่เราดาวน์โหลดจากฐานข้อมูลตามลำดับ MySqlโดยใช้ฟังก์ชันปกติ mysql_query().
เพื่อตรวจสอบการทำงานของโค้ดนี้ โดยคำนึงถึงข้อเท็จจริงที่ว่าคุณได้กำหนดค่าการเชื่อมต่อกับฐานข้อมูลและสร้างตารางที่คล้ายกัน คุณสามารถส่งคำขอต่อไปนี้:
http://your_site/file_name. php?id=2
และคุณควรยกเลิกการโหลดสองบรรทัดโดยมี id เท่ากับ 2
และตอนนี้ใครก็ตามที่คุณอนุญาตให้อัปโหลดข้อมูลสามารถส่งออกข้อมูลไปยังคอมพิวเตอร์ของตนผ่านทางเว็บอินเทอร์เฟซได้อย่างง่ายดาย วิธีนี้สะดวกทั้งสำหรับผู้ใช้ในองค์กร หากคุณกำลังพัฒนาแอปพลิเคชันสำหรับองค์กรของคุณและสำหรับผู้ใช้เว็บไซต์ของคุณบนอินเทอร์เน็ต ฉันหวังว่าวิธีนี้จะช่วยคุณได้ ขอให้โชคดี!
.
วิธีการที่นำเสนอในบันทึกนั้นง่ายมาก แต่ก็อาจไม่สะดวกเสมอไป
มีวิธีอื่นอีกมากมายในการถ่ายโอนข้อมูลแบบตารางจาก PHP ไปยัง Excel ฉันจะอธิบายวิธีที่ดูเหมือนง่ายและใช้งานได้ดีที่สุดสำหรับฉัน ควรสังเกตเป็นพิเศษว่าฉันไม่ได้พูดถึงการสร้างไฟล์ xls แต่เพียงแนะนำให้ผู้ใช้เปิดข้อมูลที่ได้รับโดยใช้ Excel เพื่อให้ผู้ใช้ที่ไม่มีประสบการณ์ในการเขียนโปรแกรมจะไม่สังเกตเห็นการปลอมแปลง
ดังนั้น สิ่งแรกที่คุณต้องทำคือวางลิงก์ไปยังสคริปต์ที่สร้างส่วนหัวต่อไปนี้บนหน้าเว็บของเรา:
header("Pragma: สาธารณะ");
ส่วนหัว ("หมดอายุ: 0");
header("การควบคุมแคช: ต้องตรวจสอบใหม่, หลังตรวจสอบ = 0, ตรวจสอบล่วงหน้า = 0");
header("การควบคุมแคช: ส่วนตัว", false);
header("ประเภทเนื้อหา: application/x-msexcel");
header("การจัดการเนื้อหา: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
ส่วนหัว ("การเข้ารหัสเนื้อหาการถ่ายโอน: ไบนารี");
header("ความยาวเนื้อหา: " . $object->getFileSize());
$object เป็นวัตถุทรงกลมในสุญญากาศ ซึ่งผู้อ่านแต่ละคนสามารถนำไปใช้ได้ตามต้องการ วัตถุประสงค์ของ getters getFileName() และ getFileSize() นั้นชัดเจนจากชื่อของพวกเขา คุ้มค่าที่จะเน้นความแตกต่างที่ไม่ชัดเจนที่นี่ (ขอบคุณที่เตือนฉันเกี่ยวกับสิ่งนี้) - getFileName() สามารถส่งคืนชื่อไฟล์ใด ๆ ได้ แต่ถ้าคุณต้องการให้เบราว์เซอร์เสนอให้เปิดเนื้อหาที่ได้รับใน Excel นามสกุลไฟล์ควร เป็น xls
ฉันยังไม่ได้พูดอะไรใหม่เลย แต่ทั้งหมดนี้ถูกประดิษฐ์ขึ้นต่อหน้าฉันเช่นเดียวกับที่จะอธิบายด้านล่าง
ตามที่ระบุไว้อย่างถูกต้องในความคิดเห็นของบทความ Excel ทำงานกับ XML ได้เร็วขึ้นมาก แต่ข้อได้เปรียบที่สำคัญที่สุดอาจไม่ใช่ความเร็ว แต่เป็นความสามารถที่กว้างกว่ามาก ฉันจะไม่เจาะลึกลงไปในวัชพืช แต่จะยกตัวอย่างง่ายๆ และลิงก์ไปยังคำอธิบายโดยละเอียดของแท็กทั้งหมด
ดังนั้นหลังจากสร้างส่วนหัวแล้ว เราจำเป็นต้องให้ข้อมูลจริงแก่ผู้ใช้ ฉันมักจะสรุปการสร้างตารางด้วยวิธีแยกต่างหาก:
เสียงสะท้อน $object->getContent();
และฉันสร้างตารางโดยใช้ Smarty:
ดังที่คุณเห็นจากโค้ด อาร์เรย์ $data จะถูกส่งผ่านไปยังเทมเพลต ซึ่งมีอาร์เรย์สองตัว ได้แก่ บรรทัดหัวเรื่องของตารางและข้อมูลเอง
เป็นที่น่าสังเกตว่าการใช้เอ็นจิ้นเทมเพลตเพื่อสร้าง XML เท่านั้นนั้นค่อนข้างแพง และสามารถรับ XML ได้ด้วยวิธีอื่น ๆ มากมาย ในกรณีเฉพาะของฉัน การสร้าง XML เป็นเพียงโบนัสเล็กๆ น้อยๆ ในโปรเจ็กต์ขนาดใหญ่ที่เครื่องมือเทมเพลตเป็นสิ่งที่ขาดไม่ได้
ตัวอย่างเช่น ฉันให้ตารางง่ายๆ หากต้องการ คุณสามารถจัดการแอตทริบิวต์จำนวนมากขึ้นได้ นี่เป็นสิ่งที่ดีอย่างยิ่งเมื่อพิจารณาว่าไม่จำเป็นต้องมีไลบรารีของบุคคลที่สามในการดำเนินการ
วิธีการที่อธิบายไว้นี้ทำงานในโปรเจ็กต์เดียวมาหลายปีแล้วและไม่มีผู้ใช้รายเดียวที่สงสัยว่าข้อมูลที่เขาเปิดไม่ใช่เอกสาร MS Office
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับโครงสร้าง XML ที่ใช้ใน MS Excel ได้
.
วิธีการที่นำเสนอในบันทึกนั้นง่ายมาก แต่ก็อาจไม่สะดวกเสมอไป
มีวิธีอื่นอีกมากมายในการถ่ายโอนข้อมูลแบบตารางจาก PHP ไปยัง Excel ฉันจะอธิบายวิธีที่ดูเหมือนง่ายและใช้งานได้ดีที่สุดสำหรับฉัน ควรสังเกตเป็นพิเศษว่าฉันไม่ได้พูดถึงการสร้างไฟล์ xls แต่เพียงแนะนำให้ผู้ใช้เปิดข้อมูลที่ได้รับโดยใช้ Excel เพื่อให้ผู้ใช้ที่ไม่มีประสบการณ์ในการเขียนโปรแกรมจะไม่สังเกตเห็นการปลอมแปลง
ดังนั้น สิ่งแรกที่คุณต้องทำคือวางลิงก์ไปยังสคริปต์ที่สร้างส่วนหัวต่อไปนี้บนหน้าเว็บของเรา:
header("Pragma: สาธารณะ");
ส่วนหัว ("หมดอายุ: 0");
header("การควบคุมแคช: ต้องตรวจสอบใหม่, หลังตรวจสอบ = 0, ตรวจสอบล่วงหน้า = 0");
header("การควบคุมแคช: ส่วนตัว", false);
header("ประเภทเนื้อหา: application/x-msexcel");
header("การจัดการเนื้อหา: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
ส่วนหัว ("การเข้ารหัสเนื้อหาการถ่ายโอน: ไบนารี");
header("ความยาวเนื้อหา: " . $object->getFileSize());
$object เป็นวัตถุทรงกลมในสุญญากาศ ซึ่งผู้อ่านแต่ละคนสามารถนำไปใช้ได้ตามต้องการ วัตถุประสงค์ของ getters getFileName() และ getFileSize() นั้นชัดเจนจากชื่อของพวกเขา คุ้มค่าที่จะเน้นความแตกต่างที่ไม่ชัดเจนที่นี่ (ขอบคุณ savostin ที่เตือนฉันเกี่ยวกับสิ่งนี้) - getFileName() สามารถส่งคืนชื่อไฟล์ใด ๆ ได้แน่นอน แต่ถ้าคุณต้องการให้เบราว์เซอร์เสนอให้เปิดเนื้อหาที่ได้รับใน Excel ไฟล์นั้น นามสกุลควรเป็น xls
ฉันยังไม่ได้พูดอะไรใหม่เลย แต่ทั้งหมดนี้ถูกประดิษฐ์ขึ้นต่อหน้าฉันเช่นเดียวกับที่จะอธิบายด้านล่าง
ตามที่ระบุไว้อย่างถูกต้องในความคิดเห็นในโพสต์เกี่ยวกับการสร้าง xls ใน PHP นั้น Excel ทำงานกับ XML ได้เร็วขึ้นมาก แต่ข้อได้เปรียบที่สำคัญที่สุดอาจไม่ใช่ความเร็ว แต่เป็นความสามารถที่กว้างกว่ามาก ฉันจะไม่เจาะลึกลงไปในวัชพืช แต่จะยกตัวอย่างง่ายๆ และลิงก์ไปยังคำอธิบายโดยละเอียดของแท็กทั้งหมด
ดังนั้นหลังจากสร้างส่วนหัวแล้ว เราจำเป็นต้องให้ข้อมูลจริงแก่ผู้ใช้ ฉันมักจะสรุปการสร้างตารางด้วยวิธีแยกต่างหาก:
เสียงสะท้อน $object->getContent();
และฉันสร้างตารางโดยใช้ Smarty:
ดังที่คุณเห็นจากโค้ด อาร์เรย์ $data จะถูกส่งผ่านไปยังเทมเพลต ซึ่งมีอาร์เรย์สองตัว ได้แก่ บรรทัดหัวเรื่องของตารางและข้อมูลเอง
เป็นที่น่าสังเกตว่าการใช้เอ็นจิ้นเทมเพลตเพื่อสร้าง XML เท่านั้นนั้นค่อนข้างแพง และสามารถรับ XML ได้ด้วยวิธีอื่น ๆ มากมาย ในกรณีเฉพาะของฉัน การสร้าง XML เป็นเพียงโบนัสเล็กๆ น้อยๆ ในโปรเจ็กต์ขนาดใหญ่ที่เครื่องมือเทมเพลตเป็นสิ่งที่ขาดไม่ได้
ตัวอย่างเช่น ฉันให้ตารางง่ายๆ หากต้องการ คุณสามารถจัดการแอตทริบิวต์จำนวนมากขึ้นได้ นี่เป็นสิ่งที่ดีอย่างยิ่งเมื่อพิจารณาว่าไม่จำเป็นต้องมีไลบรารีของบุคคลที่สามในการดำเนินการ
วิธีการที่อธิบายไว้นี้ทำงานในโปรเจ็กต์เดียวมาหลายปีแล้วและไม่มีผู้ใช้รายเดียวที่สงสัยว่าข้อมูลที่เขาเปิดไม่ใช่เอกสาร MS Office
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับโครงสร้าง XML ที่ใช้ใน MS Excel ได้