เนื้อหาต่อไปนี้ จะมาดูเกี่ยวกับ การจัดการต่างๆ เกี่ยวกับการพิมพ์
สำหรับเอกสารไฟล์ excel เช่น การตั้งค่าหน้ากระดาษ การกำหนดขนาดเอกสาร
เหล่านี้ เป็นต้น
1. การตั้งหน้ากระดาษและขนาดเอกสาร
เราสามารถกำหนดการตั้งหน้ากระดาษในแนวตั้ง หรือแนวแนอน ด้วยคำสั่ง setOrientation() และกำหนดขนาดเอกสารหรือกระดาษ
ด้วยคำสั่ง setPaperSize() การกำหนดขนาดเอกสารก็เช่น ขนาด A4, A5, Letter เป็นต้น
// ดูตัวแปรค่าคงที่อื่นๆ เพิ่มเติมได้ที่ // 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);เปรียบเทียบกับหน้าจัดการใน Excel
2. การกำหนดมาตราส่วนการพิมพ์
การกำหนด scale ในการพิมพ์เราสามารถใช้คำสั่งต่างๆ ดังนี้
// กรณีกำหนดเป็น % ค่าเริ่มต้นคือ 100 //$sheet->getPageSetup()->setScale(50); // กรณีกับเป็นความกว้างเนื้อหา x หน้า ที่แสดงต่อความสูงเต็ม y หน้า $sheet->getPageSetup()->setFitToWidth(1); $sheet->getPageSetup()->setFitToHeight(0);การกำหนด scale ในค่า % จะมีผลให้เดิม ค่าเริ่มต้นเท่ากับ 100% หมายถึง ส่วนของความกว้างของเนื้อหา
แสดง 100% ต่อขนาดความกว้างของหน้ากระดาษ หรือก็คือแสดงในมาตราส่วนปกติ แต่ถ้าหากเรากำหนดเป็น 50
นั้นหมายความว่า ส่วนของเนื้อหา จะถูกย่อขนาดลงในสัดส่วนความกว้างที่ลดลงเหลือ 50%
ตัวอย่างผลลัพธ์
ส่วนกรณีใช้การกำหนดแบบ setFitTo นั้น ค่าเริ่มต้น หรือค่าที่แสดงปกติ คือ setFitToWidth(1) และ setFitToHeight(0)
ความหมายคือให้สัดส่วนความกว้างเนื้อหาเท่ากับความกว้างปกติใน 1 หน้า และแสดงโดยไม่มีการบีบให้เต็มพื้นที่ตามความสูง
เราลองปรับค่าเป็น 1 กับ 1 จะได้เป็น
$sheet->getPageSetup()->setFitToWidth(1); $sheet->getPageSetup()->setFitToHeight(1);ผลลัพธ์ที่ได้คือ ข้อมูลถูกบีบขนาดให้แสดงอยู่ในหน้าเดียวเต็มพื้นที่ความสูง หรือก็คือ เดิมมี 3 หน้า จะถูกบีบให้เหลือ 1 หน้า
3. การจัดกึ่งกลางกะะดาษแนวตั้ง และแนวนอน
$sheet->getPageSetup()->setHorizontalCentered(true); // จัดกึ่งกลางข้อมูลตรงกลางในแนวนอน / true | false $sheet->getPageSetup()->setVerticalCentered(false); // จัดกึ่งกลางข้อมูลตรงกลางในแนวตั้ง / true | falseผลลัพธ์ตัวอย่างการพิมพ์กรณีจัดตรงกลางในแนวนอน ในแนวตั้ง และจัดตรงกลางในแนวนอนกับในแนวตั้ง
4. การกำหนด Margins
เราสามารถกำหนด margin ของและด้าน รวมถึง margin ของ header และ footer ด้วยคำสั่ง ดังนี้
$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);เปรียบเทียบกับหน้าจัดการใน Excel
5. การกำหนด Header และ Footer
เราสามารถจัดการส่วนของ Header และ Footer ได้ใช้คำสั่ง ดังนี้
$sheet->getHeaderFooter() ->setOddHeader('&C&H&KFF0000&"tahoma,Bold"&16รายชื่อจังหวัดในประเทศไทย'); $sheet->getHeaderFooter() ->setOddFooter('&L&B' . $spreadsheet->getProperties()->getTitle() . '&Rหน้า &P จาก &N');ค่าเหล่านี้รองรับการกำหนดและใช้งานในไฟล์ excel นามสกุลไฟล์ Xlsx
&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 ในตัวอย่างข้างต้น เป็นการกำหนดที่มีผลเหมือนกันในทุกๆ หน้า แต่เราสามารถกำหนดให้สามารถมีรูปแบบ
แตกต่างกันได้ระหว่างหน้าคู่ และหน้าคี่ โดยเพิ่มคำสั่งให้มีการใช้งาน ใช้รูปแบบที่แตกต่างกันระห่างหน้าคู่และหน้าคี่ จากนั้นก็กำหนดส่วน
ของหน้าคู่เพิ่มเข้าไป ตามรูปแบบคำสั่งดังนี้
// ใช้งานการกำหนดรูปแบบต่างกัน ระหว่างหน้าคู่ และหน้าคี่ $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');นอกจากกนั้น เรายังสามารถกำหนดเพิ่มเติมให้กับหน้าแรก ให้มีรูปแบบแตกต่างจากหน้าอื่นๆ ด้วยการใช้งานคำสั่ง
// ใช้งานการกำหนดรูปแบบที่แตกต่าง เฉพาะหน้าแรก $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 ตำแหน่ง ได้แก่
IMAGE_HEADER_LEFT IMAGE_HEADER_CENTER IMAGE_HEADER_RIGHT IMAGE_FOOTER_LEFT IMAGE_FOOTER_CENTER IMAGE_FOOTER_RIGHTแต่ก่อนที่เราจะไปกำหนดโค้ดเพื่อแสดงรูปใน Header หรือ Footer เราต้องทำการเพิ่มรูปเข้าไปก่อน ด้วยคำสั่งในรูปแบบดังนี้
// สร้างรูปสำหรับใช้งานใน Header และ Footer $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing->setName('footer background2'); // กำหนดชื่อ $drawing->setPath('./images/footer-background2.png'); // กำหนด path ของไฟล์ $drawing->setHeight(36); // กำหนดความสูง // ดูคำสั่งสำหรับปรับรูปเพิ่มเติม // https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Worksheet/HeaderFooterDrawing.htmlหลังกำหนดรูปที่จะใช้งานแล้ว จากนั้นก็ทำการเพิ่มเข้าไปใน Header และ Footer
// ส่วนสำหรับการเพิ่มรูป เราจะต้องระบุตำแหน่งที่จะใช้งานลงไปด้วย ในที่นี้เป็น IMAGE_FOOTER_LEFT // เวลานำไปใช้ เราต้องไปใช้ในส่วนของ Footer ด้านซ้าย แนวทางการนำไปกำหนด เช่น ถ้าไว้ด้านหน้าสุดของล่างซ้าย เป็น &L&G $sheet->getHeaderFooter() ->addImage($drawing, \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_FOOTER_LEFT);และสุดท้ายกำหนดการเรียกแสดงรูปโดยใช้รหัสโค้ด &G
// กำหนดรปแบบสำหรับหน้าคี่ ด้วยคำสั่ง setOddHeader() และ setOddFooter() $sheet->getHeaderFooter() ->setOddFooter('&L&G&B' . $spreadsheet->getProperties()->getTitle() . 'ดีมาก&Rหน้า &P จาก &N');จากที่ทดสอบ การแทรกรูปจะไม่รองรับ กรณีใช้งานคำสั่ง setFirstFooter(), setFirstHeader() และ setEvenHeader(), setEvenFooter()
จะรองรับเฉพาะคำสั่ง setOddHeader() กับ setOddFooter()
ตัวอย่างการกำหนดรูป 3 รูปใช้สำหรับ footer 3 ตำแหน่ง สามารถทำได้ดังนี้
$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 ในหน้าพิมพ์โดยใช้คำสั่ง
$sheet->setShowGridlines(true); // true / false
8. กำหนดพ้ืนที่การพิมพ์แบบระบุพิกัด
เราสามารถกำหนดช่วงพิกัด cell ที่ต้องการพิมพ์ สมมติเช่น พิมพ์เฉพาะ 5 จังหวัดแรกของแต่ละหน้า จะได้เป็น
$sheet->getPageSetup()->setPrintArea('A2:C6,A29:C34');เปรียบเทียบกับหน้าจัดการใน Excel
เนื้อหาการปรับแต่ง และการใช้งาน PhpSpreadsheet ในตอนหน้าจะเป็นอะไร รอติดตาม