Porting Excel/VBA to
Calc/StarBasic
Title:
Porting Excel/VBA to Calc/StarBasic
Version:
1.0
First edition: June 6, 2004
First English
edition:
June 6, 2004
Pdf editor with search and replace text - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
select text in pdf; convert a scanned pdf to searchable text
Pdf editor with search and replace text - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
searching pdf files for text; converting pdf to searchable text format
Contents
Contents
Contents
...........................................................................................................................................ii
Overview
........................................................................................................................................iii
Copyright and trademark information
.......................................................................................iii
Feedback
....................................................................................................................................iii
Acknowledgments
......................................................................................................................iv
Modifications and updates 
........................................................................................................iv
Introduction
......................................................................................................................................1
Terminology
................................................................................................................................1
StarBasic Background
.................................................................................................................1
Understanding the OpenOffice Object Model
............................................................................2
Examples of Porting Visual Basic for Applications to StarBasic
....................................................4
General Programming Notes
.......................................................................................................4
Application
..................................................................................................................................5
Workbooks/Workbook
................................................................................................................7
Worksheets/Worksheet
.............................................................................................................11
Range/Cell
.................................................................................................................................14
Charts/Chart
..............................................................................................................................19
Controls
.....................................................................................................................................22
UserForms
.................................................................................................................................24
Integrated Development Environment (IDE) Differences
.............................................................33
Porting Sample Workbook [Spreadsheet]
......................................................................................35
Porting Tasks
.............................................................................................................................35
Run-time Experiences
...............................................................................................................39
Appendix A:  XRay tool
................................................................................................................40
Appendix B: Supporting Functions
...............................................................................................44
Appendix C:  Multi-Page Control
..................................................................................................48
Bibliography
..................................................................................................................................53
Public Documentation License, Version 1.0
..................................................................................54
Porting Excel/VBA to Calc/StarBasic
ii
C# PDF replace text Library: replace text in PDF content in C#.net
public void Replace(String oldString, String newString, RESearchOption option specified string text that match the search option from specified PDF page.
select text pdf file; search text in pdf image
VB.NET PDF replace text library: replace text in PDF content in vb
NET: Replace Text in PDF File. The following coding example illustrates how to perform PDF text replacing function in your VB.NET project, according to search
convert pdf to word searchable text; how to make a pdf document text searchable
Overview
Overview
Although OpenOffice 1.1 Calc is able to read Microsoft Excel workbooks, compatibility
extends primarily to functionality found in worksheets.  Excel workbooks with Visual Basic
for Applications (VBA) macros embedded do not function in Calc, even though VBA and
StarBasic (SB) are syntactically the same.  The reason Excel/VBA workbooks do not work
under Calc/SB is due to the differences in the underlying object models for Excel and Calc.
The intent of this document is to show, by way of examples, how to port VBA macros
accessing Excel objects to the equivalent SB macros accessing Calc objects.  This manual is
written from the perspective of an experienced Excel/VBA programmer.  Hence the reader is
assumed to know the VBA language and is familiar with the MS Excel Object Model.  This
document is not a tutorial on SB.
The information contained here is based on Excel 2000 and OpenOffice 1.1 object models.
A discussion covering all aspects of the Excel object model is beyond the scope of this
manual.  This manual's intent is to provide sufficient examples where the reader can get
started in porting VBA to SB and to point the reader to other references for more complete
information. 
This manual is a living document and is expected to be updated as more experience is gained.
The reader should feel free to contact the author to suggest areas to expand this document.
Copyright and trademark information
The contents of this Documentation are subject to the Public Documentation License,
Version 1.0 (the "License"); you may only use this Documentation if you comply with the
terms of this License. A copy of the License is available at:
http://www.openoffice.org/licenses/PDL.html
The Original Documentation is Porting Excel/VBA to Calc/StarBasic. The Initial Writer(s)
of the Original Documentation is/are James M. Thompson © 2004. All Rights Reserved.
(Initial Writer contact(s): masato12610@openoffice.org.)
Contributor(s): <
CONTRIBUTORS
NAMES
>
Portions created by <
CONTRIBUTORS
NAMES
>
are Copyright © <
YEAR
(
S
)>
. All Rights Reserved.
(Contributor contact(s):<
EMAIL
ADDRESS
>
).
All trademarks within this guide belong to legitimate owners.
Feedback
Please direct any comments or suggestions about this document to:
dev@documentation.openoffice.org
and masato12610@openoffice.org
Acknowledgments
Porting Excel/VBA to Calc/StarBasic
iii
C# HTML5 PDF Viewer SDK to view, annotate, create and convert PDF
framework class. An advanced PDF editor enable C# users to edit PDF text, image and pages in Visual Studio .NET project. Support to
how to make pdf text searchable; how to select text in pdf image
C# PDF delete text Library: delete, remove text from PDF file in
option). Description: Delete specified string text that match the search option from PDF file. Parameters: Name, Description, Valid Value.
convert pdf to searchable text online; search multiple pdf files for text
Overview
First, thank you to all the folks posting and responding on the various mailing lists and
forums.  These exchanges formed the basis for several examples found in this manual.
Second, I'd like to thank the following individuals who took time out of their busy schedule
to suggest changes to improve the document's readability and the code efficiency:  dfrench,
Geoff Farrell, Ian Laurenson, Andrew Pitonyak and Juergen Schmidt.  Lastly, I'd like to
express my sincerest thank you to my wife, Nora, for her patience and allowing me the time
to work on this manual.
Modifications and updates 
Version
Date
Description of Change
0.1
May 4, 2004
Preliminary version to show scope of coverage and proposed
level of detail for early feedback.
0.2
May 12, 2004
Add examples for Application, Workbooks, Workbook,
Worksheets, Worksheet, Range/Cell.  Add description of the
object information utility spreadsheet.  Miscellaneous
editorial changes.
0.3
May 23, 2004
Add examples to Range/Cell, UserForms, Controls.
Incorporated feedback from various reviewers.  Rewrote
Appendix A to cover XRay tool.  Add Appendix B for
supporting functions supporting functions developed for this
manual.
0.4
May 30, 2004
Miscellaneous editorial changes and code improvements.
Add examples for processing activation and deactivation
events for worksheets.  Document steps to port sample Excel
workbook to Calc spreadsheet.  Final preliminary draft prior
to public release.
1.0
June 5, 2004
Miscellaneous editorial changes and code improvements.
Added discussion on Multi-page Dialogs.  Added pointers to
reference material throughout document.
Porting Excel/VBA to Calc/StarBasic
iv
C# PDF Page Replace Library: replace PDF pages in C#.net, ASP.NET
You can replace an entire PDF page with another PDF page from another PDF file. All information, data on the original page are removed, including text, images
search pdf documents for text; search text in multiple pdf
C# PDF Text Highlight Library: add, delete, update PDF text
Description: Highlight specified string text that match the search option from PDF file. Parameters: Name, Description, Valid Value.
how to select text in a pdf; how to search pdf files for text
Introduction
Introduction
This chapter introduces the core concepts that provide a basis for the discussion that follows
in the rest of this document.
After establishing some core concepts, the document is composed of chapters that cover the
following topics:  
Examples that compare Visual Basic for Applications (VBA) code interacting with the
Excel object model to StarBasic (SB) code interacting with the OpenOffice object model.
Discussion on the differences between the integrated development environments (IDE)
provide with VBA and SB
Discussion on converting a sample Excel workbook with VBA macros into a Calc
Spreadsheet with SB macros.
Terminology
The terminology used in this document is geared toward Excel/VBA programmers because
they comprise the target audience.  The following convention is followed.  This manual uses
Excel specific terms, and if there is a different Calc term for the equivalent entity, it follows
the Excel term in square brackets.  See the following as illustrative examples:
workbook [spreadsheet]
worksheet [sheet]
StarBasic Background
For the Excel/VBA programmer, SB is a Basic programming language very similar to VBA.
The primary reason that VBA does not work in Calc, even though Calc is able to read the
Excel workbook, is that Calc uses a different method to access the workbook [spreadsheet]
components, such as cells on the worksheet [sheet].  The access mechanisms are different in
Calc.  Specifically the objects, attributes and methods use different names and the
corresponding behavior is sometimes slightly different. 
For those who wish a better understanding of SB, there are several documents publicly
available that explain the language and programming environment.  These documents, listed
in the Bibliography, can be found on the Web.
StarOffice 7 Software Basic Programmer's Guide
Migrating from Microsoft Office to StarOffice 7
Useful Macro Information For OpenOffice
How to Use BASIC Macros in OpenOffice.org 
These are excellent resources for those who are getting started in SB macro programming.
Porting Excel/VBA to Calc/StarBasic
1
C# WPF PDF Viewer SDK to view PDF document in C#.NET
WPF Viewer & Editor. WPF: View PDF. WPF: Annotate PDF. Read. Text: Extract Text from PDF. Text: Search Text in PDF. to PDF. Text: Delete Text from PDF. Text: Replace
pdf find and replace text; text searchable pdf
C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
PDF to Text. |. C#.NET PDF SDK - Convert PDF to Text in C#.NET. Empower C# Users to Convert PDF to Text (TXT) in Visual C# with .NET XDoc.PDF Converter Library.
convert pdf to searchable text; pdf find highlighted text
Introduction
Understanding the OpenOffice Object Model
Although this manual answers many questions about porting Excel/VBA macros  to Calc/SB,
it is not complete – not  all questions are answered.  The reader may find it necessary to refer
to the object model documentation for OpenOffice products.  For the Excel/VBA
programmer, it may take some some time to become comfortable with the way that
OpenOffice objects are documented.
The primary difference between the Excel object model and the OpenOffice object model is
that Excel's model does not take advantage of all of the features that constitute an object-
oriented programming environment.  In some publications, Microsoft's object model for their
products, such as Excel, is termed "object-like".  
In a true object-oriented programming model, there is the concept of inheritance.  This
concept allows one object's definition and implementation to be based on another object's
definition and implementation.  Microsoft's object-like model does not support inheritance.
To illustrate inheritance, consider the following example.  There is an object called "Shape"
with a method called "move()" that moves the "Shape" around on the display screen.  In a
true object-oriented programming environment, a new object called "Circle", which is a type
of "Shape", can be implemented in the following manner.  Instead of forcing "Circle" to
implement its own "move()" method for moving around the display screen, the "Circle"
object inherits the "move()" method from the "Shape" object.
The paradigm used in OpenOffice consists of interfaces and services. An interface defines
methods. If an object implements an interface then that object must support all of the
methods defined by the interface. An interface may be derived from another interface – i n
other word, inheritance. Assume that a "Circle" interface inherits from a "Shape" interface.
Any object that implements the "Circle" interface must implement every method defined by
both the "Circle" interface and the "Shape" interface. Although it is not possible to inherit
from more than one interface at a time, this is scheduled to be changed in a future release of
OpenOffice. A service defines an object by specifying the interfaces and properties that the
object supports – a  property may be defined as optional. A service may also specify that it
supports other services. An interface always contains an X in its name. For example, the
com.sun.star.drawing.XShape interface defines the methods to get and set a shapes position
and size. The com.sun.star.drawing.Shape service (notice that the X is missing from the
name) defines an object that has the XShape interface – i t supports a few other interfaces and
some properties as well. Although the services and interfaces contain long names, they are
frequently abbreviated by dropping the first part of the name; for example XShape.
In terms of an Excel/VBA programmer understanding the Calc/SB object model, the concept
of inheritance is important.  Consider the following situation. In Excel, assume there exists a
named range called 
Range("MyMatrix")
.    This respresents a two-dimensional array of
cells in a worksheet.  In Excel, to determine the number of rows in the range, a programmer
can accesses the range property 
Range("MyMatrix").Rows.Count
.
To find the equivalent information in Calc/SB, the programmer can consult the
"Spreadsheet" section in the OpenOffice Developer's Guide.  First, to access the range, there
is a method defined by the XCellRange interface called getCellRangeByName.  The
XCellRange interface is exported by many services including CellRange and Spreadsheet.
Porting Excel/VBA to Calc/StarBasic
2
Introduction
Using the method 
getCellRangeByName()
we are able to locate the range "MyMatrix" using
the call .
getCellRangeByName("MyMatrix")
From the "Spreadsheet" section of the Developer's Guide, the programmer sees that using the
service com.sun.star.sheet.SheetCellRange, we obtain access to the service
XColumnRowRange.  This services provides access to the columns and rows of the range.
From here we see that we can invoke the method 
getRows()
to retrieve the collection of rows
making up the range.
However, at this point it is not clear how to get the number of rows.  By remembering the
concept of inheritance, the programmer should realize that "rows" is a specialization of the
class "collection", and according the the object model, "rows" inherits from "collections"
Now looking at the methods associated for collections, the programmer sees in the
com::sun::star::container::XIndexAccess interface a method 
getCount()
that retrieves the
number of items in a collection.  
Putting all of this together we now have a way to determine the number of rows in a range of
cells.  The SB call looks like
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("MyMatrix").
getRows.getCount()
The moral of this little tale is that the Excel/VBA programmer, in making the transition to
StarBasic, should remember to consider the concept of inheritance.
The following URL are the main reference material for this manual:
http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html
http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
In doing research for this manual, a useful debugging tool was found.  The tool is called
XRay, developed by Bernard Marcelly, and can be found at
http://www.ooomacros.org/dev.php101416
.   XRay allows a programmer to inspect at run-
time the various Calc objects.  This is similar in function to the VBA debugger.  In
combination with the downloaded OOo SDK,  XRay is able to bring up SDK related
documentation for an object while you are using XRay to view Calc objects.  This feature is
useful in understanding the Calc object model.  Features of XRay are illustrated in Appendix
A.
Porting Excel/VBA to Calc/StarBasic
3
Examples of Porting Visual Basic for Applications to StarBasic
Examples of Porting Visual Basic for
Applications to StarBasic
This section is organized by MS Excel objects.  For the Excel objects covered in this manual,
Visual Basic for Application (VBA) code fragments are shown using a particular method or
property.  Along side the VBA code fragment, the equivalent, or as close to equivalent that is
possible, StarBasic (SB) code fragment is shown.
One general note on the difference between VBA and SB.  In VBA, when an Excel object is
referenced, such as a range of cells, unless explicitly coded, the cell range is assumed to be in
the currently active Excel container, such as the workbook (ActiveWorkbook) and worksheet
(ActiveSheet).  In SB, on the other hand, no such assumption is made, so each reference to a
Calc object must be fully qualified.  In other words, you have to specify the workbook
[spreadsheet] and worksheet [sheet].
One technique in Excel/VBA to determine macro code is to use the macro recording function
to get an initial set of code.  This resultant code can often be generalized.  
While the same technique can be used in Calc/SB, the experience to date in using the
technique has not been very successful.  The code generated by the macro recorder is based
on interacting with the spreadsheet versus recording the resultant manipulations of the
spreadsheet object model.
It is possible to generalize the recorded code.  However, it provides little insight into use of
the spreadsheet object model.  An alternative to using the native macro recorder feature in
Calc is to download the Calc macro recorder from http://ooomacros.org/user.php
written by
Paolo Mantovani.  Paolo's macro recorder creates a macro that primarily uses references to
the Calc objects rather than the more cryptic dispatcher calls. The macro guide at
http://www.math.umd.edu/~dcarrera/openoffice/docs/
contains an excellent description of
how to use the macro recorder and arrange your macros into libraries.
General Programming Notes
Indicator in Excel [Calc] that indicates a macro is currently executing.
Excel
The mouse pointer changes from an arrow to an hourglass.
Calc
The mouse pointer does not change.  There does not appear to be any
indication that a macro is running in Calc.
Manually terminating a macro executing
Excel
Ctrl-Break
Calc
Tools > Macros > Marco > Edit
Press Stop button
Assigning an object to a variable
Porting Excel/VBA to Calc/StarBasic
4
Examples of Porting Visual Basic for Applications to StarBasic
VBA Sub MyProc
Dim wksh as Worksheet
set wksh = ActiveWorksheet
End Sub
SB
Sub MyProc
Dim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
'or
set oSheet = ThisComponent.CurrentController.ActiveSheet
End Sub
Usage Note:  While the set statement is defined in SB, its use does not seem to be
enforced, as in VBA.  In Excel, in addition to the generic Object type,  there are various
specific object types (Worksheet, Workbook, Range, etc.), however, in Calc, there is
only the generic Object type.
Application
Object representing the workbook [spreadsheet] that is active
VBA ActiveWorkbook
SB
ThisComponent
Reference:
http://api.openoffice.org/docs/DevelopersGuide/ProfUNO/ProfUNO.htm#1+Professional+UNO
http://api.openoffice.org/docs/DevelopersGuide/BasicAndDialogs/BasicAndDialogs.htm#1+3+2+2+ThisC
omponent
Object representing the worksheet [sheet] in the workbook [spreadsheet] that is active
VBA ActiveSheet
SB
ThisComponent.CurrentController.ActiveSheet
Reference
:
http://api.openoffice.org/docs/DevelopersGuide/OfficeDev/OfficeDev.htm#1+Office+Development
http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XSpreadsheetView.html#getActiveSheet
Object representing the cell that is active
VBA ActiveCell
SB
ThisComponent.getCurrentSelection
Usage Note:  See Pitonyak's document (Chapter 18) for qualifications about this.  In a
nutshell, getCurrentSelection returns the object that currently has the focus just prior to
the start of the macro execution.  This is the ActiveCell only if a single cell has focus
just prior to start of the macro.
Porting Excel/VBA to Calc/StarBasic
5
Examples of Porting Visual Basic for Applications to StarBasic
Turn-off screen updating
VBA Application.ScreenUpdating = False
SB
ThisComponent.LockControllers
Reference:  
http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XModel.html#lockControllers
Turn-on screen updating
VBA Application.ScreenUpdating = True
SB
ThisComponent.UnlockControllers
Reference:
http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XModel.html#unlockControllers
Temporarily suspend the execution of the macro program for 1 second
VBA Application.Wait(Now + TimeValue("00:00:01"))
SB
Wait 1000
Usage Note: In SB, the Wait is part of the SB environment.  The argument  to the 
Wait
statement is the number of milliseconds to delay.   In testing this code, the VBA
procedure drove the processor to 100 per cent busy.  On the other hand the SB 
Wait
statement does not drive the processor to 100 percent busy.
Reference:  OpenOffice.org Basic On-line Help
Calling Excel [Calc] worksheet [sheet] function in VBA [SB]
VBA Sub MyProc
msgbox WorksheetFunctions.Average(Range("A1:A5"))
msgbox WorksheetFunctions.Max(Range("A1:A5"), _
Range("C1:C5))
End Sub
SB
Sub MyProc
Dim oSheet, FuncService
Rem Create service to access sheet functions
FuncService = _
createunoservice("com.sun.star.sheet.FunctionAccess") 
oSheet = ThisComponent.CurrentController.ActiveSheet
msgbox FuncService.callFunction("AVERAGE", _
array(oSheet.getCellRangeByName("A1:A5")))
msgbox FuncAcc.CallFunction("MAX", _
array(oSheet.getCellRangeByName("A1:A5"), _
oSheet.getCellRangeByName("C1:C5")))
End Sub
Usage Note:  Two arguments are needed for callFunction() method.  The first is a
string containing the name of the worksheet [sheet] function to invoke.  The second is
an array containing the arguments to that function.
Reference:
http://api.openoffice.org/docs/DevelopersGuide/Spreadsheet/Spreadsheet.htm#1+4+2+1+Calculating+Fu
nction+Results
and  http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XFunctionAccess.html
Porting Excel/VBA to Calc/StarBasic
6
Documents you may be interested
Documents you may be interested