วันศุกร์ที่ 22 ตุลาคม พ.ศ. 2553

เปลี่ยนตัวเลขอาราบิก ให้เป็นเลขไทยบน OpenOffice.org Writer ด้วยมาโคร

Share it Please
เนื่องจาก @gumara ได้ฝากถามมาว่าบน OpenOffice.org สามารถกด keypad แล้วพิมพ์เป็นเลขไทยได้ไหม เพราะพวกหนังสือราชการนั้นจำเป็นต้องเป็นเลขไทย ให้คอยมากด shift + เลข ก็เสียเวลา

ปัญหาดังกล่าวไม่สามารถทำได้บน OpenOffice.org เนื่องมาจาก key ที่ให้เราสามารถตั้งค่าการทำงานต่างๆ บน OpenOffice.org มีอยู่จำกัดและไม่สามารถเพิ่มเองได้เหมือนกับ Microsoft Office ดังนั้นผมจึงคิดว่าควรทำเป็น extension หรือ ง่ายกว่านั้นก็คือ macro 

ดังนั้นผมจึงเขียนมาโครที่ทำการ convert ตัวเลขอาราบิกทั้งหมดภายในเอกสารให้กลายเป็นตัวเลขไทยซะดังนี้

sub main
  dim descriptor
  dim foundall
  dim found
 
  descriptor = ThisComponent.createSearchDescriptor()
  thainum = array("๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙")
  for num = 0 to 9
    with descriptor
      .SearchString = num
      .SearchCaseSensitive = False
    end with
  
    foundall = ThisComponent.findall(descriptor)
    for i = 0 to foundall.getcount() -1
      found = foundall.getbyindex(i)
      found.setstring(thainum(num))
    next
  next
end sub

แค่นี้ เมื่อกดรันมาโครดังกล่าว ตัวเลขภายในเอกสารของเราก็จะกลายเป็นเลขไทยแล้ว

-----------------------------------------------------------

เพิ่มเติมอีกนิด สำหรับการแก้ไขเลขไทยเฉพาะส่วนที่คลุมครับ

sub mainselected
  dim leftpos
  dim rightpos
  dim found
  dim descriptor

  descriptor = ThisComponent.createSearchDescriptor()
  thainum = array("๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙")
  for num = 0 to 9
    with descriptor
      .SearchString = num
      .SearchCaseSensitive = False
    end with
    leftpos = thiscomponent.getcurrentcontroller().getviewcursor().getstart()
    rightpos = thiscomponent.getcurrentcontroller().getviewcursor().getend()

    found = thiscomponent.findnext(leftpos.getstart(), descriptor)
    do while not isnull(found)
      if -1 = thiscomponent.gettext().compareRegionEnds(found, rightpos) then exit do
      found.setstring(thainum(num))
      found = thiscomponent.findnext(found.end, descriptor)
    loop
  next
end sub

-----------------------------------------------------------
update

ทำเป็น extension เพื่อให้ติดตั้งแล้วใช้งานได้ทันทีครับ


download

เมื่อติดตั้งแล้วจะอยู่ที่เมนู format > convert to native number ครับโดยต้องคลุมก่อนแล้วเลือกใช้งานครับ

8 ความคิดเห็น:

  1. ขอบคุณค่ะ แต่ว่าตัวเลขที่เป็น numbering ยังเป็นเลขอารบิกอยู่เลยค่ะ
    ช่วยเขียนมาโครให้ด้วยได้มั้ยคะ

    ตอบลบ
  2. แล้วจะนำส่วนของคำสั่ง นี่ไปใส่ใน macro ไหนอะครับ ขอทราบข้อมูลเพิ่มเติมด้วยนะครับพอดีไม่ทราบจริงๆ (ทดลองไปไว้ใน word office แล้วที่เกี่ยวกับ macro แต่ก็ไม่ได้)

    ตอบลบ
  3. ไม่ต้องทำอะไรมากครับ
    ในโปรแกรม openOffice.org writer
    ไปที่ tool เลือก option แก้ไขที่ -language setting – complex text leyout
    เปลี่ยน อารบิก เป็น ระบบ
    จะเปลี่ยนทั้งหน้ากระดาษ และแป้นพิมพ์เลขได้เลยครับ555555//////1111

    ตอบลบ
  4. @sunida ในส่วนของ numbering นั้นต้องแก้ไขในแต่ละ numbering ครับโดยคลิกที่ bullets and numbering บน toolbar แล้วเลือก numbering type เป็นเลขไทยครับ

    @Jatuporn ส่วนมาโครนี้เอาไปไว้ที่ Tools > Macro > Organize Macros > OpenOffice.org Basic.. ครับหรือกดปุ่ม Alt+F11 บน keyboard ก็ได้ จากนั้นที่ My Macros > Standard > Module1 ให้คลิกปุ่ม edit ด้านขวามือ จากนั้นนำ macro ไปวางได้เลยครับ โดยลบข้อความที่มีอยู่ออกให้หมดก่อน // การใช้งาน ให้ไปที่ Tools > Macros > Organize Macros > OpenOffice.org Basic (Alt+F11) จากนั้นเลือกมาโครที่เราต้องการแล้วกดปุ่ม run ด้านขวามือครับ

    @vichian เป็นวิธีที่ง่ายและดีมากครับ แต่จะใช้งานไม่ได้ผลกับบางกรณีเช่น ไม่ได้ใช้ locale เป็นภาษาไทย หรือต้องการเลขอาราบิกบางคำบนเอกสารครับ

    ต้องขออภัยทุกท่านจริงๆ ที่เข้ามาตอบช้า

    ตอบลบ
  5. ไม่ระบุชื่อ17 เมษายน 2554 เวลา 23:12

    ตัวเลขส่วนที่อยู่ในตารางไม่สามารถใช้ Macro ตัวนี้ได้นะค่ะ ลองดูแล้วค่ะ

    ตอบลบ
  6. ขอบคุณครับที่แจ้ง bug ตอนนี้ทางผมกำลังแก้ไขอยู่ ถ้าเสร็จแล้วคงได้ blog ลงอีกทีครับ

    ตอบลบ
  7. ไม่ทราบว่ามี blog ที่บอกวิธีเปลี่ยนตัวเลขอาราบิก ให้เป็นเลขไทยบน LibreOffice.org Writer ด้วยมาโคร บ้างไหมครับ

    ตอบลบ
  8. ลองตัวนี้ดูครับ

    https://docs.google.com/file/d/0B--ZYAUe6OWzRk40dW0tS1FndUk/edit?usp=sharing

    ตัวนี้เป็นตัวที่ผม Develop แล้วทาง SIPA เอาไป Dev ต่อแต่ผมยังไม่ได้ Test นะครับแต่น่าจะโอเค

    ตอบลบ

Blogroll

About