การตั้งค่าการพิมพ์ไฟล์ Excel ด้วย PhpSpreadsheet เบื้องต้น ตอนที่ 7

เขียนเมื่อ 5 ปีก่อน โดย Ninenik Narkdee
phpspreadsheet ตั้งค่าการพิมพ์

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ phpspreadsheet ตั้งค่าการพิมพ์

ดูแล้ว 7,848 ครั้ง


เนื้อหาต่อไปนี้ จะมาดูเกี่ยวกับ การจัดการต่างๆ เกี่ยวกับการพิมพ์
สำหรับเอกสารไฟล์ 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 ในตอนหน้าจะเป็นอะไร รอติดตาม
 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ