กำหนด Style ให้กับพิกัด Cell ด้วย PhpSpreadsheet เบื้องต้น ตอนที่ 5

เขียนเมื่อ 5 ปีก่อน โดย Ninenik Narkdee
phpspreadsheet จัดรูปแบบ cell

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

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


ต่อจากตอนที่แล้ว เกี่ยวกับการจัดการรูปแบบการแสดงของพิกัด cell 
ทบทวนตอนที่แล้วได้ที่บทความ http://niik.in/931
 

การกำหนด Style ให้กับพิกัด Cell

    เราเคยได้จัดรูปแบบหรือ style ให้กับพิกัด cell มาบ้างแล้วในตอนที่ผ่านมา เกี่ยวกับการจัดรูปแบบข้อมูลตัวเลข หรือที่เรียกว่า
numberFormat ทบทวนได้ที่บทความ http://niik.in/930  ในหัวข้อนี้ เราจะมาดูต่อเพิ่มเติม
    ในการกำหนดให้กับพิกัด cell เราจะทำการอ้างอิงตำแหน่งที่จะใช้งานด้วยฟังก์ชั่น getStyle() โดยสามารถกำหนดพิกัด เช่น
A1 หรือกำหนดเป็นช่วงของพิกัดไม่ว่าจะเป็นแนวตั้งหรือแนวนอน เช่น A1:C1 หรือ A1:A5 เป็น แนวทางก็จะเป็นดังนี้
$sheet->getStyle('A1')  // อ้างอิงพิกัด cell
$sheet->getStyle('A1:C1') // อ้างอิงพิกัด cell เป็นช่วงในแนวนอน
$sheet->getStyle('A1:A5') // อ้างอิงพิกัด cell เป็นช่วงในแนวตั้ง
     ต่อไปก็ตามด้วยฟังก์ชั่นเรียกใช้ style ที่เราต้องการใช้งาน ซึ่งประกอบไปด้วย 6 รูปแบบ ดังนี้
 
- การจัดการเติมสี/เพิ่มสี (fill)  ใช้คำสั่ง getFill() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น fill
- การจัดการตัวอักษร (font) ใช้คำสั่ง getFont() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น font
- การจัดการเส้นขอบ ใช้คำสั่ง getBorders() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น borders
- การจัดตำแหน่ง ใช้คำสั่ง getAlignment() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น alignment
- การจัดการรูปแบบตัวเลข ใช้คำสั่ง getNumberFormat() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น numberFormat
- การจัดการการป้องกัน cell ใช้คำสั่ง getProtection() หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น protection
 
    เรามาดูตัวอย่างการใช้งานในแต่ละส่วนอย่างง่าย (ไม่รวมส่วนของการจัดการรูปแบบตัวเลข)
 

    การจัดการเติมสี/เพิ่มสี (fill)

    หลักๆ ก็จะเป้นการเติมสีพื้นหลัง และรูปแบบของการเติมสี เช่น ไล่เฉด หรือใส่เป็นสีพื้น กรณีใส่เป็นสีพื้นก็จะกำหนดค่าสีแค่ค่าเดียว
แต่ถ้าต้องการไล่เฉดสี ก็อาจจะต้องกำหนดสองสี เพิ่มเข้าไป
// ใส่สีพื้นหลัง ดูการกำหนด filetype เพิ่มเติมได้ที่ 
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Fill.html
$sheet->getStyle('A1:C1')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID);
$sheet->getStyle('A1:C1')->getFill()
->getStartColor()->setRGB('FFB27D');
    หรือ
// ใส่สีพื้นแบบไล่สึ ต้องกำหนดการใช้งานสีสองค่า
$sheet->getStyle('A1:C1')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_PATH);
$sheet->getStyle('A1:C1')->getFill()
->getStartColor()->setRGB('FFB27D');
$sheet->getStyle('A1:C1')->getFill()
->getEndColor()->setRGB('FFCCA9');

// ตัวแปรค่าคงที่ของ Fill เพิ่มเติม ที่สามารถใช้งานได้ 
// FILL_NONE  |  FILL_SOLID  |  FILL_GRADIENT_LINEAR	
// FILL_GRADIENT_PATH  |  FILL_PATTERN_DARKDOWN	
// FILL_PATTERN_DARKGRAY  |  FILL_PATTERN_DARKGRID	
// FILL_PATTERN_DARKHORIZONTAL  |  FILL_PATTERN_DARKTRELLIS	
// FILL_PATTERN_DARKUP  |  FILL_PATTERN_DARKVERTICAL	
// FILL_PATTERN_GRAY0625  |  FILL_PATTERN_GRAY125	
// FILL_PATTERN_LIGHTDOWN  |  FILL_PATTERN_LIGHTGRAY	
// FILL_PATTERN_LIGHTGRID  |  FILL_PATTERN_LIGHTHORIZONTAL	
// FILL_PATTERN_LIGHTTRELLIS  |  FILL_PATTERN_LIGHTUP	
// FILL_PATTERN_LIGHTVERTICAL |  FILL_PATTERN_MEDIUMGRAY
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Fill.html
    ผลลัพธ์ที่ได้ กรณีไล่เฉดสีสองสี
 

 
 
    จากการทดลองใช้งาน การกำหนดสีพื้นหลังหรือการเติมสี จะมีการจัดการอยู่ได้กันประมาณ 4 คำสั่ง คือ
// กำหนดรูปแบบสีพื้นหลังด้วย
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_PATH); 
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น fillType

// กำหนดสีที่ 1 ด้วย 
->getStartColor()->setRGB('FFB27D')
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น startColor

// กำหนดสีที่ 2 ด้วย (*กรณีใช้สีเดียวให้กำหนดค่าให้เท่ากับ getStartColor())
->getEndColor()->setRGB('FFCCA9');
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น endColor

// ใช้กรณีกำหนดทิศทาง การไล่เฉดสี เป็นองศา ใช้ร่วมกับ FILL_GRADIENT_LINEAR
->setRotation(90) // ไล่เฉดบนลงล่าง
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น rotation
 

    การจัดการตัวอักษร (font)

    เป็นลักษณะของการจัดการข้อความหรือข้อมูลในพิกัด cell เช่น ชื่อ font ที่จะใช้ การกำหนด style อย่างตัวหนา ตัวเอียง ตัวอักษรตัวยก
หรือตัวอักษรตัวห้อย การกำหนดขนาดตัวอักษร การกำหนดสีตัวอักษร การใส่เส้นใต้ การใส่เส้นทับหรือเส้นขีดฆ่า เป็นต้น
// กำหนด font ที่จะใช้งาน
$sheet->getStyle('B2')->getFont()->setName('Arial');
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น name

// กำหนดเป็นตัวหนา
$sheet->getStyle('B3')->getFont()->setBold(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น bold

// กำหนดเป็นตัวเอียง
$sheet->getStyle('B4')->getFont()->setItalic(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น italic

// กำหนดให้มีขีดเส้นใต้
$sheet->getStyle('B5')->getFont()->setUnderline(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น underline

// กำหนดให้มีเส้นขีดทับหรือขีดฆ่า
$sheet->getStyle('B6')->getFont()->setStrikethrough(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น strikethrough

// กำหนดสีตัวอักษร
$sheet->getStyle('B7')->getFont()->getColor()->setRGB('ED1C24');
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น color

// กำหนดขนาดตัวอักษร
$sheet->getStyle('B8')->getFont()->setSize(12);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น size

// กำหนดเป็นตัวอักษรตัวยก
$sheet->getStyle('B9')->getFont()->setSuperscript(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น superscript

// กำหนดเป็นตัวอักษรตัวห้อย
$sheet->getStyle('B10')->getFont()->setSubscript(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น subscript

// ตัวแปรค่าคงที่ของ font เพิ่มเติม ที่สามารถใช้งานได้ ในกรณีกำหนด underline เป็นข้อความ
// ตัวอย่างเช่น 
// $sheet->getStyle('B5')
// ->getFont()->setUnderline(\PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_SINGLE);
// UNDERLINE_NONE  |  UNDERLINE_DOUBLE	
// UNDERLINE_DOUBLEACCOUNTING  |  UNDERLINE_SINGLE	
// UNDERLINE_SINGLEACCOUNTING
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Font.html
    ผลลัพธ์ข้อมูลที่พิกัด B2:B10
 
 
 

    การจัดการเส้นขอบ

    สำหรับการกำหนดเส้นขอบของพิกัด cell น้้นสามารถกำหนดรูปแบบได้หลากหลาย ไม่ว่าจะกำหนดแยกแต่ละด้านของขอบ
หรือกำหนดเฉพาะเส้นขอบภายใน การกำหนดเฉพาะเส้นขอบด้านนอกให้กับกลุ่มของพิกัด ceel  การกำหนดเส้นขอบในแนวทแยง
การกำหนดส้นขอบเฉพาะในแนวตั้ง หรือเฉพาะในแนวนอน เป็นต้น 
    ดูตัวอย่างเส้นขอบที่กำหนดในพิกัด cell รูปแบบต่างๆ ด้านล่าง
 
 
    การกำหนดเส้นขอบรูปแบบต่างๆ
// กำหนดเส้นขอบด้านซ้าย
$sheet->getStyle('B2')
->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น left

// กำหนดเส้นขอบด้านขวา
$sheet->getStyle('B3')
->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น right

// กำหนดเส้นขอบด้านบน
$sheet->getStyle('B4')
->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น top

// กำหนดเส้นขอบด้านล่าง
$sheet->getStyle('B5')
->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น bottom

// กำหนดเส้นขอบแนวตั้งด้านใน สำหรับช่วงของพิกัด ตั้งแต่สองคอลัมน์ขึ้นไป
$sheet->getStyle('A7:C7')
->getBorders()->getVertical()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น vertical

// กำหนดเส้นขอบแนวนอนด้านใน สำหรับช่วงของพิกัด ตั้งแต่สองแถวขึ้นไป
$sheet->getStyle('A8:C9')
->getBorders()->getHorizontal()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น horizontal

// กำหนดเส้นขอบด้านนอก สำหรับช่วงของพิกัด หรือเส้นขอบของพิกัด cell ใดๆ
$sheet->getStyle('E2:G3')
->getBorders()->getOutline()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น outline

// กำหนดเส้นขอบทั้งหมดทุกด้านในพิกัดหรือในช่วงพิกัด cell ที่ต้องการ
$sheet->getStyle('E5:G7')
->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น allBorders

// กำหนดเส้นขอบเฉพาะด้านใน ไม่รวมขอบด้านนอก
$sheet->getStyle('E9:G11')
->getBorders()->getInside()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น inside


// กำหนดเส้นขอบแนวทแยงมุม รูปแบบต่าง 
$sheet->getStyle('I2:K3')
->getBorders()->setDiagonalDirection(\PhpOffice\PhpSpreadsheet\Style\Borders::DIAGONAL_DOWN);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น diagonalDirection
$sheet->getStyle('I2:K3')
->getBorders()->getDiagonal()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น diagonal

$sheet->getStyle('I5:K6')
->getBorders()->setDiagonalDirection(\PhpOffice\PhpSpreadsheet\Style\Borders::DIAGONAL_UP);
$sheet->getStyle('I5:K6')
->getBorders()->getDiagonal()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);

$sheet->getStyle('I8:K9')
->getBorders()->setDiagonalDirection(\PhpOffice\PhpSpreadsheet\Style\Borders::DIAGONAL_BOTH);
$sheet->getStyle('I8:K9')
->getBorders()->getDiagonal()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);

// ตัวแปรค่าคงที่ของ Border เพิ่มเติม ที่สามารถใช้งานได้
// BORDER_NONE  |  BORDER_DASHDOT  |  BORDER_DASHDOTDOT  |  BORDER_DASHED	
// BORDER_DOTTED  |  BORDER_DOUBLE  |  BORDER_HAIR  |  BORDER_MEDIUM	
// BORDER_MEDIUMDASHDOT  |  BORDER_MEDIUMDASHDOTDOT	
// BORDER_MEDIUMDASHED  |  BORDER_SLANTDASHDOT	
// BORDER_THICK  |  BORDER_THIN
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Borders.html
// ตัวแปรค่าคงที่ของ Borders เส้นทแยง เพิ่มเติม ที่สามารถใช้งานได้
// DIAGONAL_NONE  |  DIAGONAL_UP	
// DIAGONAL_DOWN  |  DIAGONAL_BOTH
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Borders.html
    ผลลัพธ์ที่ได้
 

 
 

    การจัดตำแหน่งข้อมูมลในพิกัด cell

    การจัดตำแหน่งข้อมูลเช่น การแสดงข้อมูลชิดซ้าย ตรงกลาง หรือชิดขวาในพิกัด cell กรณีเป็นการแสดงในแนวนอน หรือการแสดง
ข้อมูลชิดขอบบน ตรงกลาง หรือชิดขอบล่าง ในพิกัด cell กรณีเป็นแสดงในแนวตั้ง นอกจากนั้นก็ยังมี การกำหนดการหมุนของข้อความ
หรือข้อมูลในพิกัด cell อย่างเช่น แแสดงในมุม  45 องศาในพิกัด cell  และก็มีการกำหนดให้ข้อความตัดคำอัตโนมัติเพื่อให้ข้อความอยู่
ในพื้นที่ตามขนาดความกว้างของ cell โดยจะขึ้นบรรทัดใหม่สำหรับข้อความที่มีช่องว่าง  ดูตัวอย่างเพิ่มติมด้านล่าง
// จำลองกำหนดความกว้างของคอลัมน์ C
$sheet->getColumnDimension('C')->setWidth(11.42578125); // ประมาณ 80 px

// การจัดข้อความชิดขวาในแนวนอน
$sheet->getStyle('C2')
->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น horizontal

// จำลองเพิ่มความสูงของแถว เพือให้เห็นผลลัพธ์การจัดเรียงในแนวตั้ง
$sheet->getRowDimension('3')->setRowHeight(37.50000937500234); // ประมาณ 50 px
// การจัดข้อความให้ชิดขอบด้านบนในแนวตั้ง
$sheet->getStyle('C3')
->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น vertical

// การหมุนข้อความ
$sheet->getStyle('C4')->getAlignment()->setTextRotation(45); // แสดงข้อความหมุนไปที่ 45 องศา
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น textRotation

// การตัดคำที่มีช่องว่าง โดยขึ้นบรรทัดใหม่
$sheet->getStyle('C5')->getAlignment()->setWrapText(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น wrapText

// บีบขนาดข้อความให้แสดงทั้งหมดให้อยู่ในเฉพาะความกว้างของพิกัด cell นั้น
$sheet->getStyle('C6')->getAlignment()->setShrinkToFit(true);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น shrinkToFit

// การกำหนดการเยื้องจากด้านหน้าของข้อความใน cell
$sheet->getStyle('C7')->getAlignment()->setIndent(3); // หน่วย char unit
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น indent

// ตัวแปรค่าคงที่ของ Alignment เพิ่มเติม ที่สามารถใช้งานได้
// HORIZONTAL_GENERAL  |  HORIZONTAL_LEFT	|  HORIZONTAL_RIGHT  |  HORIZONTAL_CENTER	
// HORIZONTAL_CENTER_CONTINUOUS  |  HORIZONTAL_JUSTIFY	  |  HORIZONTAL_FILL  
// HORIZONTAL_DISTRIBUTED	
// VERTICAL_BOTTOM  |  VERTICAL_TOP  |  VERTICAL_CENTER  |  VERTICAL_JUSTIFY	
// VERTICAL_DISTRIBUTED  |  READORDER_CONTEXT  |  READORDER_LTR  |  READORDER_RTL
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Alignment.html
    ผลลัพธ์ที่ได้
 

 
 

    การจัดการการป้องกัน cell

    การป้องกันในระดับพิกัด cell จะจัดการในสองเรื่องคือ การล็อคพิกัด cell นั้นๆ ซึ่งค่าเริ่มต้นแล้วพิกัด  cell จะถูกกำหนดให้ล็อคไม่ให้แก้ไข
อยู่แล้ว ส่วนอีกค่าคือการซ่อนสูตรที่กำหนดในพิกัด cell นั้นๆ ค่าเริ่มต้นจะไม่ถูกซ่อน   อย่างไรก็ตามทั้งสองค่านี้จะไม่มีผลหากเราไม่ได้กำหนด
การป้องกันให้กับ worksheet หรือแผ่นงานนั้นก่อน
    ดังนั้น เราสามารถป้องกันพิกัด cell ได้ดังตัวอย่างต่อไปนี้
// กำหนดการป้องกันให้กับแผ่นงานหรือ worksheet
$sheet->getProtection()->setPassword('111111');
$sheet->getProtection()->setSheet(true);
$sheet->getProtection()->setSort(true);
$sheet->getProtection()->setInsertRows(true);
$sheet->getProtection()->setFormatCells(true);

// จำลองการใช้สูตรสำหรับพิกัด D2
$sheet->getCell('D2')->setValue('=C2');

// กำหนดการป้องกันการเปลี่ยนข้อมูลในพิกัด cell ปกติค่าเริ่มต้นจะเป็นล็อคอยู่แล้ว ไม่กำหนดก็ได้
$sheet->getStyle('D2')
->getProtection()->setLocked(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_PROTECTED);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น locked

// กำหนดการป้องกันการซ่อนหรือไม่แสดงสูตรที่ใช้งาน
$sheet->getStyle('D2')
->getProtection()->setHidden(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_PROTECTED);
//  หรือหากกำหนดเป็น array ก็ให้ใช้ key เป็น hidden

// ตัวแปรค่าคงที่ของ protection ที่สามารถใช้งานได้
// PROTECTION_INHERIT  |  PROTECTION_PROTECTED  |  PROTECTION_UNPROTECTED
// https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice/PhpSpreadsheet/Style/Protection.html
    ผลลัพธ์ที่ได้
 

 
 
    จะเห็นว่า เมื่อเราพยายามจะแก้ไข ข้อมูล ก็จะขึ้นแจ้งเตือน เนื่องจากว่าพิกัด cell ถูกป้องกันไว้แล้ว และถ้าเรากดไปพิกัด D2 ก็จะไม่แสดง
สูตรที่ถูกใช้งานอยู่ เราสามารถแก้ไขข้อมูลได้ เมื่อทำการ unprotect sheet โดยใส่รหัสผ่านตามที่กำหนดให้ถูกต้อง จึงจะสามารถแก้ไขข้อมูลได้
 
     เนือหาเกี่ยวกับการจัดรูปแบบการแสดงข้อมูลยังมีเพิ่มเติม รอติดตามในตอนหน้า


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



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









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









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





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

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


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


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







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