Nếu bạn đã từng quen thuộc với chương trình bảng tính Excel trong Microsoft Office, chắc bạn cũng để ý thấy OpenOffice không hỗ trợ Visual Basic for Applications (VBA), ngôn ngữ marco của Microsoft Office. Nếu bạn đã phải mất hàng năm trời bỏ công xây dựng hàng trăm marco Excel, nỗi lo sợ về khả năng mất dữ liệu khiến bạn giữ gìn chúng cẩn thận trong Office là điều dễ hiểu. Nhưng hiện nay Novell đã sử dụng mã nguồn của OpenOffice.org để tạo ra phiên bản riêng hỗ trợ Excell VBA.
Noel Power là nhà phát triển của Novell phụ trách giới thiệu thành phần thao tác Excel VBA cho OpenOffice.org Calc. Theo ông, sở dĩ các thao tác này hoàn thiện bởi:
- Nó cho phép các marco Excel VBA chạy tự nhiên bên trong OpenOffice.org.
- Cung cấp mô hình đối tượng tương thích.
- Nâng cấp liên tục mô hình tương thích bằng cách xác định và triển khai các API được dùng rộng rãi và hữu ích nhất.
- Mở rộng biểu tượng cho mức cơ bản ooo-basic, bao gồm cả API tương thích.
- Sửa đổi chế độ chạy thực cơ bản ooo lõi (core ooo-basic runtime) để điều khiển cú pháp Excel VBA.
"Novell đang mang lại cộng đồng lớn hơn cho sản phẩm của mình. Mã nguồn hoàn toàn miễn phí trên OpenOffice.org Hackers Pages, phần hướng dẫn cách thức xây dựng trên trang xây dựng của OpenOffice.org được cung cấp cho mọi người. Hơn nữa chúng tôi rất hân hạnh được nói rằng chúng tôi đã bổ sung thành phần thao tác VBA vào các phiên bản OpenOffice.org của Novell dành cho Windows", Noel nói.
Nếu bạn muốn xây dựng phiên bản OOo mới, các bước sau là đơn giản và dễ làm nhất:
- Tải mã nguồn về.
- Tiến hành cấu hình hệ thống. Đây là phần đòi hỏi mức độ công việc chuyên sâu nhất trong chương trình. Thông tin phản hồi bạn thu được rất hữu ích. Vấn đề là bạn phải đưa ra được quyết định chính xác về file bổ sung hệ thống đòi hỏi hay phần chương trình cài đặt bạn muốn vô hiệu hoá.
- Download các gói OOo thực (bạn chỉ cần gõ "./download" sau mỗi lần cấu hình được thiết lập hoàn chỉnh).
- Tạo ứng dụng.
Dẫu vậy, có thể bạn chẳng phải tự mình làm tất cả các việc trên. Đến nay VBA đã được hỗ trợ trong các phiên bản OpenOffice.org sau:
• Ark
• Debian
• DroplineGNOME
• Frugalware
• Gentoo
• Mandriva
• QiLinux
• Red Hat (FC6)
• Ubuntu
• SUSE and SUSE SLED
Đáng tiếc, không có cách dễ dàng nào xác định liệu chương trình của bạn có hỗ trợ các hoạt động VBA phân tách hay không ngoại trừ cách thử một số mã VBA. Theo Noel: "Bạn có thể dùng bộ tổ chức cơ bản ooo-basic (Tools -> Macros -> Organize Macros -> OpenOffice.org Basic) và chuyển hướng sang văn bản nếu văn bản có chứa các marco. Chúng không được chú thích và nhiều khả năng thành phần được cho phép hoạt động".
Nếu bạn cài đặt một phân phối được hỗ trợ hay phiên bản OpenOffice.org của Novell trên hệ điều hành Linux bạn đang sử dụng hoặc cài đặt OpenOffice.org của Novell cho Windows thì bất kỳ marco Excel nào cũng làm việc được trong Calc? Câu trả lời là không! VBA không được hỗ trợ đầy đủ đến mức hoàn hảo. Nhưng theo Noel: "Chúng tôi nghĩ chúng tôi đã bao quát được một lượng lớn các kiểu sử dụng thông thường. Các marco chúng tôi đưa ra hầu hết đều sử dụng tập con các đối tượng trong Excel API (như Range, Worksheet, Workbook…). Chúng tôi tập trung hỗ trợ các đối tượng đó và các phương thức, thuộc tính của chúng".
Nếu bạn có chương trình Excel riêng, bạn có thể đem ra thử lại và xem chuyên gì xảy ra. Các marco sẽ chạy giống như bạn đang mở văn bản trong Excel vậy. Nếu không có Excel của Microsoft Office, bạn có thể dùng hypocycloid-demo.xls. Một hypocycloid xác định được đường dẫn của một điểm cố định trong vòng tròn khi nó quay vòng bên trong vòng tròn lớn hơn. Bảng tính sẽ tạo ra các hypocycloid khác cho bạn. Nếu đang dùng OpenOffice.org có hỗ trợ VBA, tất cả các nút và con trượt sẽ hoạt động, thay đổi ảnh nền trên màn hình mặc dù thực sự tất cả mã nguồn được viết ra từ Excel VBA.
Mọi thứ khác như thế nào nếu bạn load hypocycloid-demo.xls vào một phiên bản OpenOffice.org không hỗ trợ VBA? Khi đó OpenOffice.org sẽ mở một trang tính Excel ngay cả trong trường hợp nó có chứa các marco VBA. Nhưng khi bạn ấn bất kỳ nút nào, chẳng có gì xảy ra cả. Và điều quan trọng nhất là bạn không nhận được bất cứ thông báo lỗi nào.
Chúng ta hãy cùng xem xét mã nguồn trong OOo Basic Editor. Vào menu OpenOffice.org, kích mở Tools -> Macros -> Organize Macros -> OpenOffice.org Basic.
Sub VBA_Library
Rem Sub openWorkbooks (iFiles())
Rem Dim wBook as Workbook
Rem Dim wList as String
Rem Dim iFile as String
Rem
Rem For Each iFile in iFiles
Rem Workbooks.Open iFile
Rem Next iFile
Rem
Rem For Each wBook In Workbooks
Rem wList = wList & wBook.Name & chr(13)
Rem Next wBook
Rem Worksheets("Sheet2").Range("A1") = Now()
Rem msgbox Workbooks.Count & " files open:" & chr(13) & chr(13) & wList
Rem End Sub
End Sub
Bạn sẽ thấy OpenOffice.org chuẩn điều khiển mã VBA trong một modul. Tất cả mã VBA được đưa vào một comment, sau đó được đóng gói vào một thường trình con mới (subroutine) có cùng tên với modul.
Nếu dùng OpenOffice.org có hỗ trợ VBA, bạn sẽ thấy khác:
Option VBASupport 1
Sub openWorkbooks (iFiles())
Dim wBook as Workbook
Dim wList as String
Dim iFile as String
For Each iFile in iFiles
Workbooks.Open iFile
Next iFile
For Each wBook in Workbooks
wList = wList & wBook.Name & chr( 13 )
Next wBook
Worksheets( "Sheet2" ).Range("A1") = Now()
msgbox Workbooks.Count & " files open:" & chr(13) & chr(13) & wList
End Sub
Phiên bản OpenOffice.org Calc bổ sung thêm dòng mã mở rộng vào bất kỳ modul nào được load và có chứa mã VBA.
Option VBASupport 1
Dòng mở rộng này không ảnh hưởng đến mã cơ bản tiêu chuẩn Basic OOo nhưng đảm bảo cho việc nhận diện các hoạt động VBA được chính xác. Nếu bạn thích các lệnh VBA hơn (hoặc nếu bạn sử dụng thường xuyên hơn một cách thức nào đó), bạn phải nhớ bổ sung nó vào khi tạo các modul VBA riêng của mình trong Calc.
Dẫu vậy vẫn chưa có giải pháp cho dòng OOo chính. Sun đã xây dựng được một giải pháp độc quyền riêng nhưng còn một số điểm hạn chế. Tại OOoCon trong năm nay, Novell tiến hành một số cuộc thảo luận thẳng thắn với các nhà phát triển của Sun và đạt được một số điểm trong thoả thuận hợp tác giữa hai công ty. Novell đang có kế hoạch hoàn thiện chương trình trong hai tháng tới.
Tại thời điểm hiện nay, thành phần thao tác của VBA mới chỉ dừng ở các hoạt động phổ biến sử dụng chuẩn xây dựng ooo-build. Nhưng một số bước cải thiện đã được tiến hành nhằm tiến gần hơn đến mục đích tích hợp tất cả hoạt động này vào một nguồn OpenOffice.org chính. Các điều chỉnh thay đổi cân đối chế độ chạy thực cơ bản cốt lõi đã được đưa vào phiên bản 'vanilla' của OpenOffice.org, nhưng API tương thích và một số móc nối khác thì không. Hiện Novell và Sun vẫn đang tiếp tục thảo luận về các thoả thuận để đưa toàn bộ phần bổ sung vào một dòng chính. Vì đây là thành phần phức tạp và động chạm tới nhiều phần mã nguồn nên công việc này không thể xem thường và tốn khá nhiều thời gian.