Documentation
Download Latest Version Index JumpStart FAQ History
CapeSoft Logo

CapeSoft Office Inside
Documentation

Installed Version Latest Version

Start Here!

Welcome to Office Inside! If you are new to Office Inside, or if you have not used the product for a while, these steps should get you going in the right direction.

Whether you are just starting off with this product, or are wanting to see what features the current version offers, or are wanting to find out how to do something with Office Inside, the best place to start is typically with the examples. The abc "Demo" app is the most comprehensive of the examples, and will show most of the features which Office Inside has to offer. A good place to start is to compile this example application and spend a few minutes having a look at what it can do ( we recommend doing this each time you install a new version of Office Inside also ). Once you have found what you're wanting to do, you can then have a look at the source code to see how we did it. This documentation explains the various objects, templates, and function calls which we use, but the example is easier to get your teeth into, and we'd suggest using this documentation more as a reference than as something which you read from start to finish. A common question is "Office Inside is so big, how do I find what I'm looking for?". To answer that question see the section titled Getting Started with Office Automation. It's best to have a specific task in mind and begin with that. You can then go specifically to either the Excel, Word, Outlook or PowerPoint docs to get jumpstarted into that task for the specific Office application that you are wanting to control.

Another useful habit to get into is to read the Product History each time you install a new version of Office Inside, which will list the changes / improvements / new features which have been added.

If you are still unsure about something after you've looked at the example applications, and read the documentation, feel free to contact us at for further assistance or to be pointed in the right direction. The Frequently Asked Questions is another useful reference to read through once in a while, and may give you some ideas as to what other Developers are asking about and using the product for.

Enjoy!

Getting Started with Office Automation

The simplest definition of automation in this sense is to control another, external program. A large part of what OfficeInside does is to make Automation of Microsoft Office products simpler, by taking care of the complexities inside the OfficeInside classes. When you use the Office Inside classes from your own application, all you need to do to start an instance of Microsoft Word (for instance) which you can then control from your application, is write one line of code (assuming you're not using the templates, which would do that for you), as follows: MyObject.Init(). Easy as that. The thousands of lines of code that are needed to actually get an instance of Word available to you and automate (control) that process are hidden from you inside the Office Inside classes.

The DLL consists in part of several objects, such as oiWord, oiExcel, oiOutlook, etc. Each of these objects contain methods which you can then call to make the Office Programs "do things". For instance, once you have started Microsoft Word, if you wish to write some text to the Word document, you would use the oiWord object's InsertText() method, as follows: MyObject.InsertText('I wrote this'). And again, the classes would then take care of getting that text into Word.

One of the big questions which we hear is "there are so many methods in Office Inside, how do I know what to look for?". The easiest way to get started is to compile the example application called "OffDemo.app". This example shows off most of what Office Inside is capable of doing, and contains "Automation Examples" for all the Microsoft Office programs which we currently support. Below is a picture of the Microsoft Excel automation example, showing the Clarion window called "Automate MS Excel", along with the instance of Microsoft Excel that the Clarion program started and is now automation ("controlling"). To make life easier for you, we have created a menu bar in each of the Clarion examples which matches the actual menu bar in the applicable Microsoft program. So if you want to know how to insert a picture into Word, you simply use the Clarion example application's "Automate MS Word" procedure, click on the "Insert" menu (in the Clarion example), and then click on "Insert Picture - From File". The actual method that is then called from code will appear in a list box on the Clarion window (as shown below for the Excel example), so that you can see exactly which method you need to use. You can then look up that method in the documentation to find out more about it, how it can be used, and what parameters etc can be used in it!





Now read (depending on which Office application you intend to use) either the Excel, Word, Outlook or PowerPoint docs to get jumpstarted on one of those.

License & Copyright

This template is copyright © 2024 by CapeSoft Software. None of the included files may be distributed (with the exception of the pwutil.dll which you need to always ship with your application see What You Need To Ship for more information). Your programs which use "Office Inside" can be distributed without any "Office Inside" royalties.

Each developer needs his own license to use CapeSoft Office Inside. (Need to buy more licenses?)

This product is provided as-is. CapeSoft Software and CapeSoft Electronics (collectively trading as CapeSoft), their employees and dealers explicitly accept no liability for any loss or damages which may occur from using this package. Use of this package constitutes agreement with this license. This package is used entirely at your own risk.

Use of this product implies your acceptance of this, along with the recognition of the copyright stated above. In no way will CapeSoft , their employees or affiliates be liable in any way for any damages or business losses you may incur as a direct or indirect result of using this product.

Important Changes and Version Compatibility

From time to time there will be changes in Office Inside that may produce compile errors in your code, or require changes within you application.

Office Inside 2.40 - August 2007 Office Inside 1.95 - 03 April 2006

Features


NOTE: Have a look at the section titled "Version History" to see what we're working on and what progress we're making.

Support and Purchase

Your questions, comments and suggestions are welcome. Check our web page (www.capesoft.com) for new versions. You can also contact us in one of the following ways.

CapeSoft Support
Email
Telephone +27 87 828 0123
Fax +27 21 715 2535
Post PO Box 511, Plumstead, 7801, Cape Town, South Africa

Office Inside can be purchased from:
CapeSoft Sales
Web www.capesoft.com
Email sales at capesoft dot com
Telephone +27 87 828 0123
Fax +27 21 715 2535
Post PO Box 511, Plumstead, 7801, Cape Town, South Africa

Buy Online
Web Buy now at ClarionShop
www.clarionshop.com

How to install "Office Inside"

To install "Office Inside", run the supplied installation file.  The install file will optionally register the template for you, and (for Clarion 6 users) update your redirection file to include various subdirectories within Clarion\3rdParty\.

System Requirements

In order for Office Inside to use the MS Office components, those components must be available. This means that if you want to use the templates that generate MS Word reports (for instance), MS Word must be installed on the PC. Office Inside supports all versions of Office from Office 2000 onwards (2003 and up is recommended). Office 2007, Office 2010 and future versions are fully supported. OfficeInside will continue to work with all future versions as long as the Office COM interface exists.

What you need to ship

As of Office Inside version 4 and up, OfficeInside is now shipped as source code, and does not require OfficeInside DLLs shipped with your application, except for the pwutil.dll which is the com controlling DLL.
DLLs required (Standalone and Local mode compiles)
Clarion Version DLL required
Clarion 6 through 8 PWUTIL.DLL

Templates

This table (Quick Reference) can be used to easily locate documentation on any of the Office Inside templates (listed below alphabetically).
Office Inside Templates : Quick Reference
Component Template Description
(all) Activate_Office_Inside Global extension for using Office Inside in your application.
Excel Add_MSExcel_Object Adds and configures an object in your procedure and allows the object type and settings to be chosen.
Excel ImportXLStoTPSAbc Template Utility to add an Excel Import Wizard to your application.
Outlook Add_MSOutlook_Object Adds and configures an object in your procedure and allows the object type and settings to be chosen.
Word Add_MSWord_Object Adds and configures an object in your procedure and allows the object type and settings to be chosen.
Word OfficeInside Spell Checking Window Controls Adds the Spell Checking controls to a window to provide feedback for spelling checking. We recommend using the provided template utility "ShowSpellingSuggestionsABC" or "ShowSpellingSuggestionsLegacy" to add the procedure to your application.
Word OfficeInside Spell Checking Adds and configures an object in your procedure and allows the object type and settings to be chosen.
Word Office Inside Spell Check for C55 RTF Control template. Adds a button to allow an RTF control to be spell checked in C55. This only applies to C55, in Clarion 6 and above the RTF control supports spell checking using the Word_Spellingchecking template without the need for this control template.
Below follows a list of all the Office Inside templates which are not "component-specific", meaning that they do not only apply to a single component of Office. Use the "Quick Reference" table (above) for a complete listing of all the Office Inside templates.
Template : Activate_Office_Inside
Summary Global Extension Template
Activate CapeSoft Office Inside Features in your application
Required
What does it do? You must add this template to your app or no other templates / objects will work. This template sets up the Office Inside classes (dll / lib) so that other templates can implement those classes.
How do I implement it? 1. Open your app
2. Select "Global Properties" from the "Application" menu
3. Click the "Extensions" button
4. Click the "Insert" button Select "Activate_Office_Inside" ( found under "Class OfficeInside" )
5. Click the "Select" button ( you can leave all default settings, these are discussed below )
6. Click "OK"
7. Click "OK" again

If you are using Legacy and would like to use the Editable Report Word and Excel template you need to ticked on "Enable the use of ABC classes" checkbox under Global Settings on the Classes tab. Please also note that in Legacy you must have at least one of the SV report output templates added. This limitation will be removed in a future release.

Class Reference

The most frequently used classes are the oiWord, oiExcel, oiOutlook and oiPowerpoint classes, which are documented separately, see the Component Specific Documentation links in the Contents. This section documents additional classes that provide other functionality, as well as object that are generic to all of the application classes.

oiObject

The oiObject class represents any of the COM classes exposed by Office. You can use the oiObject to retrieve the handle to a subclass, to set or get a property, or to call a method inside Office.

GetChild

GetChild(string cName, *oiObject child, <*long itemNumber>),byte,proc

Description
  • Aligns the currently selected text to the right.
  • Returns true (1) if no problems were experienced
Parameters
Parameters
cName The label of the child class to retrieve.
child The handle of the oiObject that will be set to the child class COM object handle
itemNumber The item number (if the child class is one of an indexed list).
Example
Example
MyMailMerge  oiObject
  code
    TempByte = MyWord.ActiveDocument.GetChild ('MailMerge',MyMailMerge)

Set

Set(string propertyName, *real pValue), long, proc
Set(string propertyName, *string pValue), long, proc
Set(string propertyName, *long pValue), long, proc
Set(string propertyName, *oiObject pValue), long, proc
Set(string propertyName, long pValue), long, proc
Set(string propertyName, *short pValue), long, proc


Description
  • Sets the COM class property specified in the propertyname parameter.
  • Returns true (1) if no problems were experienced
Parameters
Parameters
PropertyName The label of the property to set.
pValue The value to set the property to.
Example
Example
MyMailMerge  oiObject
  code
    TempByte = MyWord.ActiveDocument.GetChild ('MailMerge',MyMailMerge)
    MyMailMerge.set('DocumentType',0)

oiRecentFiles

The oiRecentFiles class represents the Recent Files list for each of the Office application. This is the list that you typically see at the bottom of the File menu in Word, Excel and PowerPoint and it contains a list of the most recently used documents for the particular application. Each one of the Office Inside application classes contain a RecentFiles object. This object is initialised for you when the parent is initialised (so when the Init() method of oiWord, oiExcel, oiPowerpoint etc. is called). In addition the list is populated when the object is initialised and corresponds to the list when the office Application starts.

The RecentFiles class also allows you to refresh the list, and to perform actions on the files in the list, such as delete them, open them in the currently open Office application etc. The oiRecentFiles class contains a queue of oiRecentFile objects, each object represents a specific file. You don't need to manage the RecentFile objects, the parent class does it for you and provides methods to access them easily.

See the Demo application for an example of using the RecentFiles class. Below the class methods are described briefly, full documentation and example code will be added to future releases.

Copy Procedure(*oiRecentFilesQ fileQ)

This method copies the Recent Files list into a queue for use in your application. The example demonstrates using this method to populate a queue and then display the contents in a listbox.

Init procedure(long pApplication)

Initialises the object and populates the queue with the recent files list. This is done for you when the application initialises and typically this method never needs to be called.

Kill procedure()

Cleans up and destroys the object, this is done when the Kill method of the application is called and typically this method would never need to be called manually.

Refresh procedure()

Clears all queue entries and fetches the list again. This is useful for ensuring that the list is up to date if documents have been opened, closed or created.

Fetch procedure(long index)

Fetches a specific enter from the queue.

Count procedure

Returns the number of files in the list

Insert procedure(string fileName)

This adds a new file to the Recent Files list in the Office application. This method allows you to add a file to the list that the user did not necessarily open with the Office application.

Open procedure(long index)

Opens the Recent File in the Office application. The index parameter specifies which file in the list should be opened.

Delete procedure(long index)

Deletes a file from Recent Files list.

Data Types and Equates

For data types and equates that relate to a specific Office Inside object please see the documentation on the Word, Excel, Outlook and PowerPoint classes.

Equates

The size equates below are used for the various fields and type declared in Office Inside. For example the data types used by the Outlook class for storing Appointments, Tasks, Contacts etc.
_oit:TinyStringSize           equate( 20 )                      ! Really small Office Inside String Size
_oit:SmallStringSize equate( 50 ) ! Small Office Inside String Size
_oit:MedStringSize equate( 100 ) ! Medium Office Inside String Size
_oit:StdStringSize equate( 255 ) ! Standard Office Inside String Size
_oit:LargeStringSize equate( 1024 ) ! Large Office Inside Sting size
_oit:TelNoStringSize equate( 30 ) ! String size for telephone / fax numbers _oit:EntryIDSize equate(_oit:LargeStringSize)

USEFUL REFERENCES

General Tips & FAQs

I'm getting Compile errors or Runtime Errors

For questions about upgrading to OfficeInside4: What's new in Office Inside 4:
If your procedures don't work after upgrading to OfficeInside4, make sure that you've completed the What must I change in my application after upgrading section of this doc.

You can download the ClarionLive training here

This section contains Tips and Frequently Asked Questions pertaining to the Office Inside product as a whole. Tips and FAQs pertaining to specific sections / components of Office Inside can be found as follows:
MS Word related FAQ's( click here)
MS Excel related FAQ's( click here )
MS Outlook related FAQ's( click here )
MS PowerPoint related FAQ's( click here )
Compile Errors( click here )
Runtime Errors( click here )
General FAQs( click here )

Outlook FAQs

  1. If I enable a manifest file to my application, then my application freezes as soon as it tries to integrate with Outlook.
All Outlook Versions You need to experiment with the settings of the manifest file. It most likely needs to match those of the Outlook instance to not get hung up at the COM initiation. The easiest way to do this is to use an external manifest file and change properties in that.
  1. How can I turn off the annoying message Outlook pops up saying "A program is trying to access e-mail addresses you have stored in Outlook...", or "A program is trying to automatically send e-mail on your behalf... ".
Office 2003 and Earlier The only real way of doing this is using one of the utilities to either automatically click on the "yes" button to allow access to Outlook, or to use a plug-in that provides enhanced security controls. We recommend the later method using the free Advanced Security For Outlook plugin.
  • Advanced Security for Outlook is a free plug-in for Outlook that provides proper security alerts and allows you to set which applications can access Outlook, so you only need to authorise an application once. Note that this is not a CapeSoft product and we do not provide support for it. Please visit the MapiLab website for more information: http://www.mapilab.com/outlook/security/.
Office 2007 and 2010 With Outlook 2007 the Outlook Security model has changed. There are now three settings (accessible via Tools -> Trust Centre -> Programmatic Access).
  • "Warn me about suspicious activity when my antivirus software is inactive or out of date (recommended)".
    This is the recommended setting, and should not require any user interaction to send emails.
  • "Always warn me about suspicious activity".
    This setting operates in the same manner as the security model in Outlook 2003, except that it introduces an even more onerous warning dialog box on mail sending. First the user is prompted to allow access to 1, 5 or 10 minutes, then when an email is sent a warning dialogue is displayed. The second dialog does not allow the user to continue immediately, but instead displays a progress bar for a few seconds before the button can be pressed. This means that utilities such as "ClickYes" can no longer be used.
  • "Never warn me about suspicious activity".
    This setting allows all applications access, much like in Office 2000 and XP.
In addition when used under Windows Vista, Windows 7 and later (all UAC enabled versions of Windows), that have UAC enabled, it is important to have a valid manifest file for the application, and the application must run as a standard user, and not required elevation.

If your application requires elevated access to run, you must move the portion of code interacting with Outlook to separate process that does not require elevation.

If you ignore this then any Outlook security prompts displayed by processing running elevated will not be displayed to the user (as they are displayed in the Administrators context, not the current user's context), and the user will not be able to allow your application access if Outlook attempts to displaya  prompt, and your application may hang waiting for Outlook to respond, until Outlook is terminated.

2. In my FileExplorer HTML editor, I design the HTML mail, but when I send it to Outlook it has different formatting (the font size, etc changes)

The first thing to consider is that Outlook uses a very different browser engine to IE. As I recall they're usingthe one from Word - so some differences in rendering are probably to be expected.

In HTML generally there are a variety of ways of specifying the base font size. If you look at the HTML you need to make sure that you're using, for example, the correct unit measurement (for sizing). If you're using px, then in some cases, Outlook will change this to pt. Unfortunately this is fairly hit-and-miss with reliance on external items that often are not 100% compatible with each other.

3. I have a very long delay when Outlook initializes (from my Clarion application). How do I overcome this?

This can happen when running your application from within the IDE. Run your application from outside the Clarion IDE (i.e. as you would a normal windows EXE).

Word FAQs

  1. MyWord.OpenDoc is not working...

    Users have reported cases where passing filenames that do not contain a drive letter fail on certain machines ( e.g. \folder1\folder2\test.doc )
  2. Compile error: "No matching prototype available" on calling "oiShowSpellingSuggestions" function

    We changed the oiShowSpellingSuggestions procedure in version 1.65.  Please delete your "oiShowSpellingSuggestions" procedure, and run the template utility again (Application --> Template Utility --> Class OfficeInside --> ShowSpellingSuggestions)
  3. Can I use RGB color values rather than Clarion color equates with MS Word?

    Yes!  You can either pass in a standard Clarion equate (e.g. color:blue), or you can pass in the BGR long (returned by the ColorDialog function for example), or you can use the oi_RGBToBGRLong function to get a long from three individual RGB values, and pass that in!
  4. When using editable reports, I get the compile errors "Syntax error: Field Not Found: ADDITEM" and "Syntax error: Unknown procedure label".

    If you are using Legacy and would like to use the Editable Report Word and Excel templates you need to ticked on "Enable the use of ABC classes" checkbox under Global Settings on the Classes tab.
  5. I get a compile error "Invalid use of private data" on a line using an RTFControl.CtlRTF property

    A Checkbox has been added to the Global Extension that should be checked in order to use spell checking on a Clarion 6 RTF control. This has been added becuase in order to use spell checking on Clarion 6 RTF controls the RtfControlClass needs to have a line modified. If you have ticked this box to enable spell checking of Clarion 6 RTF controls, then open the rtfctl.inc file in your Clarion6\libsrc directory and change the lines that reads:

    CtlRTF SIGNED,PROTECTED

    to:

    CtlRTF SIGNED!,PROTECTED
    The PROTECTED attribute needs to be commented out in order to allow Office Inside to identify which control the object is associated with.
  6. How do I get a procedure that sends Mail not to check the spelling on each document ?

    This is an Outlook Spelling options setting and is independent of OfficeInside - it will do it for all mail sent if you select the "Always check spelling before sending" check box in the settings (On the File tab, click Options, and then click Mail).

    There is no programmatic access to this setting, the only way to change it is via the registry:

    'HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Options\Spelling\C

    '0 = disabled

    '1 = enabled

    The setting is read on startup, so you cannot change it while Outlook is running, and the key may not be entirely consistent between versions.
    This is an Outlook Spelling options setting and is independent of OfficeInside - it will do it for all mail sent if you select the "Always check spelling before sending" check box in the settings (On the File tab, click Options, and then click Mail).

    There is no programmatic access to this setting, the only way to change it is via the registry:
    'HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Options\Spelling\C

    heck"
    '0 = disabled
    '1 = enabled
    The setting is read on startup, so you cannot change it while Outlook is running, and the key may not be entirely consistent between versions.
  7. How do I add an RTF control to my window?


    Clarion RTF Controls

    A Checkbox has been added to the Global Extension that should be checked in order to use spell checking on a Clarion 6 RTF control. This has been added because in order to use spell checking on Clarion 6 RTF controls the RtfControlClass needs to have a line modified. If you have ticked this box to enable spell checking of Clarion 6 RTF controls, then open the rtfctl.inc file in your Clarion6\libsrc directory and change the lines that reads:

    CtlRTF SIGNED,PROTECTED

    to:
    CtlRTF SIGNED!,PROTECTED

    The PROTECTED attribute needs to be commented out in order to allow Office Inside to identify which control the object is associated with.
  8. How do I insert RTF text into a Word document?

    You cannot do this directly, but we've created a work-around that enables you to do this using the ReplaceText command.

Excel FAQs

  1. What do I need to use the Word and Excel editable report templates?

    1. Clarion 6 (both PE and EE are supported)
    2. If you are using Legacy and would like to use the Editable Report Word and Excel templates you need to ticked on "Enable the use of ABC classes" checkbox under Global Settings on the Classes tab.

    Clarion 5.5 is not supported for the editable report template, as it does not ship with the Report Generator interface.
  2. I am trying to import a currency column from an Excel worksheet that has 4 decimal places, but only get 2 decimal places".

    That is how Excel stores currency. You need to divide by 10,000 in order to get the normal floating point number with four decimal places.

    The other option is to get the 'Value2' property rather than 'Value' from the cell. That will return the floating point value rather than the Excel currency value (the same goes for dates in Excel).
  3. I get mixed results with Office Inside. Sometimes the cells get written, other times not

    This could be as a result of another application (in the reported instance this was SuperOffice) holding a COM interface to Excel open continuously, which seems to result in the applications fighting each other for the control of Excel. In theory, each COM interface should be able to interact with Excel independantly, but there seems to be some issue in Office that causes problems when this happens. The best approach is in designing your application is to interact with Excel for as short a time as possible, and dispose the COM object (i.e. kill the OI Object) when not in use. This is easiest done by creating a procedure (window probably) to interact with the excel doc requiring editing, and call the procedure to perform the edits as and when required.
  4. I'm exporting a report to excel, but my columns don't map very well

    If you get headers that don't line up such as:



    Then you need to make sure that your headers aligned vertically. In the case above, the LastName header is not aligned to the top of the other headers, and so the row is placed in the row below.
  5. I'm trying to set a property (like insert an image, Insert a pageNumber, set a tabname, etc), but nothing happens or I get an incorrect result

    Some of the properties documented on MSDN are incorrect. The ones we and other OfficeInside users have found are listed below:

    Format String

    Expected Result

    Actual result

    &P

    Pagenumber

    Path (&Z)

    &D

    Date

    Date

    &T

    Time

    Nothing

    &F

    Filename

    Nothing

    &A

    Tabname

    Total Pages (&N)

    &N

    Total Pages

    Filename (&F)

    &Z

    Path

    Nothing

    &G

    Image

    Nothing

    &B

    Format following Text to Bold

    Tabname (&A)

    &C

    Format following Text to Centered

    Nothing

    &E

    Following text with double underline

    nothing

    &I

    Not in the docs

    Shows the Image (&G)

     

General FAQ

  1. Can I use Office Inside to integrate with 64bit Office?

    Yes
  2. Does Office Inside support Legacy applications?

    Yes
  3. What will happen if I try to run my app (which uses Office Inside) on a computer where MS Office is not installed?

    Absolutely nothing. The Office Inside code will simply not work. It will not freeze the computer, or "time-out" trying to find MS Office. It will simply do nothing.  Calls to the Office Inside objects will simply fail. The easiest way to manager this is to test what value the Init methods return. If Init fails (returns "false"), then you could simply disable any "Office" controls in your app.
  4. I am using an editable Excel report and a non editable Word report template for the same report and the Word icon is not being displayed on the output selection window.

    You should change the Word report to editable if you are using it in conjunction with the editable Excel report template. This is becuase of the way the report targets are added.
  5. My columns in my Excel editable report don't line up, or it just all looks very odd...

    Remember that Excel is very restrictive in what can be displayed, so make sure you think in terms of lining everything up in rows and columns. Try to keep "one column, one control width" in mind, so if there is a control that will go into a particular column make sure that above and below it there aren't multiple controls that will fall into the same "column". It also helps to keep all controls in a column the same width. Future version of the reporting engine will be smarter and do more automatically, but for Excel it is always worth keeping the limitations in mind in order to get great looking reports. We recommend checking the C6 demo application for a good example of a multi page Excel report with numerous controls.
  6. What do I need to use the Word and Excel editable report templates?

    1. If you are using Legacy and would like to use the Editable Report Word and Excel templates you need to ticked on "Enable the use of ABC classes" checkbox under Global Settings on the Classes tab.
    2. In previous version the Softvelocity Advanced Report output templates were required, this is no longer the case.
  7. Dynamically Creating OfficeInside objects using New

    You can use New to create a new OfficeInside object, however you must ensure that:

    1. The .disabled property of the class is set to 1 directly after the New call.
    2. The Init() method is called after the call to New and setting .disabled to 1.
    Example

    MyWord &oiWord
     
    code
        MyWord &=
    new oiWord
        MyWord.disabled = 1
        MyWord.Init(0, 1)
  8. Editing Office documents from a service application

    You need to create a Desktop folder in the systemprofile are of windows. For 64bit:

    C:\Windows\SysWOW64\config\systemprofile\Desktop

    For 32bit (and some 64bit versions like Windows 7):

    C:\Windows\System32\config\systemprofile\Desktop

Compile Errors

Check out general product CompilerErrors.

I've just upgraded to OfficeInside 4. I get some compile errors at particular properties in the application
I've just upgraded to OfficeInside 4. I get Unresolved external or Duplicate symbol for all the OI methods
I've just upgraded to OfficeInside 4. I get an error "Unable to locate source file: csoffice.inc"
I'm getting an error message "Entry Point Not Found / procedure entry point could not be located in the DLL PWUtil.dll"
My application will not compile. I added the spelling template and now I get a compiler error saying that "oiShowSpellingSuggestions" is an unknown function label...
Unresolved External INIT_@_IREPORTGENERATOR_@_OIEXCELREPGEN@F16IREPORTGENERATOR10ERRORCLASS in ...
When using Editable Reports, I get the compile errors "Syntax error: Field Not Found: ADDITEM" and "Syntax error: Unknown procedure label".
I get a lot of unresolved Externals involving PW_
I get a compile error "Invalid use of private data" on a line using an RTFControl.CtlRTF property
I just upgraded and now I get "Syntax error: No matching prototype available" compiler errors when calling methods like GetContactsQ.
I get about 54 unresolved externals in cspwutil.obj (Uninitialise, Initialise, etc)
When I compile the example, I get a compile error on this line: sourcefield &= what(oiMyFileManagerPtr.buffer,i)

  1. I've just upgraded to OfficeInside 4. I get some compile errors at particular properties in the application:

    In Office Inside 4 we merged the old generics example class into the set of classes shipped with Office Inside. Some of  the properties were changed to correspond with the objects' names in the Microsoft Office Objects:

    Old Property New Property
    WorkBook ActiveWorkbook
    Sheets WorkSheets
    Sheet ActiveWorkSheet
    Doc ActiveDocument
    Window ActiveWindow
    WorkSheet ActiveWorkSheet

    You need to change your handcode to reflect these properties.
  2. I've just upgraded to OfficeInside 4. I get Unresolved external or Duplicate symbol for all the OI methods:



    You must delete the old office inside dll from the project:

    Clarion 7/8 (Could either be CLAOFF.LIB, CLAOFFL.LIB or as per below) :


    Clarion 5.5/6:



    Now that Office Inside is source based, the classes (in a multi-dll application) can be exported from the data dll. You need to set the relevant switches in the dlls to ensure that the data dll is exporting the classes (if your exe/dlls are set to use the OfficeInside classes exported from the data dll)



    and that the exe (and non data dlls) are set to use the classes exported from the data dll:

  3. I've just upgraded to OfficeInside 4. I get an error "Unable to locate source file: csoffice.inc"

    This probably means that you have SendTo or another template that relies on Office Inside. You must upgrade SendTo to the latest version, and then regenerate and re-compile. If you are still getting this error, go into the SendTo global template instance to force the template to refresh:

    Go global Extensions, Click: 

     Then click OK:

     
     

    Close and save your application, and close and restart clarion, and then re-generate and recompile your application.

    Make sure you don’t have a handcoded call as follows: 

    Include(‘csOffice.inc’)
  4. I'm getting an error message "Entry Point Not Found / procedure entry point could not be located in the DLL PWUtil.dll"

    Your app is using an old version of the file called "pwutil.dll".  Use whichever version of this dll shipped with the version of OfficeInside that you used when compiling the app.
  5. My application will not compile. I added the spelling template and now I get a compiler error saying that "oiShowSpellingSuggestions" is an unknown function label...

    You don't have a procedure in your app called "oiShowSpellingSuggestions". You need to run a template utility which will create this procedure for you. This is explained in the documentation on the MS Word object
  6.  Unresolved External INIT_@_IREPORTGENERATOR_@_OIEXCELREPGEN@F16IREPORTGENERATOR10ERRORCLASS in ...

    In your data dll, you need to uncheck the "Disable Editable-Report Functionality" checkbox on the OfficeInside global template.

    If you have just upgraded to Clarion 9 and are getting the following compile errors:



    the you need to upgrade to the latest version of Clarion 9. We don't support the beta versions of Clarion 9.
  7. When using Editable Reports, I get the compile errors "Syntax error: Field Not Found: ADDITEM" and "Syntax error: Unknown procedure label".

    If you are using Legacy and would like to use the Editable Report Word and Excel templates you need to ticked on "Enable the use of ABC classes" checkbox under Global Settings on the Classes tab.
  8. I get a lot of unresolved Externals involving PW_

    You must check the "Link pwutil into project" checkbox on the Global extension template.
  9. I get a compile error "Invalid use of private data" on a line using an RTFControl.CtlRTF property

    A Checkbox has been added to the Global Extension that should be checked in order to use spell checking on a Clarion 6 RTF control. This has been added because in order to use spell checking on Clarion 6 RTF controls the RtfControlClass needs to have a line modified. If you have ticked this box to enable spell checking of Clarion 6 RTF controls, then open the rtfctl.inc file in your Clarion6\libsrc directory and change the lines that reads:

    CtlRTF SIGNED,PROTECTED

    to:

    CtlRTF SIGNED!,PROTECTED

    The PROTECTED attribute needs to be commented out in order to allow Office Inside to identify which control the object is associated with.
  10. I just upgraded and now I get "Syntax error: No matching prototype available" compiler errors when calling methods like GetContactsQ.

    In version 1.95 we increased the size of the strings used in the queue and group types defined by Office Inside, such as:

    oioFolderNamesQType
    oioFolderItemsQType
    oioAttachmentsQ
    oioContactsQType1
    oioContactProperties
    oioCalendarQType1
    oioAppointmentProperties
    oioTasksQType1
    oioTaskProperties
    oioGrpProgressControls

    If you have declared groups or queue with the same structure for passing to Office Inside methods then you will need to update them. We strongly recommend that you use the types declared in Office Inside rather than redeclaring them inside your application. For example:
    MyAddressList            queue(oioContactsQType1)
                             end
    
  11. I get about 54 unresolved externals in cspwutil.obj (Uninitialise, Initialise, etc)

    You need to check the 'Link pwutil.lib into project' checkbox in the Office Inside global extension template.
  12. When I compile the example, I get a compile error on this line: sourcefield &= what(oiMyFileManagerPtr.buffer,i)

    You need to edit the ABFILE.inc file to the buffer property of the FileManager class not protected. The ABFIle.inc file is located in your clarion\libsrc\win directory.

    Change:

    Buffer &GROUP,PROTECTED ! The record buffer

    To:

    Buffer &GROUP   !,PROTECTED ! The record buffer

Runtime Errors

 

Converting macro code to Clarion code

Example 1: Creating a mail merge in Word

For this example, I've added a data source to the document to create a Mail merge, and then inserted 3 fields from the datasource (see Using Mail Merge for more info). The macro reveals the following VB script:



Let's take a look at the code, and break it down into one line at a time, because looking at it in a block can be a bit daunting. Let's take 2 lines as an example, and then we'll look into the others once you're familiar with the syntax.

ActiveDocument.MailMerge.MainDocumentType = wdFormLetters

This is the first line of the actual code, the lines prior to this are delimiters and comments which we can ignore.

This line is Setting the MainDocumentType property of the MailMerge subclass of the ActiveDocument class to wdFormLetters. The ActiveDocument, by implication, is a property of the Application. The reason we know that MailMerge is a subclass, is that there is a period after it referring to something else (in this case MainDocumentType). The reason we know that MainDocumentType is a property is that there is an = immediately after the property name.

ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"First_Name"


As per above, we're still dealing with the MailMerge subclass of the ActiveDocument class, but in this case there is one level more. Because there is a period immediately after Fields, we can see that Fields is a subclass of the MailMerge subclass. This line is calling the Add method of the Fields subclass of the MailMerge subclass of the ActiveDocument class. The reason we know that it is a method and not a property, is because the method name is followed by a list of parameters, and not by an = sign. In this case there are 2 parameters: Range (Range:=) and Name (Name:=). The _ character is simply a linefeed indicating that the code continues on the next line. There is a Selection.Range handle passed in the Range parameter (more about that in the moment), and a constant of "First_Name" in the Name parameter. MSDN library (http://msdn.microsoft.com/library/default.aspx) is your friend when it comes to know the various properties and methods of each class.

Now the fun part comes when we convert this to Clarion code

  1. If you have not done so already, add the OfficeInside global extension to your application.
  2. In the extension templates of procedure from where you'll be controlling the sending of the mail merged document, add the "Add_MSWord_Object" template to the templates there, and set the Template Type to "Basic".
First lets get some terminology going. Each COM object that is exposed from any of the office classes, is available to us to be assigned to an oiObject. Once we've created the oiObject and assigned it to the COM object, we can assign properties, and call methods of that class from our Clarion Code. There are a number of oiObject pointers that are set at initialization which you can use without needing to retrieve these (see properties for details).

In the embed code, where you're wanting to run the code to perform the function we mimicked in the macro, we'll convert it as follows:
  1. First up, let's convert the macro script to set the MainDocumentType property to Clarion:

    MyWord.GetObjects()   !Sets the internal existing oiObject pointers like ActiveDocument, Selection, etc.
    MyWord.ActiveDocument.GetChild('MailMerge',MyMailMerge) !MailMerge is a subclass of the ActiveDocument class, so we need to get the handle for that (and set it to the MyMailMerge oiObject that we will create in the data section).
    MyMailMerge.Set('MainDocumentType',wdFormLetters) !Setting the property
  2. While this may look rather daunting to set a single property, we're most of the way there, since we have the handle for the Mailmerge subclass, so the rest gets easier. Line 2-8 of our macro code calls the OpenDataSource method. Now the trick comes into knowing each parameter type in order to know how to set it. We use MSDN library to determine the parameter variable types (in this case Word | MailMerge | OpenDataSource). Setting parameters must be done first, and in the correct order, before the method is called. Any trailing omitable parameters that you don't want to set can be ignored. If you need to set parameters 1 and 3, then you need to add a null parameter for 2 in order to set the 3rd parameter correctly. For the purpose of this exercise, we'll set all the parameters that are used in the macro. NOTE: The macro does not necessarily generate the parameters in the correct order, but you must get the order correct, which can be done using the class definition from the MSDN docs. Here's a snapshot of the method's parameters from the MSDN site:



    Here's the Clarion code:

    MyMailMerge.params.AddString('I:\Clarion8\Examples\OfficeInside4\Demo\data.csv') !The Name parameter, which is parameter 1 and required. We can leave the other parameters out as they are optional, but for documentation purposes I'll include a couple:
    MyMailMerge.params.AddInt(0)     !This is the value for wdOpenFormatAuto - to find other values, you'd search MSDN.
    MyMailMerge.params.AddBool(0)    !This is either true or false, so we use a Bool.

    if MyMailMerge.CallEx('OpenDataSource') = 0
      message('OpenDataSource Failed')
    else
      message('OpenDataSource Worked')
    end


    That handles the OpenDataSource method call in the macro script.
    Now we implement the method call to add the fields. First thing we need to do is get the handle to the Fields subclass of our MailMerge class:

    MyMailMerge.GetChild('Fields',MyMailMergeFields)

    Once we've got the handle to the Fields property, we need to investigate the parameters that will be used by the Add method of the MailMergeFields class:



    The Range data type is the handle to a com object. We don't have the handle yet, and our macro code gives us an idea of how to get this:

    Range:=Selection.Range

    The Range required is a subclass of the Selection class (once again, you could have found this out in the MSDN docs, but I'll give you the cheat sheet). We already have the handle to the Selection class (which we got in GetObjects just now), so now we need to just get the handle to the Range subclass of the selection class:

    MyWord1.Selection.GetChild('Range',MyRange) !We need to declare the MyRange in our datasection just now.

    Now we add the parameters and call the method:

    MyMailMergeFields.params.insert(MyRange) !We use insert when it's a handle to an oiObject (like Range).
    MyMailMergeFields.params.AddString('First_Name')
    if MyMailMergeFields.CallEx('Add') = 0
      message('Add Failed')
    else
      message('Add Worked')
    end


    We'll rinse and repeat to add the other datasource fields into the Word doc, and in the end our code looks like:

    MyWord1.GetObjects() !Sets the internal existing oiObject pointers like ActiveDocument.
    MyWord1.ActiveDocument.GetChild('MailMerge',MyMailMerge) !MailMerge is a subclass of the ActiveDocument class, so we need to get the handle for that (and set it to the MyMailMerge oiObject we created in the data section.
    MyMailMerge.Set('MainDocumentType',wdFormLetters)
    MyMailMerge.params.AddString('I:\Clarion8\Examples\OfficeInside4\Demo\data.csv')
    if MyMailMerge.CallEx('OpenDataSource') = 0
      message('OpenDataSource Failed')
    end
    MyWord1.SetSelection(10,11)
    MyMailMerge.GetChild('Fields',MyMailMergeFields)
    MyWord1.Selection.GetChild('Range',MyRange)
    MyMailMergeFields.params.insert(MyRange)
    MyMailMergeFields.params.AddString('First_Name')
    if MyMailMergeFields.CallEx('Add') = 0
      message('Add First_Name Failed')
    end
    MyMailMergeFields.params.insert(MyRange)
    MyMailMergeFields.params.AddString('Last_Name')
    if MyMailMergeFields.CallEx('Add') = 0
      message('Add Last_Name Failed')
    end

  3. And finally, in our datasection, we need to create the oiObjects that we used to assign to the COM objects that we needed to get from MSWord.

    MyMailMerge oiObject
    MyRange oiObject
    wdFormLetters        equate(0) !Googling the MSDN site reveals that wdFormLetters is an equate of 0

Example 2: Scaling an Excel spreadsheet to fit on a page

This routine scales an Excel spreadsheet to fit on a page. We'll orientate it to landscape and then force to fit on a single page:

Macro code:

Sub Macro1()
'
' Macro1 Macro
'

'
  With ActiveSheet.PageSetup
     .PrintTitleRows = ""
     .PrintTitleColumns = ""
  End With
  ActiveSheet.PageSetup.PrintArea = ""
  With ActiveSheet.PageSetup
     .LeftHeader = ""
     .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftMargin = Application.InchesToPoints(0.7)
    .RightMargin = Application.InchesToPoints(0.7)
    .TopMargin = Application.InchesToPoints(0.75)
    .BottomMargin = Application.InchesToPoints(0.75)
    .HeaderMargin = Application.InchesToPoints(0.3)
    .FooterMargin = Application.InchesToPoints(0.3)
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .PrintQuality = 600
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlLandscape
    .Draft = False
    .PaperSize = xlPaperLetter
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 0

    .PrintErrors = xlPrintErrorsDisplayed
    .OddAndEvenPagesHeaderFooter = False
    .DifferentFirstPageHeaderFooter = False
    .ScaleWithDocHeaderFooter = True
    .AlignMarginsHeaderFooter = True
    .EvenPage.LeftHeader.Text = ""
    .EvenPage.CenterHeader.Text = ""
    .EvenPage.RightHeader.Text = ""
    .EvenPage.LeftFooter.Text = ""
    .EvenPage.CenterFooter.Text = ""
    .EvenPage.RightFooter.Text = ""
    .FirstPage.LeftHeader.Text = ""
    .FirstPage.CenterHeader.Text = ""
    .FirstPage.RightHeader.Text = ""
    .FirstPage.LeftFooter.Text = ""
    .FirstPage.CenterFooter.Text = ""
    .FirstPage.RightFooter.Text = ""
  End With
End Sub

First some comments. The with statements are just setting up the object pointers in the macro so that the objects know which child object to use. Similarly, we'll get the ActiveSheet and PageSetup child classes. Then there are just a bunch of properties that we'll set. Most of them are just setting the defaults, which we can happily ignore, so I've highlighted the ones above that matter (see the MSDN docs for more details on the PageSetup object for the property details.

Clarion code:

ScaleToFit  ROUTINE
 DATA
iPageSetup       oiObject
iSheet           oiObject
xlLandscape      equate(2)
  CODE
MyExcel1.iApplication.GetChild('ActiveSheet',iSheet)
    iSheet.GetChild('PageSetup',iPageSetup)
    iPageSetup.Set('Orientation',xlLandscape)
    iPageSetup.SetBool('Zoom',oi:False)
    iPageSetup.Set('FitToPagesWide',1)
    iPageSetup.SetBool('FitToPagesTall',oi:False)


Using Office Inside with File Explorer

Prior to Office Inside 2.10 it was not possible to use File Explorer and Office Inside on the same thread (for example both extensions on a single Window). Office Inside 2.10 introduces a new option to the Office Inside Object extensions - "Activate compatibility with File Explorer". In order to use an Office Inside object on the same Window as a File Explorer object, make sure that this check box is checked on the local extension. Each Office Inside control must have this box checked if used on the same window as FileExplorer.

Do not check the box if you have not added FileExplorer to the same procedure, as Office Inside will then not initialise the COM interface, and it will simply not do anything when you call the methods unless you set the oiOffice.noComInit property of the object to zero and call the oiOffice.Init() method after setting this property back to zero.

If you are calling the Init() method manually the you need to set the oiOffice.noComInit property of the object to 1 before calling the Init() method.

Example Applications



Office Inside ships with several example applications, which demonstrate how to implement this product. These examples can be found in subfolders in your "Clarion\3rdParty\Examples\OfficeInside" folder. The examples are summarized below:

What's new in Office Inside 4:

NOTE: You must complete the What must I change in my application after upgrading section of the doc. Don't forget to check the Compile errors section after upgrading to see what else you need to change in your application. NOTE: You must complete the What must I change in my application after upgrading section of the doc. Don't forget to check the Compile errors section after upgrading to see what you else need to change in your application.

Also included if you're upgrading from Office Inside 2:

What you need to change in your application:

The SetProperty method has been renamed to oiSetProperty.
The GetProperty method has been renamed to oiGetProperty.
If you are calling these directly in your code then you will need to tweak the call to the new name.

1. We have tried to keep this upgrade as backward compatible as we possibly can, but the underlying object generation template was about 10 years old, and needed to be re-aligned with the latest object generation template (that is used by the other CapeSoft products). As a result, if you have embedded source code into the object methods that are derived into your application, then these will be orphaned, and you will need to move these to the new embed points.

To view a video tutorial on how to do this: https://www.capesoft.com/docs/Office4/OfficeInsideMoveOldEmbeds.avi

Open the procedure that contains the Office Inside template where you've embedded into the derive procedures of an object, and go to the embed tree:



NB: Take note of the priority number (in the above example, this is 5001 as shown in the Priority control).

Cut the embed from there, and paste it into the relevant derived object procedure in the Local Objects | Capesoft Objects | <Office Inside Object name> | <Procedure> | CODE embed point. If the priority number is < 5000, then this should be before the parent call (to do this, highlight the CODE section and paste), alternatively, highlight the parent call and paste (which will paste after the parent call):



Similarly, if there is code in the orphaned method's data section, then you need to move that to the corresponding DATA branch of the tree as indicated above.

2. You need to remove the old office Inside dll from your project: (See Compile Error 2 for details)

3. If you use SendTo in your application, then you must upgrade SendTo to the latest version.

4. If you have a include('msOffice.inc'), you must remove that (and the matching msOffice.clw fro your project). The  old "generics" class is now a part of the default OfficeInside classes.

5. If you're upgrading from Office Inside 2, you should import the Spell Checking window using the provided template utility. The new window uses the new control template that is part of the OfficeInside 4 spell checking solution.

6. Compile your application. If you are still getting compile errors, check the Compile Errors section of this doc.

Why is CapeSoft charging for an upgrade?

As much as we can we try to keep upgrades free. Charging an upgrade gives us the resources to pack in a whole lot of extra functionality into a product, that we would otherwise not be able to do. We are not forcing you to upgrade - and we will continue supporting and building Office Inside 3 in future versions of Clarion. If you would rather not pay for the additional functionality offered in Office Inside 4, you're welcome to continue using Office Inside 3.

Considerations if upgrading from very early versions of Office Inside

Although we try to ensure that Office Inside is always backward compatible, we may from time to time if we think it is going to improve the product long term, deliberately do something that would make Office Inside non backward compatible. In such cases we will document these changes in the Version History, as well as provide a summary here:

Version 1.91
A Checkbox has been added to the Global Extension that should be checked in order to use spell checking on a Clarion 6 RTF control. This has been added becuase in order to use spell checking on Clarion 6 RTF controls the RtfControlClass needs to have a line modified. Open the rtfctl.inc file in your Clarion6\libsrc directory and change the lines that reads:

CtlRTF SIGNED,PROTECTED 

to:

CtlRTF SIGNED!,PROTECTED 

The PROTECTED attribute needs to be commented out in order to allow Office Inside to identify which control the object is associated with.

Version 1.40 Beta
- Changed the Init method (all objects: Word, Excel, Outlook etc.). This method now only takes two parameters, as I've done away with the first parameter (EarlyBound)

Using DebugView

DebugView by SysInternals (now Microsoft) is an application that lets you monitor debug output on your local system. We use DebugView when developing because it gives an accurate picture as to what's happening in your code (as opposed to Message() or Stop()). If you start your application (any application into which Office Inside is compiled) with the following command line parameters, debug output will be generated accordingly, which you can then monitor using DebugView.
MyApp.exe same as MyApp.exe /oidebugoff
MyApp.exe /oidebugoffalmost no debug output
MyApp.exe /oidebugminminimum amount of debug output
MyApp.exe /oidebugmaxmaximum amount of debug output
Tip

I'd recommend using debug output only when you're testing something. It can be quite annoying for other programmers to work on a system where there are a dozen different apps generating debug output at the same time! To make life easier, all Office Inside debug messages are prefixed with "[OfficeInside]", as shown below. You can set DebugView to ignore all messages that do not contain "[OfficeInside]". You will also take a very small performance hit when running an app with debugging turned on.

Notes on Office Inside Coding Conventions

The following coding conventions have been used when building Office Inside:

Office Inside DLL version info

The oi_Version function returns version information on Office Inside. See the documentation on this function for more info. The current version of pwutil.DLL that you should ship with your application is 2.5.0.0. Please ensure that you ship the latest version of pwutil.DLL.

Version History

Download latest version here
Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading


Version 4.74 - 7 March 2024
Version 4.73 - 12 January 2024
Version 4.72 - 7 June 2023
Version 4.71 - 7 June 2023
Version 4.70 - 27 January 2022
Version 4.69 - 27 January 2022
Version 4.68 - 17 October 2021
Version 4.67 - 8 June 2021
Version 4.66 - 24 May 2021
Version 4.65 - 3 September 2020 Version 4.64 - 25 July 2020 Version 4.63 - 13 May 2020 Version 4.62 - 19 December 2019 Version 4.61 - 22 October 2019 Version 4.60 - 16 October 2019 Version 4.59 - 15 October 2019 Version 4.58 - 13 September 2018 Version 4.57 - 6 August 2018 Version 4.56 - 8 March 2018 Version 4.55 - 29 Jan 2018 Version 4.54 Beta - 29 Jan 2018 Version 4.53 Beta - 5 Jul 2017 Version 4.52 Beta - 20 June 2017 Version 4.51 Beta - 5 December 2016 Version 4.50 Beta - 24 November 2016 Version 4.38 Beta - 16 October 2016 Version 4.37 Beta - 12 November 2015 Version 4.36 Beta - 4 September 2015 Version 4.35 Beta - 21 July 2015 Version 4.34 Beta - 11 May 2015 Version 4.33 Beta - 25 March 2015 Version 4.32 Beta - 11 March 2015 Version 4.31 Beta - 25 February 2015
UpVersion 4.30 Beta - 30 January 2015

Version 4.29 Beta - 23 January 2015
Version 4.28 Beta - 15 April 2014
Version 4.27 Beta - 11 April 2014
Version 4.26 Beta - 10 February 2014
Version 4.25 Beta - 30 October 2013

Version 4.24 Beta - 17 October 2013

Version 4.23 Beta - 10 September 2013

 

Version 4.22 Beta - 16 August 2013
Version 4.21 Beta - 9 August 2013
Version 4.20 Beta - 17 July 2013
Version 4.19 Beta - 1 July 2013
Version 4.18 Beta - 26 June 2013
Version 4.17 Beta - 12 June 2013
Version 4.16 Beta - 23 May 2013
Version 4.15 Beta - 16 May 2013
Version 4.14 Beta - 1 May 2013


Template Version 4.13 Beta - 17 April 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

Template Version 4.12 Beta - 25 February 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.11 Beta - 20 February 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.10 Beta - 31 January 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.09 Beta - 16 January 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.08 Beta - 9 January 2013

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.07 Beta - 19 December 2012

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.06 Beta - 6 December 2012

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.05 Beta - 28 November 2012

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.04 Beta - 16 November 2012

Upgrading from Office Inside 3? Make sure you work through What must I change in my application after upgrading

General Version 4.03 Beta - 16 November 2012

Upgrading from Office Inside 3? You need to download and install the latest SendTo v2.13 (which includes OI4 tweaks)

General Version 4.02 Beta - 16 November 2012

Upgrading from Office Inside 3? You need to download and install the latest SendTo v2.13 (which includes OI4 tweaks)

General Version 4.01 Beta - 16 November 2012

You need to download and install the latest SendTo v2.13 (which includes OI4 tweaks)

General Version 4.00 Beta - 15 November 2012

You need to download and install the latest SendTo v2.13 (which includes OI4 tweaks)

General Version 3.76 Gold - 08 March 2012

General Outlook Version 3.75 Beta - 21 February 2012

General Version 3.74 Beta - 10 February 2012

General Version 3.73 Beta - 09 January 2012 Version 3.72 Beta - 06 January 2012

General Excel Word Version 3.70 Beta - 02 September 2011

General Version 3.66 Beta - 02 August 2011 General Version 3.65 Beta - 2 June 2011 General Version 3.64 Beta - 1 June 2011 General Excel Outlook Work in Process Version 3.63 Beta - 11 May 2011 

General Version 3.62Beta - 09 May 2011

General Version 3.61 Beta - 06 May 2011

General Version 3.60Beta - 4 April 2011

Word Version 3.59 Beta (1 April 2011)

General Word Version 3.58 Beta (30 March 2011)

General oiObject and oiParam - Generic Object Outlook Version 3.57 Beta (15 March 2011)

oiObject and oiParam - Generic Objects oiExcel
Version 3.56 Beta (02 March 2011)

oiObject and oiParam - Generic Objects
Outlook Version 3.55 Beta (24 February 2011)

General oiObject and generic objects oiExcel Version 3.54 Beta (13 December 2010)

General Word oiExcelImpEx Version 3.52 Beta (12 August 2010)

General Version 3.51 Beta (12 August 2010)

General Version 3.50 Beta (12 August 2010)

General oiObject oiExcelImpEx Excel Outlook Version 3.41 Beta (9 June 2010)

General Version 3.40 Beta (4 June 2010)

General Excel Version 3.21 Beta (7 May 2010) General Version 3.21 Beta (3 May 2010)

General Word Excel Version 3.20 Beta (12 April 2010)

General Word Outlook Excel PowerPoint Version 3.15 Beta (21 January 2010)

General Excel Word Outlook Version 3.14 Beta (31 December 2009) Word Version 3.13 Beta (30 December 2009) Excel Version 3.12 Beta (23 December 2009)

General Version 3.11 Beta (14 December 2009)

General Version 3.10 Beta (03 December 2009)

General Word Excel Outlook Version 3.03 Beta (9 November 2009)

Word Version 3.01 Beta (13 October 2009)

General General Word Excel Version 2.77 (20 July 2009)

General Excel Version 2.76 (14 July 2009)

General Word Version 2.74 (06 July 2009)

General Excel Version 2.74 (19 June 2009)

Outlook Version 2.73 (15 June 2009)

General Version 2.72 (11 June 2009)

General Excel Version 2.71 (10 April 2009)

General Outlook Version 2.69 (11 September 2008)

General Word Excel Version 2.68 (16 July 2008)

Excel General Version 2.67 (02 July 2008) Word General Version 2.66 (11 June 2008) Word General Version 2.65 (4 June 2008) Word General Version 2.64 (04 April 2008) Excel Word General Outlook Version 2.63 (02 January 2008) Excel General Version 2.62 (11 November 2007) Outlook Version 2.61 (17 October 2007) General Version 2.60 (04 October 2007) General Word Excel Version 2.50 (12 September 2007) General Word Excel Version 2.40 (10 September 2007) General Word Excel Outlook Version 2.36 (23 July 2007) General Version 2.35 (11 July 2007) General Version 2.34 (06 July 2007) General Excel Version 2.33 (07 February 2007) General Version 2.32 (07 February 2007) General Version 2.31 (06 February 2007) General Version 2.30 (02 February 2007) General Excel Word Version 2.21 (23 January 2007) Excel Version 2.20 (16 January 2007) Word Outlook Excel Other Version 2.11 : (08 December 2006) Version 2.10 : (17 November 2006) Version 2.01 : (30 August 2006) Version 2.00 : (18 August 2006) For versions prior to 2.00 please see the Old Version History document.