Export Excel ด้วย PHP

Export Excel ด้วย PHP

พอดีว่าช่วงนี้ เป็น outsource พัฒนาระบบ CRM ให้เว็บที่รวมสินค้ามือสองแห่งหนึ่ง ก็เนื่องด้วยระบบ report ต่างๆ เช่น การสั่งซื้อสินค้า อะไรต่างๆ เค้าต้องการให้สามารถ export ออกมาเป็น excel ได้เพื่อที่จะได้สามารถนำไปใช้งานต่อ เช่นเอาไปคิดค่า commission ดังนั้นงานก็ตกมาอยู่ที่ผมเลยครับ ไม่เคยเขียนซะด้วยสิ

แต่วันเดียวก็เขียนจนเสร็จครับ มีตัวช่วย ทำให้งานง่ายกว่าที่คิดเอาไว้เยอะเลย ตัวช่วยที่ว่านั่นก็คือ Class ที่มีคนเขียนเอาไว้ให้เราใช้นั่นเองครับ ก็โหลดมาใช้ แล้วก็เรียกใช้งาน function ต่างๆที่เค้าเตรียมไว้ให้ แป้บเดียวเสร็จแล้วครับ

พร่ำมาก น้ำลายแตกฟองอีกแล้ว เริ่มเลย ด้วยการโหลดไฟล์ Class สำหรับ export file เป็น excel ด้วย php

สำหรับรายละเอียดของสคริปนี้สามารถเข้าไปอ่านได้ที่ http://www.bettina-attack.de/jonny/view.php/projects/php_writeexcel/

เริ่มต้นให้เราสร้างไฟล์ขึ้นมา 1 ไฟล์นะครับ แล้ว ใส่เข้าไปตามนี้เลยครับ (ไฟล์นี้ คือไฟล์ example-simple.php ที่อยู่ในแฟ้มที่ให้โหลดครับ)

  1. <?php
  2. set_time_limit(10);
  3. require_once "class.writeexcel_workbook.inc.php";
    require_once "class.writeexcel_worksheet.inc.php";
  4. $fname = tempnam("/tmp", "simple.xls");
    $workbook = &new writeexcel_workbook($fname);
    $worksheet = &$workbook->addworksheet();
  5. # The general syntax is write($row, $column, $token). Note that row and
    # column are zero indexed
    #
  6. # Write some text
    $worksheet->write(0, 0, "Hi Excel!");
  7. # Write some numbers
    $worksheet->write(2, 0, 3); # Writes 3
    $worksheet->write(3, 0, 3.00000); # Writes 3
    $worksheet->write(4, 0, 3.00001); # Writes 3.00001
    $worksheet->write(5, 0, 3.14159); # TeX revision no.?
  8. # Write two formulas
    $worksheet->write(7, 0, '=A3 + A6');
    $worksheet->write(8, 0, '=IF(A5>3,"Yes", "No")');
  9. # Write a hyperlink
    $worksheet->write(10, 0, 'http://www.php.net/');
  10. $workbook->close();
  11. header("Content-Type: application/x-msexcel; name=\\"example-simple.xls\\"");
    header("Content-Disposition: inline; filename=\\"example-simple.xls\\"");
    $fh=fopen($fname, "rb");
    fpassthru($fh);
    unlink($fname);
  12. ?>

โดยไฟล์ที่สร้างขึ้นมานี้ ต้องอ้างอิงไฟล์ class.writeexcel_workbook.inc.php และ class.writeexcel_worksheet.inc.php ให้ถูกต้องด้วยนะครับ ถ้าอยู่คนละแฟ้มก็อ้างอิงเข้าไปที่ตัวไฟล์ให้ถูกต้อง อันนี้ถือเป็นข้อสังเกตแรกที่ต้องตรวจสอบให้ดีครับ

save แล้วรันไฟล์นี้ก็ได้ excel ออกมาแล้วครับ ....จบครับ

ง่ายไปไหมครับ 555 หากินง่ายๆ งั้นขออธิบาย function ที่ใช้งานดีกว่าครับ จะได้เอาไปประยุกต์ใช้งานกันได้

$worksheet = &$workbook->addworksheet(); ///บรรทัดนี้ เอาไว้สร้าง worksheet ใหม่นะครับ (ถ้าเปิดโปรแกรม excel ครั้งแรกจะเป็นว่ามันมี 3 แผ่นนั่นล่ะครับ) ถ้าต้องการเพิ่มอีกอัน ก็สร้าง object ขึ้นมาใหม่อีกอัน เช่น $worksheet2 = &$workbook->addworksheet('NameOfWorkSheet'); (เพิ่มบรรทัดนี้นะครับ ไม่ใช่แก้อันเดิมให้เป็นอันนี้) โดยเราจะได้ object $worksheet2 เป็นหน้า worksheet อีกแผ่นนึงครับ แล้วผมก็ตั้งชื่อเอาไว้ด้วยเลย โดยให้ชื่อว่า NameOfWorkSheet นั่นเองครับจะสร้างกี่ sheet ก็จัดไปเยอะๆครับ

$worksheet->write(0, 0, "Hi Excel!"); /// ถ้าอ่านย่อหน้าบนแล้ว ตอนนี้เราก็จะได้ สอง worksheet แล้วนะครับ คือ $worksheet และ $worksheet2 ซึ่งถ้าเราจะใส่ค่าใน worksheet ไหนก็ใส่ค่าเข้าไปใน member ของ object นั้นได้เลยครับ อย่างโค้ดตัวอย่างนี้ คือการใส่คำว่า Hi Excel! เข้าไปใน row ที่ 1 column ที่ 1 (A1 นั่นเองครับ) แต่ถ้าเราจะขยับมันก็ได้เลยครับ เช่น $worksheet->write(0, 5, "Hi Excel!"); ข้อความดังกล่าวก็จะย้ายไปที่ row ที่ 1 column ที่ 6 ทันทีครับ (F1 นั่นเองครับ) ที่ต้องระวังเรื่องการอ้างอิงก็คือ A มีค่าในส่วน column ซึ่งตัว A มีค่าเป็น 0 นะครับ ดังนั้น การอ้างอิง column ที่ 2 มันคือ column C ใน excel ไม่ใช่ column B อันนี้ต้องระวัง รวมไปถึง Row ด้วยเช่นกัน Excel จะเริ่มที่ row 1 แต่ว่าการอ้างอิงในการเขียนโปรแกรมจะเริ่มอ้างอิงที่ 0 ดังนั้น การเขียนค่าใดๆใส่บรรทัดที่ 2 ก็ต้องอ้างอิงว่า 3 นะครับ

ดูท่าจะงงกันแน่ๆ ดูตามนี้ดีกว่าครับ การอ้างอิง โดยเลขตัวแรกคือ row ตัวหลังคือ column

การอ้างอิง row, column ในโปรแกรม export excel ด้วย php

ใส่สูตรคำนวณก็ได้นะครับ เช่น $worksheet->write(7, 0, '=A3 + A6');ตามตัวอย่างก็คือการเอา A3+A6 นั่นเองครับ

นอกจากนี้ยังมี function อื่นๆอีกมากมายเลยครบ เช่นเราสามารถกำหนด format ให้มันก็ได้ ตัวอย่าง

  1. $worksheet->set_column('A:B', 32);
  2. $heading =& $workbook->addformat(array(
    bold => 1,
    color => 'blue',
    size => 18,
    merge => 1,
    ));
  3. $headings = array('Features of php_writeexcel', '');
    $worksheet->write_row('A1', $headings, $heading);

เป็นการกำหนด ตัวหนา สี ขนาดตัวอักษร ให้กับ A1 นะครับ โดยจะมีผลที่บรรทัด $worksheet->write_row('A1', $headings, $heading); โดยที่ $headings คือข้อความ ตัว $heading คือ format ที่ถูกกำหนดเอาไว้นั่นเองครับ

ทั้งนี้ มีข้อสังเกตอีกจุดก็คือการตั้งค่า worksheet ควรใช้ตัวแปรให้ถูกนะครับ เช่นเราต้องการกำหนดความกว้าง column A เราจะเขียนได้ว่า
$worksheet->set_column('A:A', 32);

แต่กลับกัน ถ้าเราต้องการกำหนดรูปแบบข้อความเราต้องเขียนว่า

  1. $heading =& $workbook->addformat(array(
  2. bold => 1,
  3. color => 'blue',
  4. size => 18,
  5. merge => 1,
  6. ));

แล้วก็เอา $heading ไปใช้เป็น object เพื่อกำหนด format ต่อไปครับ

กรณีนี้ คนที่เขียน PHP 4 จะค่อนข้างงง เพราะว่าไม่ค่อยได้จับ OOP เท่าไรครับ แต่เชื่อว่าไม่ยากจนเกินไป

ทั้งนี้ ดูตัวอย่างอื่นๆเพื่อประกอบความเข้าใจได้เลยครับ ซึ่งอยู่ในแฟ้มที่ให้โหลดนั่นเองครับ

Create: Modify : 2008-12-30 07:00:00 Read : 14582 URL :