เกร็ด office บนลินุกส์ (OpenOffice.org)

ได้ลองทดสอบโปรแกรมสำนักงาน เฉพาะเรื่องกระดานคำนวณ

งานเก่าเป็น Excel ทั้งหมด มีรายการคำนวณไม่ซับซ้อน แต่มีปริมาณแผ่นงานมาก
ขนาดไฟล์ (XLS) 1.3 MB โดยมีเป้าหมายคือ ในระยะแรก ต้องทำงานร่วมกับวินโดวส์ได้ด้วย

ทดสอบกับอูบุนตู dapper และเดเบียน etch
ได้เรื่องว่า

openoffice2
ทำงานช้ามาก และมีปัญหาเข้ากับ Excel ไม่ได้
kspread
เปิดไฟล์ไม่ได้ crash เสียก่อน
gnumeric
เร็วที่สุด การทำงานใกล้เคียง Excel ที่สุด เมื่อบันทึกไฟล์กลับ สามารถเปิดด้วย Excel ได้

อย่างไรก็ตาม ก็ยังมีปัญหาบางประการ เช่น

  • ฟอนต์ Norasi มีปัญหาตอนพิมพ์ ตัวหนังสือเพี้ยนแหลก แก้ด้วยใช้ฟอนต์ FreeSerif แทน
  • หน้าชีตเละ แก้ด้วยการแทรกหน้าสำหรับการพิมพ์จากลินุกส์โดยเฉพาะ โดยมีเนื้อหาสูตรเหมือนกับหน้าเก่า แต่มาจัดรูปแบบใหม่

งานนี้จึงเลือกใช้ gnumeric ในการทำงานร่วมกับวินโดวส์ครับ

openoffice: ค้นหาและแทนที่

ต้องการค้นหาและแทนที่ เอกสาร OpenOffice-Writer ที่บันทึกไว้เป็นนามสกุล .doc
(เพื่อให้ใช้งานข้ามระบบได้ เลยบันทึกเป็น .doc ตระกูล Microsoft-Word)
โดยต้องการทำงานเป็นแบตช์ คือค้นหาและแทนที่คำว่า OLD ด้วยคำว่า NEW กับทุก ๆ ไฟล์

แก้ปัญหาโดยต้องเข้าไปสร้างคำสั่งมาโครภาษาเบสิกไว้ก่อน แล้วจึงสั่งงานด้วยบรรทัดคำสั่งในเชลล์อีกทีนึง

เริ่มด้วย ไปที่เมนู
Tools -> Macros -> Organize Macros -> OpenOffice.org Basic
-> My Macros -> Standard

เลือก New

ตั้งชื่อรูทีนว่า BatchFixMissSpell

...
Sub BatchFixMissSpell(cFile)
  rem Load file
  cURL = ConvertToURL( cFile ) 
  rem Set document
  oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", SELF, Array() )
  rem Create Search Descriptor
  FandR = oDoc.createSearchDescriptor()
  rem Set search/replace string
  FandR.setSearchString("OLD") : FandR.setReplaceString("NEW")
  rem Do replace
  oDoc.ReplaceAll(FandR) 
  rem Save file
  oDoc.storeToURL( cURL, Array() )
  rem Write & exit
  oDoc.dispose()
End Sub
...

บันทึกแล้วออกจากทั้งโปรแกรมมาโคร และ OpenOffice-Writer เลย

สมมุติถ้าจะค้นและแทนที่กับทุกไฟล์ที่เป็นนามสกุล .doc ใช้คำสั่งในเชลล์ว่า
$ for i in *.doc; do soffice -invisible "macro:///Standard.Module1.BatchFixMissSpell(`pwd`/$i)"; done

เวลาใช้งานจริงอาจเก็บเป็นคำศัพท์ที่ผิดบ่อยแล้วเขียนลงไว้หลาย ๆ ศัพท์ น่าจะดี

อ้างอิง

เพิ่มเติม

  • เวลาใช้งานกับชื่อไฟล์ภาษาไทย อาจมีปัญหาตอนส่งผ่านอาร์กิวเมนต์ อาจแปลงชื่อไฟล์เป็นอังกฤษก่อน แล้วจึงแปลงกลับ บรรทัดคำสั่งเป็นดังนี้
    $ for i in *.doc; do \
        echo $i;\
        cp "$i" xxx.doc;\
        soffice "macro:///Standard.Module1.BatchFixMissSpell(`pwd`/xxx.doc)";\
        mv xxx.doc "$i";\
    done
  • ถ้าไฟล์ใหญ่ ดูเหมือนหลังจากทำไปสัก 10 ไฟล์ จะช้าลงจนค้างไปเลย ยังไม่ทราบวิธีแก้ (การยกเลิกตัวเลือก -invisible ช่วยได้เล็กน้อย)

openoffice: สร้าง pdf

มีโจทย์คือ จะสร้างเอกสาร pdf จากหนังสือภาพสี
ขั้นตอนคือ

  • สแกนหน้าหนังสือทั้งหมดไว้ (หน้าสีเก็บเป็น jpg หน้าขาวดำเก็บเป็น tif)
  • ตบแต่งภาพที่สแกนไว้ด้วย gimp
  • นำภาพที่ตบแต่งเสร็จแล้ว insert เข้าใน openoffice
  • ใช้ openoffice ส่งงานออกเป็น pdf

จบ