เนื้อหาในตอนต่อไปนี้ เราจะมาเพิ่มเติมจากตอนที่แล้ว เกี่ยวกับ
การจัดการกับรูปแบบของข้อมูลที่แสดงในพิกัด Cell โดยเราจะใช้งานร่วมกับ
ชุดข้อมูลจากฐานข้อมูล
ในที่นี้ เราจะจำลองสร้างข้อมูลสำหรับทดสอบ เป็นชุดข้อมูลคล้ายกับเนื้อหาตอนที่แล้ว
ทบทวนได้ที่ http://niik.in/929
โดยจะทำการเพิ่มข้อมูลในลักษณะที่คล้ายกันเข้าไปในฐานข้อมูล จากนั้น จะดึงข้อมูลมาสร้างเไฟล์ excel
พร้อมจัดรูปแบบข้อมูลใสแต่ละ cell
โครงสร้างตารางฐานข้อมูลประกอบ
--
-- Table structure for table `tbl_excel1`
--
CREATE TABLE `tbl_excel1` (
`id` int(11) NOT NULL,
`type_integer` int(11) DEFAULT NULL,
`type_double` double DEFAULT NULL,
`type_string` varchar(100) DEFAULT NULL,
`type_null` char(10) DEFAULT NULL,
`type_str_int` varchar(100) DEFAULT NULL,
`type_str_double` varchar(100) DEFAULT NULL,
`type_str_fraction` varchar(20) DEFAULT NULL,
`type_str_percent` varchar(10) DEFAULT NULL,
`type_str_zerolead` varchar(100) DEFAULT NULL,
`type_date` date DEFAULT NULL,
`type_datetime` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tbl_excel1` (`id`, `type_integer`, `type_double`, `type_string`, `type_null`, `type_str_int`, `type_str_double`, `type_str_fraction`, `type_str_percent`, `type_str_zerolead`, `type_date`, `type_datetime`) VALUES
(1, 100, 21.35, 'one', NULL, '100', '21.35', '10/11', '5%', '0801111110', '2019-07-10', '2019-07-13 10:10:00'),
(2, 101, 22.35, 'two', NULL, '101', '22.35', '11/11', '5%', '0801111111', '2019-07-11', '2019-07-13 11:11:00'),
(3, 102, 23.35, 'three', NULL, '102', '23.35', '12/11', '5%', '0801111112', '2019-07-12', '2019-07-13 12:12:00'),
(4, 103, 24.35, 'four', NULL, '103', '24.35', '13/11', '5%', '0801111113', '2019-07-13', '2019-07-13 13:13:00'),
(5, 104, 25.35, 'five', NULL, '104', '25.35', '14/11', '5%', '0801111114', '2019-07-14', '2019-07-13 14:14:00'),
(6, 105, 26.35, 'six', NULL, '105', '26.35', '15/11', '5%', '0801111115', '2019-07-15', '2019-07-13 15:15:00'),
(7, 106, 27.35, 'NULL', NULL, '106', '27.35', '16/11', '5%', '0801111116', '2019-07-16', '2019-07-13 16:16:00'),
(8, 107, 28.35, 'null', NULL, '107', '28.35', '17/11', '5%', '0801111117', '2019-07-17', '2019-07-13 17:17:00'),
(9, 108, 29.35, '0', NULL, '108', '29.35', '18/11', '5%', '0801111118', '2019-07-18', '2019-07-13 18:18:00'),
(10, 109, 30.35, 'nine', NULL, '109', '30.35', '19/11', '5%', '0801111119', '2019-07-19', '2019-07-13 19:19:00'),
(11, 110, 31.35, 'ten', NULL, '110', '31.35', '20/11', '5%', '0801111120', '2019-07-20', '2019-07-13 20:20:00');
ALTER TABLE `tbl_excel1`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_excel1`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;
COMMIT;
การสร้าง excel ไฟล์ จากข้อมูลในฐานข้อมูล
ต่อไปเราจะมาดูแนวทางการดึงข้อมูลจากฐานข้อมูล มาสร้างเป็นไฟล์ excel ซึ่งสามารถทำได้ดังนี้
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?php // โค้ดไฟล์ dbconnect.php ดูได้ที่ http://niik.in/que_2398_5642 require_once ( "dbconnect.php" ); // include composer autoload require 'vendor/autoload.php' ; // import the PhpSpreadsheet Class use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Set value binder \PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder() ); //\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); $spreadsheet = new Spreadsheet(); // สร้าง speadsheet object $sheet = $spreadsheet ->getActiveSheet(); // กำหนดการทำงานที่่แผ่นงานปัจจุบัน // แสดงข้อมูลทั้งหมดของตาราง tbl_excel1 $sql = " SELECT * FROM tbl_excel1 "; $result = $mysqli ->query( $sql ); if ( $result && $result ->num_rows>0){ // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่ $arrayData = $result ->fetch_all(); $totalRow = count ( $arrayData ); // จำนวนแถวข้อมูลทั้งหมด $result ->free(); // สามารถใช้ $result->close() หรือ $result->free_result() แทนได้ } // กำหนดค่าให้กับพิกัด Cell ในรูปแบบข้อมูล array /* $sheet->fromArray( $arrayData, // ตัวแปร array ข้อมูล NULL, // ค่าข้อมูลที่ตรงตามค่านี้ จะไม่ถูกำหนด 'A1' // จุดพิกัดเริ่มต้น ที่ใช้งานข้อมูล เริ่มทึ่มุมบนซ้าย หากไม่กำหนดจะเป็น "A1" ค่าเริ่มต้น ); */ $sheet ->fromArray( $arrayData ); // รูปแบบสั้น ผลลัพธ์เดียวกับด้านบน // จัดขนาดความกว้างของ cell อย่างง่าย ตามจำนวนฟิลด์คอลัมน์ของฐานข้อมูล // ในที่นี้เราดึงฟิลด์ข้อมูลทั้งหมดในตาราง tbl_excel1 ซึ่งมีทั้งหมด 12 ฟิลด์ ก็แทนด้วยคอลัมน์ A ถึง L foreach (range( 'A' , 'L' ) as $column ) { $sheet ->getColumnDimension( $column )->setAutoSize(true); } $writer = new Xlsx( $spreadsheet ); $output_file = "hello_world.xlsx" ; // กำหนดชื่อไฟล์ excel ที่ต้องการ $writer ->save( $output_file ); // สร้าง excel if ( file_exists ( $output_file )){ // ตรวจสอบว่ามีไฟล์ หรือมีการสร้างไฟล์ แล้วหรือไม่ echo '<a href="' . $output_file . '" target="_blank">Download</a>' ; |
โค้ดตัวอย่างข้างต้น เป็นการดึงข้อมูลทั้งหมดจากตาราง tbl_excel1 มาสร้างเป็นข้อมูลในไฟล์ excel โดยข้อมูลที่ได้จาก
ตาราง tbl_excel1 จะเป็นข้อมูลประเภท string ผลลัพธ์เมื่อสร้างเป็นไฟล์ excel ก็จะได้รูปแบบแต่ละข้อมูลในแต่ละพิกัด Cell เป็น
ลักษณะข้อความ ดังนั้น เวลาที่เราจะนำข้อมูลในแต่ละ cell ไปใช้งานต่อ ก็อาจจะต้องทำการจัดูปแบบข้อมูลใน cell ก่อน อย่างเช่น
ข้อมูลที่เป็นวันที่ ข้อมูลที่ตัวเลขเปอร์เซ็น เลขเศษส่วน เหล่านี้เป็นต้น
ผลลัพธ์ที่ได้

จากรูป เราจะเห็นว่าส่วนใหญ่ข้อมูลที่ได้จะอยู่ในรูปแบบของข้อความ ส่วนคอลัมน์ E เนื่องจากค่าในฐานข้อมูลเป็น NULL ผลลัพธ์ที่ได้
เมื่อนำมาแสดงใน cell ก็จะไม่มีค่าใดๆ หรือเป็นค่าว่างตามรูป
เราลองมาใส่หัวข้อของแต่ละคอลัมน์ในแถวแรก โดยในที่นี้ จะใช้ชื่อเดียวกับชื่อฟิลด์ในฐานข้อมูล ทำได้ดังนี้
1 2 3 4 5 6 7 8 | // กำหนดหัวข้อคอลัมน์ $columnName = [ 'id' , 'integer' , 'double' , 'string' , 'null' , 'str_int' , 'str_double' , 'str_fraction' , 'str_percent' , 'str_zerolead' , 'date' , 'datetime' ]; $sheet ->fromArray( $columnName ) // array ข้อมูลหัวข้อคอลัมน์ ->fromArray( $arrayData , // ตัวแปร array ข้อมูล NULL, // ค่าข้อมูลที่ตรงตามค่านี้ จะไม่ถูกำหนด 'A2' // จุดพิกัดเริ่มต้น ที่ใช้งานข้อมูล เริ่มทึ่มุมบนซ้าย หากไม่กำหนดจะเป็น "A1" ค่าเริ่มต้น ); |
ผลลัพธ์ที่ได้

ต่อไปเราลองใช้วิธีการจัดรูปแบบข้อมูลในพิกัด Cell ด้วยการใช้งาน value binder โดยเอา comment ในส่วนของ
AdvancedValueBinder class ออก และปิดการใช้งานรูปแบบ DefaultValueBinder จะได้เป็น
1 2 3 | // Set value binder //\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder() ); \PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); |
ผลลัพธ์ที่ได้

จะเห็นว่าตอนนี้รูปแบบข้อมูลใน cell มีการแปลงเป็นรูปแบบที่ถูกต้องมากขึ้น อย่างเลขเศษส่วนที่พิกัด H5 ที่แสดงเป็น 14/11 แต่ค่า
จริงของข้อมูลถูกแปลงเป็นเลขทศนิยม เท่ากับ 1.2727272727273 ตามรูปด้านบน ซึ่งสามารถนำไปใช้งานต่อได้เลย
เช่น เดียวกันกับข้อมูลรูปแบบวันที่ ที่ก่อนใช้งาน AdvancedValueBinder class ก็ยังแสดงในรูปแบบข้อความเท่านั้น แต่หลังจากใช้งาน
ก็ถูกแปลงให้อยู่ในรูปแบบข้อมูลตัวเลข timestamp และแสดงในรูปแบบข้อมูลที่เป็นวันที่
โดยส่วนใหญ่แล้ว ข้อมูลในพิกัด Cell หลังจากใช้งาน AdvancedValueBinder ก็จะมีรูปแบบตามที่ต้องการ แต่ก็มีบางข้อมูลที่ไม่ถูกต้อง
เช่น ข้อมูลที่มีเลข 0 นำหน้า อย่างเบอร์โทร หลังใช้ พบว่าถูกแปลงเป็นตัวเลข และเลข 0 ด้านหน้าก็หายไป อย่างไรก็ตาม เราสามารถปรับ
เฉพาะส่วนของข้อมูลที่ไม่ถูกต้อง ไปพร้อมๆ กับการใช้งาน AdvancedValueBinder ได้ ดูต่อในหัวข้อต่อไป
การจัดรูปแบบข้อมูลในพิกัด Cell
เราจะมาจัดการเฉพาะพิกัดข้อมูลที่มีการแปลงข้อมูลโดยใช้ AdvancedValueBinder แล้วไม่ได้รูปแบบข้อมูลที่ต้องการ อย่างกรณีเบอร์โทร
ที่ถูกแปลงเป็นตัวเลข และเลข 0 ด้านหน้าหายไป เราสามารถแก้ไขได้ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 | // กำหนดหัวข้อคอลัมน์ $columnName = [ 'id' , 'integer' , 'double' , 'string' , 'null' , 'str_int' , 'str_double' , 'str_fraction' , 'str_percent' , 'str_zerolead' , 'date' , 'datetime' ]; $sheet ->fromArray( $columnName ) ->fromArray( $arrayData , // ตัวแปร array ข้อมูล NULL, // ค่าข้อมูลที่ตรงตามค่านี้ จะไม่ถูกำหนด 'A2' // จุดพิกัดเริ่มต้น ที่ใช้งานข้อมูล เริ่มทึ่มุมบนซ้าย หากไม่กำหนดจะเป็น "A1" ค่าเริ่มต้น ); $sheet ->getStyle( 'J2:J12' ) // กำหนดช่วงพิกัด Cell ที่ต้องการกำหนดรูปแบบช้อมูล ->getNumberFormat() ->setFormatCode( '0000000000' ); // จัดรูปแบบ คล้ายกำหนดรูปแบบข้อมูล กรณีนี้เป็นเบอร์โทร 10 หลัก |
รูปแบบการกำหนดโดยใช้คำสั่ง setFormatCode ข้างต้น ก็เหมือนกับเราใส่หน้ากากหรือ mask หรือรูปแบบของข้อมูล สมมติเช่น เราอยาก
ได้รูปแบบเบอร์โทรเป็น 080-1111110 เราก็สามารถกำหนดเป็น setFormatCode('000-0000000') แบบนี้เป็นต้น
สำหรับการกำหนดช่วงพิกัด Cell ข้างต้นเรากำหนดตายตัวคือ J1:J12 ทั้งนี้เพราะจำนวนข้อมูลทดสอบเราไม่เยอะ และเราก็รู้พิกัดของข้อมูล
แต่ในความเป็นจริง ข้อมูลอาจจะมีจำนวนมากๆ และอาจจะมีการเปลี่ยนแปลงได้ตลอด ดังนั้น เราควรจะกำหนดโดยให้รองรับส่วนนี้ได้
เนื่องจากเรารู้ว่า จำนวนข้อมูลทั้งหมดมีกี่แถวจากตัวแปร $totalRow ดังนั้น เราสามารถประยุกต์ได้ เป็นดังนี้
1 2 3 | $sheet ->getStyle( 'J2:J' .( $totalRow +1)) // จำนวนแถวทั้งหมด + จำนวนแถวที่เป็นหัวข้อ ->getNumberFormat() ->setFormatCode( '0000000000' ); // จัดรูปแบบ คล้ายกำหนดรูปแบบข้อมูล กรณีนี้เป็นเบอร์โทร 10 หลัก |
ผลลัพธ์ที่ได้

จะเห็นว่าในส่วนของเบอร์โทร มีเลข 0 นำหน้าตามรูปแบบที่เราต้องการเรียบร้อยแล้ว
ถ้าเราสังเกตข้อมูลวันที่ข้างๆ จะเห็นว่ารูปแบบวันที่ จะเป็นรูปแบบมาตรฐาน หากต้องการนำข้อมูลนี้ไปใช้งานต่อ เช่น นำไปบันทึกลงฐานข้อมูล
รูปแบบข้างต้นก็ถือว่าเหมาะสมแล้ว แต่ถ้าเป็นกรณีว่า เราต้องการแสดงข้อมูลวันที่ในรูปแบบที่อ่านง่ายกว่านี้ เราจะทำยังไง ดังนั้นเรามาดูต่อ
เกี่ยวกับการจัดรูปแบบข้อมูลวันที่ ซึ่งสามารถจัดรูปแบบได้ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // กำหนดหัวข้อคอลัมน์ $columnName = [ 'id' , 'integer' , 'double' , 'string' , 'null' , 'str_int' , 'str_double' , 'str_fraction' , 'str_percent' , 'str_zerolead' , 'date' , 'datetime' ]; $sheet ->fromArray( $columnName ) ->fromArray( $arrayData , // ตัวแปร array ข้อมูล NULL, // ค่าข้อมูลที่ตรงตามค่านี้ จะไม่ถูกำหนด 'A2' // จุดพิกัดเริ่มต้น ที่ใช้งานข้อมูล เริ่มทึ่มุมบนซ้าย หากไม่กำหนดจะเป็น "A1" ค่าเริ่มต้น ); $sheet ->getStyle( 'J2:J' .( $totalRow +1)) // จำนวนแถวทั้งหมด + จำนวนแถวที่เป็นหัวข้อ ->getNumberFormat() ->setFormatCode( '0000000000' ); // จัดรูปแบบ คล้ายกำหนดรูปแบบข้อมูล กรณีนี้เป็นเบอร์โทร 10 หลัก $sheet ->getStyle( 'K2:K' .( $totalRow +1)) // จำนวนแถวทั้งหมด + จำนวนแถวที่เป็นหัวข้อ ->getNumberFormat() ->setFormatCode( \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DDMMYYYY); $sheet ->getStyle( 'L2:L' .( $totalRow +1)) // จำนวนแถวทั้งหมด + จำนวนแถวที่เป็นหัวข้อ ->getNumberFormat() ->setFormatCode( \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME); |
ผลลัพธ์ที่ได้

เราสามารถจัดรูปแบบของวันที่ โดยใช้ตัวแปรค่าคงที่ดังนี้ เพิ่มเติมได้
วันที่อย่างเดียว 2019-07-20 วันที่และเวลา 2019-07-20 20:20:02
FORMAT_DATE_YYYYMMDD2 - 2019-07-20
FORMAT_DATE_YYYYMMDD - 19-07-20
FORMAT_DATE_DDMMYYYY - 20/07/19
FORMAT_DATE_DMYSLASH - 20/7/19
FORMAT_DATE_YYYYMMDDSLASH - 19/07/20
FORMAT_DATE_DMYMINUS - 20-7-19
FORMAT_DATE_DMMINUS - 20-7
FORMAT_DATE_MYMINUS - 7-19
FORMAT_DATE_XLSX14 - 07-20-19
FORMAT_DATE_XLSX15 - 20-Jul-19
FORMAT_DATE_XLSX16 - 20-Jul
FORMAT_DATE_XLSX17 - Jul-19
FORMAT_DATE_XLSX22 - 7/20/19 0:00 (วันที่อย่างเดียว) | 7/20/19 20:20 (วันที่ + เวลา)
FORMAT_DATE_DATETIME - 20/7/19 0:00 | 20/7/19 20:20
FORMAT_DATE_TIME1 - 12:00 AM (วันที่อย่างเดียว เวลาจะเป็นเที่ยงคืน) | 8:20 PM
FORMAT_DATE_TIME2 - 12:00:00 AM | 8:20:02 PM
FORMAT_DATE_TIME3 - 00:00 | 20:20 (ชั่วโมง:นาที)
FORMAT_DATE_TIME4 - 00:00:00 | 20:20:02
FORMAT_DATE_TIME5 - 00:00 | 20:02 (นาที:วินาที)
FORMAT_DATE_TIME6 - 00:00:00 | 20:20:02
FORMAT_DATE_TIME7 - i:0.0 | i:2.2
FORMAT_DATE_TIME8 - 0:00:00 | 20:20:02
นอกจากการจัดรูปแบบวันที่ และเวลาโดยใช้รูปแบบตัวแปรค่าคงที่ข้างต้นแล้ว เรายังสามารถกำหนดรูปแบบด้วยตัวเองในรูปแบบ
1 2 3 | $sheet ->getStyle( 'K2:K' .( $totalRow +1)) // จำนวนแถวทั้งหมด + จำนวนแถวที่เป็นหัวข้อ ->getNumberFormat() ->setFormatCode( "yyyy.mm.dd h:mm" ); |
โดยสามารถใช้ค่าเหล่านี้ เพื่อปรับแต่งตามต้องการ
d วันที่ไม่มี 0 นำหน้า
dd วันที่มี 0 นำหน้ากรณีเลขหลักเดียว
ddd ชื่อวันแบบย่อ เช่น Mon
dddd ชื่อวันแบบเต็ม เช่น Monday
m เดือนไม่มี 0 นำหน้า
mm เดือนมี 0 นำหน้ากรณีเลขหลักเดียว
mmm เดือนแบบย่อ เช่น Jul
mmmm เดือนแบบเต็ม เช่น July
yy ปีสองตัวท้าย
yyyy ปีสีหลัก
h หรือ hh ชั่วโมงมี 0 นำหน้ากรณีเลขหลักเดียว
:mm หรือ mm: นาทีมี 0 นำหน้ากรณีเลขหลักเดียว
ss วินาทีมี 0 นำหน้ากรณีเลขหลักเดียว
ต่อไปเป็นข้อมูลที่เป็นเปอร์เซ็นต์ หรือที่กำหนดในรูปแบบ 5% หรือ 12.155% สามารถใช้รูปแบบดังนี้
FORMAT_PERCENTAGE - 5% | 12% ปัดเศษ ถ้าข้อมูลเดิมมีทศนิยม
FORMAT_PERCENTAGE_00 - 5.00% | 12.16% แสดงทศนิยม 2 ตำแหน่ง ปัดเศษ
ต่อไปเป็นข้อมูลที่ต้องให้อยู่ในรูปแบบตัวเลข เช่นตัวเลข 0 และ 28111.35 สามารถใช้รูปแบบดังนี้
FORMAT_NUMBER - 0 ตัวเลขจำนวนเต็ม
FORMAT_NUMBER_00 - 0.00 ตัวเลขทศนิยม 2 ตำแหน่ง
FORMAT_NUMBER_COMMA_SEPARATED1 - 28,111.35 ตัวเลขทศนิยม 2 ตำแหน่งมีคอมม่าคั่น
นอกจากนั้นยังมีรูปแบบสำหรับจัดการข้อมูลทั่วไป และข้อมูลที่ต้องการกำหนดให้เป็น text โดยใช้รูปแบบ
FORMAT_GENERAL - ข้อมูลทั่วไป ถ้าเป็นตัวเลข จะชิดขวา แต่ถ้าเป็นข้อความที่ทั่วไปชิดซ้าย
FORMAT_TEXT - ข้อความ text ข้อความไม่ว่าจะเป็นตัวเลขหรือไม่ จะถูกแปลงเป็น text และชิดซ้ายใน cell
การใช้งานสูตรในพิกัด Cell
เราสามารถกำหนดค่าโดยกำหนดจากการใช้งานสูตร สมมติเช่น เราจะเพิ่ม ข้อมูลผลรวมของ คอลัมน์ B และ C จะได้เป็น
1 2 | $sheet ->setCellValue( 'B13' , '=SUM(B2:B12)' ); $sheet ->setCellValue( 'C13' , '=SUM(C2:C12)' ); |
ตัวอย่างผลลัพธ์

เราสามารถกำหนดค่าด้วยสูตร แล้วต่อด้วยการจัดรูปแบบข้อมูล เช่น สมมติเราต้องการตัวเลข มีคอมม่าคั่น และไม่มีเลขทศนิยม
ก็อาจจะกำหนดเป็นดังนี้
1 2 3 4 | $sheet ->setCellValue( 'B13' , '=SUM(B2:B12)' ) ->getStyle( 'B13' ) ->getNumberFormat() ->setFormatCode( '#,##0' ); // เช่น 1,123 |
ทุกครั้งที่เราเพิ่มข้อมูลเข้าไปในพิกัด Cell โดยขึ้นต้นด้วยเครื่องหมาย = จะเป็นการเรียกใช้งานการกำหนดสูตรให้กับพิกัด Cell ดังนั้นกรณี
ที่เราจำเป็นที่จะแสดงเครื่องหมาย = เริ่มต้น อาจจะเป็น cell ที่ต้องการแสดงสูตรที่ใช้งาน เช่นนี้ เราสามารถกำหนดพิกัด Cell นั้นให้เป็นแบบ
ข้อความโดยใช้คำสั่ง setCellValueExplicit() ตัวอย่างเช่น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $sheet ->setCellValueExplicit( 'B13' , '=SUM(B2:B12)' , \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING ); $sheet ->setCellValueExplicit( 'C13' , '=SUM(C2:C12)' , \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING ); // หรือจะใช้คำสั่ง setValueExplicit() ดังนี้ก็ได้ $sheet ->getCell( 'B13' ) ->setValueExplicit( '=SUM(B2:B12)' , \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING ); |
รูปแบบข้างต้น ตำแหน่ง B13 และ C13 จะแสดงข้อความ =SUM(B2:B12) กับ =SUM(C2:C12) ตามลำดับ แทนการแสดงค่าจาก
การคำนวณจากสูตร เราสามารถกำหนด DataType ให้กับพิกัด Cell ร่วมกับการใช้งานฟังก์ชั่น setCellValueExplicit() ด้วยค่าต่างๆ เหล่านี้ได้
TYPE_STRING2 ข้อความ
TYPE_STRING ข้อความ
TYPE_FORMULA สูตร
TYPE_NUMERIC ตัวเลข
TYPE_BOOL ค่า TRUE / FALSE ถ้าข้อมูลเป็นตัวเลขที่ไม่ใช่ 0 หรือไม่ใช่ NULL หรือเป็นข้อความ จะแปลงเป็น TRUE
TYPE_NULL ค่าว่าง
TYPE_INLINE ข้อความ richtext
TYPE_ERROR error
ตอนนี้เราได้เข้าใจเพิ่มเติมเบื้องต้น เกี่ยวกับการกำหนดค่าและจัดรูปแบบข้อมูลในพิกัด Cell ทั้งรูปแบบที่สะดวกโดยใช้งาน Value Binder
หรือแม้แต่การกำหนดรูปแบบข้อมูลใน cell แยกเฉพาะแต่ละพิกัด Cell ได้
เนื้อหาเกี่ยวกับ PhpSpreadsheet จะยังมีเพิ่มเติม รอติดตาม