เนื้อหาต่อไปนี้ จะมาดูเกี่ยวกับ การจัดการต่างๆ เกี่ยวกับการพิมพ์
สำหรับเอกสารไฟล์ excel เช่น การตั้งค่าหน้ากระดาษ การกำหนดขนาดเอกสาร
เหล่านี้ เป็นต้น
1. การตั้งหน้ากระดาษและขนาดเอกสาร
เราสามารถกำหนดการตั้งหน้ากระดาษในแนวตั้ง หรือแนวแนอน ด้วยคำสั่ง setOrientation() และกำหนดขนาดเอกสารหรือกระดาษ
ด้วยคำสั่ง setPaperSize() การกำหนดขนาดเอกสารก็เช่น ขนาด A4, A5, Letter เป็นต้น
1 2 3 4 5 6 7 8 | // ดูตัวแปรค่าคงที่อื่นๆ เพิ่มเติมได้ที่ // https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Worksheet/PageSetup.html // กำหนดการตั้งหน้ากระดาษ แนวตั้ง ORIENTATION_PORTRAIT / แนวนอน ORIENTATION_LANDSCAPE $sheet ->getPageSetup() ->setOrientation(PhpOfficePhpSpreadsheetWorksheetPageSetup::ORIENTATION_LANDSCAPE); // การกำหนดขนาดกระดาษ $sheet ->getPageSetup() ->setPaperSize(PhpOfficePhpSpreadsheetWorksheetPageSetup::PAPERSIZE_A4); |

2. การกำหนดมาตราส่วนการพิมพ์
การกำหนด scale ในการพิมพ์เราสามารถใช้คำสั่งต่างๆ ดังนี้
1 2 3 4 5 6 | // กรณีกำหนดเป็น % ค่าเริ่มต้นคือ 100 //$sheet->getPageSetup()->setScale(50); // กรณีกับเป็นความกว้างเนื้อหา x หน้า ที่แสดงต่อความสูงเต็ม y หน้า $sheet ->getPageSetup()->setFitToWidth(1); $sheet ->getPageSetup()->setFitToHeight(0); |
แสดง 100% ต่อขนาดความกว้างของหน้ากระดาษ หรือก็คือแสดงในมาตราส่วนปกติ แต่ถ้าหากเรากำหนดเป็น 50
นั้นหมายความว่า ส่วนของเนื้อหา จะถูกย่อขนาดลงในสัดส่วนความกว้างที่ลดลงเหลือ 50%
ตัวอย่างผลลัพธ์

ส่วนกรณีใช้การกำหนดแบบ setFitTo นั้น ค่าเริ่มต้น หรือค่าที่แสดงปกติ คือ setFitToWidth(1) และ setFitToHeight(0)
ความหมายคือให้สัดส่วนความกว้างเนื้อหาเท่ากับความกว้างปกติใน 1 หน้า และแสดงโดยไม่มีการบีบให้เต็มพื้นที่ตามความสูง
เราลองปรับค่าเป็น 1 กับ 1 จะได้เป็น
1 2 | $sheet ->getPageSetup()->setFitToWidth(1); $sheet ->getPageSetup()->setFitToHeight(1); |

3. การจัดกึ่งกลางกะะดาษแนวตั้ง และแนวนอน
1 2 | $sheet ->getPageSetup()->setHorizontalCentered(true); // จัดกึ่งกลางข้อมูลตรงกลางในแนวนอน / true | false $sheet ->getPageSetup()->setVerticalCentered(false); // จัดกึ่งกลางข้อมูลตรงกลางในแนวตั้ง / true | false |



4. การกำหนด Margins
เราสามารถกำหนด margin ของและด้าน รวมถึง margin ของ header และ footer ด้วยคำสั่ง ดังนี้
1 2 3 4 5 6 7 | $sheet ->getPageMargins()->setTop(0.75); $sheet ->getPageMargins()->setBottom(0.75); $sheet ->getPageMargins()->setLeft(0.7); $sheet ->getPageMargins()->setRight(0.7); $sheet ->getPageMargins()->setHeader(0.3); $sheet ->getPageMargins()->setFooter(0.3); |

5. การกำหนด Header และ Footer
เราสามารถจัดการส่วนของ Header และ Footer ได้ใช้คำสั่ง ดังนี้
1 2 3 4 | $sheet ->getHeaderFooter() ->setOddHeader( '&C&H&KFF0000&"tahoma,Bold"&16รายชื่อจังหวัดในประเทศไทย' ); $sheet ->getHeaderFooter() ->setOddFooter( '&L&B' . $spreadsheet ->getProperties()->getTitle() . '&Rหน้า &P จาก &N' ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | &L กำหนดข้อความชิดซ้าย &P กำหนดหน้า ปัจจุบัน &N กำหนดจำนวนหน้าทั้งหมด &font size กำหนดขนาดตัวอักษร หน่วย point ตัวอย่าง &16 &K กำหนดสีข้อความ ตัวอย่างสีแดง &KFF0000 &S กำหนดเส้นขีดฆ่าข้อความ &X กำหนดอักษรตัวยก &Y กำหนดอักษรตัวห้อย &C กำหนดข้อความแสดงตรงกลาง &D กำหนดวันที่ &T กำหนดเวลา &G กำหนดรูปเป็นพื้นหลัง &U กำหนดขีดเส้นใต้ข้อความ &E กำหนดขีดเส้นใต้ข้อความสองเส้น &R กำหนดข้อความชิดขวา &Z กำหนด path ที่อยู่ของไฟล์ excel &F กำหนดชื่อไฟล์ excel &A กำหนดชื่อแผ่นงาน &+ กำหนดบวกค่าเลขหน้าเพิ่ม ตัวอย่าง &P+1 &- กำหนดลบค่าเลขหน้าลง ตัวอย่าง &P-1 &"font name,font type" กำหนดชื่อฟอนท์ และชนิดของฟอนท์ ตัวอย่าง &"tahoma,Bold" &"-,Bold" กำหนดตัวอักษรตัวหนา &B กำหนดตัวอักษรตัวหนา &"-,Regular" กำหนดตัวอักษรปกติ &"-,Italic" กำหรดตัวอักษรตัวเอียง &I กำหนดตัวอักษรตัวเอียง &"-,Bold Italic" กำหนดตัวอักษรตัวหนา และเอียง &O กำหนดเส้นขอบนอก &H กำหนดการมีเงา |
ตัวอย่างผลลัพธ์

เปรียบเทียบกับหน้าจัดการใน Excel

การกำหนด Header และ Footer แยกหน้าคู่ หน้าคี่
การกำหนด Header และ Footer ในตัวอย่างข้างต้น เป็นการกำหนดที่มีผลเหมือนกันในทุกๆ หน้า แต่เราสามารถกำหนดให้สามารถมีรูปแบบ
แตกต่างกันได้ระหว่างหน้าคู่ และหน้าคี่ โดยเพิ่มคำสั่งให้มีการใช้งาน ใช้รูปแบบที่แตกต่างกันระห่างหน้าคู่และหน้าคี่ จากนั้นก็กำหนดส่วน
ของหน้าคู่เพิ่มเข้าไป ตามรูปแบบคำสั่งดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // ใช้งานการกำหนดรูปแบบต่างกัน ระหว่างหน้าคู่ และหน้าคี่ $sheet ->getHeaderFooter()->setDifferentOddEven(true); // true | false // กำหนดรปแบบสำหรับหน้าคี่ ด้วยคำสั่ง setOddHeader() และ setOddFooter() $sheet ->getHeaderFooter() ->setOddHeader( '&C&H&KFF0000&"tahoma,Bold"&16รายชื่อจังหวัดในประเทศไทย' ); $sheet ->getHeaderFooter() ->setOddFooter( '&L&B' . $spreadsheet ->getProperties()->getTitle() . '&Rหน้า &P จาก &N' ); // เพิ่มรูปแบบสำหรับหน้าคู่ ด้วยคำสั่ง setEvenHeader() และ setEvenFooter() $sheet ->getHeaderFooter() ->setEvenHeader( '&C&H&KFF0000&"tahoma,Bold"&16รายชื่อจังหวัดในประเทศไทย หน้าคู่' ); $sheet ->getHeaderFooter() ->setEvenFooter( '&L&B หน้าคู่ ' . $spreadsheet ->getProperties()->getTitle() . '&Rหน้า &P จาก &N' ); |
1 2 3 4 5 6 7 8 | // ใช้งานการกำหนดรูปแบบที่แตกต่าง เฉพาะหน้าแรก $sheet ->getHeaderFooter()->setDifferentFirst(true); // กำหนดรปแบบสำหรับหน้าแรก ด้วยคำสั่ง setFirstHeader() และ setFirstFooter() $sheet ->getHeaderFooter() ->setFirstHeader( '&C&H&K3F48CC&"tahoma,Bold"&16รายชื่อจังหวัดในประเทศไทย หน้าแรก' ); $sheet ->getHeaderFooter() ->setFirstFooter( '&L&B หน้าแรก' . $spreadsheet ->getProperties()->getTitle() . '&Rหน้า &P จาก &N' ); |
จากที่ลองทดสอบพบว่า การเพิ่มรูปจะใช้การกำหนด้วยรหัส &G เข้าไปในตำแหน่งที่ต้องการ การแทรกรูปจะแทรกได้ตำแหน่งละ 1
ซึ่งจะมีทั้งหมด 6 ตำแหน่ง ได้แก่
1 2 3 4 5 6 | IMAGE_HEADER_LEFT IMAGE_HEADER_CENTER IMAGE_HEADER_RIGHT IMAGE_FOOTER_LEFT IMAGE_FOOTER_CENTER IMAGE_FOOTER_RIGHT |
1 2 3 4 5 6 7 | // สร้างรูปสำหรับใช้งานใน Header และ Footer $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing ->setName( 'footer background2' ); // กำหนดชื่อ $drawing ->setPath( './images/footer-background2.png' ); // กำหนด path ของไฟล์ $drawing ->setHeight(36); // กำหนดความสูง // ดูคำสั่งสำหรับปรับรูปเพิ่มเติม |
1 2 3 4 | // ส่วนสำหรับการเพิ่มรูป เราจะต้องระบุตำแหน่งที่จะใช้งานลงไปด้วย ในที่นี้เป็น IMAGE_FOOTER_LEFT // เวลานำไปใช้ เราต้องไปใช้ในส่วนของ Footer ด้านซ้าย แนวทางการนำไปกำหนด เช่น ถ้าไว้ด้านหน้าสุดของล่างซ้าย เป็น &L&G $sheet ->getHeaderFooter() ->addImage( $drawing , \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_FOOTER_LEFT); |
1 2 3 | // กำหนดรปแบบสำหรับหน้าคี่ ด้วยคำสั่ง setOddHeader() และ setOddFooter() $sheet ->getHeaderFooter() ->setOddFooter( '&L&G&B' . $spreadsheet ->getProperties()->getTitle() . 'ดีมาก&Rหน้า &P จาก &N' ); |
จะรองรับเฉพาะคำสั่ง setOddHeader() กับ setOddFooter()
ตัวอย่างการกำหนดรูป 3 รูปใช้สำหรับ footer 3 ตำแหน่ง สามารถทำได้ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing ->setName( 'footer background2' ); $drawing ->setPath( './images/footer-background2.png' ); $drawing ->setHeight(36); $drawing2 = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing2 ->setName( 'footer background2' ); $drawing2 ->setPath( './images/footer-background2.png' ); $drawing2 ->setHeight(36); $drawing3 = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing3 ->setName( 'footer background2' ); $drawing3 ->setPath( './images/footer-background2.png' ); $drawing3 ->setHeight(36); $sheet ->getHeaderFooter() ->addImage( $drawing , \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_FOOTER_LEFT); $sheet ->getHeaderFooter() ->addImage( $drawing2 , \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_FOOTER_CENTER); $sheet ->getHeaderFooter() ->addImage( $drawing3 , \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_FOOTER_RIGHT); // แสดงรูปด้านซ้าย ตรงกลาง และด้านขวา (&L&G | &C&G | &R%G ) $sheet ->getHeaderFooter() ->setOddFooter( '&L&G&B' . $spreadsheet ->getProperties()->getTitle() . '&C&Gดีมาก&R&Gหน้า &P จาก &N' ); |
6. การแสดงแถวรายการซ้ำ
อธิบายไว้ในบทความตอนที่แล้ว ในหัวข้อสุดท้าย เพิ่มเติม คลิก http://niik.in/933
7. การซ่อนแสดงเส้นตาราง Excel หรือเส้น gridlines
เราสามารถกำหนดให้แสดงเส้นตารางของ excel ในหน้าพิมพ์โดยใช้คำสั่ง
1 | $sheet ->setShowGridlines(true); // true / false |
8. กำหนดพ้ืนที่การพิมพ์แบบระบุพิกัด
เราสามารถกำหนดช่วงพิกัด cell ที่ต้องการพิมพ์ สมมติเช่น พิมพ์เฉพาะ 5 จังหวัดแรกของแต่ละหน้า จะได้เป็น
1 | $sheet ->getPageSetup()->setPrintArea( 'A2:C6,A29:C34' ); |

เนื้อหาการปรับแต่ง และการใช้งาน PhpSpreadsheet ในตอนหน้าจะเป็นอะไร รอติดตาม