วันพฤหัสบดีที่ 23 กันยายน พ.ศ. 2553

ABAP Excel ฉึก ฉึก : Hello World Excel

สวัสดีเพื่อน Abaper

     สำหรับ Abaper การทำ report เหมือนเป็นวิถีชีวิตที่ต้องเจอแทบทุกวันการสู้รบกับ ALV , List , Grid เป็นเรื่องที่ต้องเจอกันบ่อยๆ ซึ่ง User ก็จะบ่นมั่งล่ะว่าไม่เห็นสวยเลย อยากได้ให้เป็น Excel สวยๆหน่อยซึ่งคำพูดนี้ทำให้ผมเริ่มนำไปคิดหาวิธีที่จะทำ ให้ Report มันออกเป็น Excel มาให้ User เลย วิธีที่คิดได้ก็มีอยู่หลายวิธีเช่น เขียน Abap ไป Call OLE ของ MS Excel , ทำเป็น ALV แล้ว Save List ออกมาเป็น HTML หรือ Excel มีหลายวิธีอยู่แต่ละวิธีก็จะมีข้อดีข้อเสียต่างกันไป สุดท้ายผมเลยลองใช้การเอา Excel มา Save as เป็น HTML แล้วทำ Function Generate Header ของ Excel ออกมา กำหนด CSS หรือ Style Sheet ไว้ใน Header นี้เลย ผูกเข้ากับ Constant เอาไว้จะได้ไม่ต้องจำชื่อ และอื่นๆอีกมากมาย ซึ่งผมขอสรุปคร่าวๆดังต่อไปนี้ครับ แต่ก็ต้องออกตัวดังๆก่อนว่ามันยังไม่สมบูรณ์นะครับ ถ้ามีเพื่อน abap ท่านใดสามารถพัฒนาต่อยอดไปได้อีกผมยินดีอย่างยิ่ง และขอรับคำแนะนำจากทุกท่านครับ


     วิธีใช้ก็ไม่ยุ่งยากเพียงแต่จะต้องมีพื้นฐานการเขียน HTML นิดหน่อยเพราะผมแกะจาก code Excel ที่ Save as มาเป็น HTML ดังนั้น option ส่วนใหญ่จึงเหมือนกับการเขียน HTML เลย และต้องขอออกตัวไว้ก่อนว่ามันยังไม่สมบูรณ์ในบาง option ดังนั้นหากเพื่อน Abap ท่านใดสามารถแก้ไขเพิ่มเติมเพื่อให้โปรแกรมทำงานได้สมบูรณ์ขึ้นต้องขอความกรุณาแนะนำด้วยครับ

     ขั้นแรกเอา Function ไปลงก่อน
  1. Create Function Group ขึ้นมาก่อนเลย ผมใช้ ZGEXCEL
  2. Create Function Module ZG_GENERATE_EXCEL_HEADER copy code ในแปะเลยนะครับ
  3. Create Text Symbols ใน Function ข้อ 2 download file ตาม link นี้ แล้วค่อยถึกๆ copy & paste จนหมด ใครใช้ Log in 2 ภาษาก็อย่าลืม Translate ด้วยนะครับ 
  4. Create Include Program  ZGEXCEL01 และ ZGEXCEL02
  5. Activate Function Group ซะ

     คราวนี้มาลองดูตัวอย่างวิธีการนำไปใช้ Start-Of-Selection

  1. สร้างโปรแกรม ZEXCEL_HELLOWORLD
  2. Include ZGEXCEL01 และ ZGEXCEL02 *----------------------------------------------------------------------*
    * INCLUDE DECLARATIONS
    *----------------------------------------------------------------------*
    include zgexcel01.
    include zgexcel02.
  3. เรียกใช้ Function ZG_GENERATE_EXCEL_HEADER เพื่อสร้าง Header ของ File ขึ้นมาก่อน    call function 'ZG_GENERATE_EXCEL_HEADER'
        tables
          excel = gi_excel.  
  4. ทีนี้ก็มาเริ่มเขียนข้อมูลกันเลยเริ่มจากเรียก  perform table. และปิดท้ายไว้ก่อนด้วย  perform endtable. ในเบื้องหลังของ perform 2 ตัวนี้ก็คือการใส่ code tag <table> และ </table> เข้าไปใน internal table gi_excel
  5. ต่อจากนั้นระหว่าง perform table. และ perform endtable. จะเป็น perform tr. และ perform endtr. ตามหลักการเขียน HTML tag TR คือการบอกให้รู้ว่าข้อมูลและหว่าง tr และ endtr จะเป็นข้อมูลที่อยู่บนบันทัดเดียวกัน
  6. สุดท้ายคือการใส่ข้อมูลแค่ละ column หรือ TD จะใช้ perform td ซึ่งผมเองทำไว้หลาย version ใน include zgexcel02. มีตั้งแต่ perform td , perform td2 , perform td3 , perform td3_1 , perform td3_2 , perform td3_3 สำหรับในโปรแกรมตัวอย่างนี้ผมใช้ TD3_3 ซึ่งเป็นตัวล่าสุด Option สำหรับ Perform นี้มีดังนี้

       perform td3_3 using   c_1111        "style



                     space              "align
                     space              "width
                     space              "column span
                     space              "row span
                     space              "background color
                     space              "Field Type
                     space              "Format
                     space           "Text
                     gw_font.
    • Style concept ของ option นี้เหมือน การใช้ css ใน HTML Style ในที่นี้ จะสามารถกำหนด ให้ TD นี้มีเส้นของ Field นี้เป็นแบบใด โดยผมได้กำหนดเป็น constant  ไว้ใน include ZGEXEL01 เ่ช่น c_1111 คือมี เส้นแบบปกติรอบ TD เลย หรือ c_0000 คือไม่มีเส้นเลย 0 และ 1 จะแทนด้วยเส้นรอบ TD โดย 1 ตัวแรกจะแทนด้วย เส้นด้านบน 1 ตัวที่ 2 แทนเส้นด้านขวาและเรียงตามเข็มนาฬิกาจนครบรอบ 
      • 0 = ไม่มีเส้น
      • 1 = เส้นปกติ
      • 2 = เส้นหนา
      • 3 = เส้นคู่
      • 4 = เส้นปะไข่ปลา
      • 5 = เส้นปะแบบขีด
    • Align การจัดตัวอักษร
      • Center
      • Left
      • Right
    • Width จุดประสงค์จะให้เป็นตัวกำหนดความกว้างของ column แต่ยังไม่ Work  ใครแก้ได้ช่วยบอกแนะนำด้วยนะครับ
    • Col การรวม TD เข้าด้วยกัน
    • Row การรวม TR เข้าด้วยกัน
    • BGColor ทำ Backgroup เป็นสีต่าง ตัวนี้ก็ยังไม่ work ครับ
    • FieldType  ระบุชนิดของตัวแปล
      • String  เป็น Default Type
      • Num สำหรับต้องการแสดงเป็นจำนวนเงินหรือตัวเลข ต้องระบุ Format ด้วย
      • Date สำหรับวันที่ input format เป็น yyyyMMdd ออกใน Excel เป็น dd.MM.yyyy
    • Format ใช้คู่กับ FieldType Num  ใช้กำหนด ว่าจะให้มีทศนิยมกี่ตำแหน่ง
    • Text รับค่าของข้อมูลที่จะนำไปแสดง
    • Font input ตัวนี้เป็น Structure อ้างอิงจาก ZFONT
      • Size ขนาดของตัวหนังสือ ยังไม่ work
      • Color สีของตัวหนังสือ ระบุได้เป็น red,green,blue หรือให้ code RGB
      • Face ชนิดของ Font ยังไม่ work อีกละ แหะๆ
      • Bold ใส่ค่า X จะทำให้เป็นตัวหนา
      • Italic ใส่ค่า X จะทำให้เป็นตัวเอง


    ตัวอย่าง Excel ที่ได้หลังจาก Run Program ZEXCEL_HELLOWORLD
    Excel Hello World


    ไม่มีความคิดเห็น:

    แสดงความคิดเห็น