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
      
        - Important: If you are using the 'Import
          XLS To TPS' control template (now called 'Import and Excel File') then
          you must move your code for processing each record from the old
          ImportXLSFile_TakeRecord() method to the new
          TakeImportRecord() method.
          Also note that instead of each column being passed as a parameter the
          columns are now passed using a queue. 
Office Inside 1.95 - 03 April 2006
        - Important: If you have declared
          queues with the same structure as those in Office Inside for use with
          methods such as GetContactsQ then you will need to change the size of
          the strings in the queue. It is strongly
          recommended that you use the types defined by Office Inside. See the
          Demo application for examples. If your queue structures are incorrect
          you will get the compiler error: Syntax error: No matching
            prototype available.
Features
    
      
        - Take control of Microsoft Office from your app. No stability issues,
          no learning curve, no "funny" data types, no worries. At this time you
          can automate:
          
            - Microsoft Word
- Microsoft Excel
- Microsoft Outlook
- Microsoft PowerPoint (work in progress)
 
- Examples, docs, and / or templates will enable you do add the
          following to your apps in under 5 minutes :
- Spell Checking
- Read / Write to the Address Book
- Add / Edit Tasks in MS Outlook
- Generate read-only, or fully editable Word and/or Excel documents
          from your existing Clarion reports, without having to add any extra
          code!
- Generate fully editable Excel spreadsheets from your existing
          Clarion data, with a couple of lines of code!
- Send email straight to your MS Outlook "Outbox"
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 |  | 
          
            | Telephone | +27 87 828 0123 | 
          
            | Fax | +27 21 715 2535 | 
          
            | Post | PO Box 511, Plumstead, 7801, Cape Town, South Africa | 
        
      
      
      
    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
		
			- 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. | 
		
		
			- 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). 
 
					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."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.
 
 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
	- 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 )
- 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)
- 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!
- 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.
- 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.
- 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.
- 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.
- 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
	
		- 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.
- 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).
- 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.
- 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.
- 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
	
		- Can I use Office Inside to integrate with 64bit Office?
 
 Yes
- Does Office Inside support Legacy applications?
 
 Yes
- 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.
- 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.
- 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.
- What do I need to use the Word and Excel editable report templates?
 
 
			- 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.
- In previous version the Softvelocity Advanced Report output templates were required,
	          this is no longer the case.
 
- Dynamically Creating OfficeInside objects using New
 
 You can use New to create a new OfficeInside object, however
you must ensure that:
 
 
			- The .disabled property of the class is
		set to 1 directly after the New call.
- 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)
- 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)
	- 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.
- 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:
 
  
- 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’)
- 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.
 
- 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
-  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.
- 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.
- I get a lot of unresolved Externals involving  PW_
 
 You must check the "Link pwutil into project" checkbox on the Global
	extension template.
- 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
 
 The PROTECTED attribute needs to be commented out in order
    to allow Office Inside to identify which control the object is associated
    with.
- 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
- 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.
- 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
	- Issues with Office Inside and Zone Alarm.
 It has been reported that certain versions of
		Zone Alarm (including  Zone
	    Alarm Pro Ver. 4.5.530.000) seem to cause issues when using Office Inside.
	    Apparently version 4.0.146.029 works fine..  (Thanks to Johan de Klerk
	    for figuring this one out..)
	    
	- When UAC is enabled, my application has problems
		accessing Outlook. 
 Ensure that your applications
		that will interact with Outlook have a valid manifest file for Vista/Windows
		7. Without a valid manifest file, your application may require
		elevation in order to run, which will prevent Outlook from displaying
		security prompts to the user. In the event of a security prompt requiring
		user interaction, this will prevent your application from interacting with
		Outlook, and it may appears as if your application has locked up while
		waiting for a response from Outlook. It is strongly recommended that
		elevated applications do not interact with Outlook directly. The Microsoft
		design recommendations should be followed - separated the functionality that
		requires elevation into a seperate application, or seperate the components
		that interact with Office into applications that can be run without
		requiring privilege elevation.
		
	- When I use a filedialog using the directory
		flag, I get a GPF (or the directory list does not display).
 This is an unfortunate side-effect of OI. We believe that this could be an
		interaction with the Clarion RTL when displaying the directory dialog.
		Unfortunately, at this stage the only work around is to use the directory
		flag without the longname flag which seems to circumvent this issue.
 
- When I use 2 OfficeInside extensions on the same
	window (for example SpellChecking and Email), I get a GPF.
 You have to kill the one before using the other. The Email component is
	used after the spell checking is done, so you need to set the Outlook
	extension to Initiate under “I will do it myself” and then just before you
	go into the send procedures, do the SpellCheckingObject.Kill() to kill the
	spell check and then after that do a OutlookObject.Init() and the rest.
 My Legacy application crashes after adding Office Inside.
- This is most likely because you are including the use of the Editable
	report templates. You can either exclude these on the global extension, or
	in the application global properties (Classes tab) check the "Enable the use
	of ABC classes" which will include ABC into your legacy application (thus
	making the use of the Editable reports possible).
 I get a GPF on init when opening the window with OfficeInside object
	added.
 If you added FileExplorer, then you must check the Activate Compatibility
	with File Explorer checkbox on the OfficeInside local template.
 
 
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
	- If you have not done so already, add the OfficeInside
		global extension to your application.
- 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:
	- 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
- 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
 
- 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:
	
		- Demo: The full OfficeInside demo application. This
			application is a great place to start and is updated with many of the latest
			and greatest Office Inside features. Although it uses the ABC template
			chain, the templates and embed code is identical for Legacy
			applications. This is a Clarion 5.5 app file. 
- Editable Reports: Demonstrates the output to Word
			and Excel editable reports from Clarion reports. This feature allows any
			Clarion report to be output to a fully editable Word or Exceld document.
			Supported by Clarion 6 and later.
- FileExplorer: A simple example of using
			FileExplorer in conjunction with OfficeInside
- Multi-DLL: A simple Multi DLL project, aimed at
			showing how OfficeInside should be configured in multi DLL applications.
- RtfToHtml: Demonstrates how to convert RTF text to
			HTML using OfficeInside (The same techique can be used to convert HTML
			to RTF).
- Spell Check HTML:
			Demonstrates implementing spell checking in an HTML editor (uses
			FileExplorer).
- Word to MHT, EML: Uses word to convert any format
			that Word supports (Word, RTF, HTML etc.) to an MHT or EML (Web
			archive/Email), and then displays the resultant document using
			FileExplorer. This also effectively provides a document viewer within
			your application for any format that Word supports.
 
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.
	- Complete source code Except for the COM controller DLL (pwutil.dll - which is
		in C), Office Inside is now shipped completely as source code. This means
		you have direct access to all the classes, to derive and control in a very
		granular fashion. This gives you direct access to the COM classes, and thus
		get, set and run any COM property or method that exists in the Office
		classes.
- Improved Report Engine Improved algorithm for determining column output for
		reports to word and excel.
- Macro to Clarion code This is a Work
		In Progress, but our goal is to enable you to convert macros from Excel/Word
		to Clarion code with ease.
- Generic Objects implementation that give you the power to leverage
		functionality of the entire Office Object Model directly, thanks to the
	source code version.
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:
	- Multi Document support, allowing multiple documents to
		be handled and opened simultaneously, switched between, modified etc. using
		a  single object (this is stil WIP in the first release) 
- A new utility class and printing methods for listing all printers
		on the system and allows more control over the printout.
- Improved performance (report processing speed, document
		interaction, etc.)
- New Spell Checking objects and templates, for faster, more reliable and
		more powerful spell checking and full C7 support.
- 
New Excel Import and Export class. The oiExcelImpEx class allows you to import
and export data between Excel and Clarion data structures such as queues, files,
views and groups. It provides the ability to export or import data with a single
method call:
	- excelX.Save(myFile, 
		Longpath() & '\myfile')  	
- excelX.Load(myQueue, excelFileName)  	
 
- Query style access to Outlook data, allows database style access to
		Outlook data, synchronisation, location of specific items by their field
		values and more. 
- Additional performance improvements across the board 
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:
	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 /oidebugoff | almost no debug output | 
| MyApp.exe /oidebugmin | minimum amount of debug output | 
| MyApp.exe /oidebugmax | maximum 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:
  - Anything prefixed with an underscore ( e.g. the
    _ConvertColorValue() method or the
	_oi:VersionCounter equate ) implies that it was
	  built for "internal" use only, and is not intended to be used publicly (unless
	  otherwise documented). 
- Equates which pertain only to specific Office
   	  Inside components are prefixed as follows:
    
      - Microsoft Word - oiw:
- Microsoft Excel - oix:
- Microsoft Outlook - oio:
 
- Equates which do not pertain to a specific
      component ("global" equates) are prefixed with
	  oi:  (e.g. 
	  oi:REG_NONE)
- Refer to the documentation for each method to
        see how error handling is done. Some methods will return a 1 if the
		method did not encounter any errors, other methods (where a value needs
		to be returned) will return a negative number to indicate an error, e.g.
		oiExcel.CountOpenWorkbooks() which would return 2 if two open
        workbooks were found, or -1 if an error occurred.
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.75 - 27 May 2025
  Version 4.74 - 7 March 2024
  - Fix: Excel: SetPaletteColor method supports Windows Color Equates.
- Fix: oiExcelImpEx.PrimeRecord method did not loop through colMap property.
Version 4.73 - 12 January 2024
  
Version 4.72 - 7 June 2023
  
- Renamed IID_ISequentialStream to cs_IID_ISequentialStream to avoid warnings in systems using EasyCom2Inc
Version 4.71 - 7 June 2023
  
- Improvements to the oiExcelImportWizard and oiExcelImport classes. You can now elect to only insert new records (not change existing) and only change existing records (not add new). 
- 3 new properties of the oiExcelImport class: Request (when importing set to ChangeRecord or InsertRecord depending on whether the imported record exists or not), Errors (could not add/update the record), IgnoredRecords (did not insert/change the record).
- The new DeleteFileAfterImport allows automatic deletion of the excel file after completed import. (Set to 0 for no delete, 1 for always delete and 2 for only delete if no errors or ignored records).
- New Embeds around call to spell checker
Version 4.70 - 27 January 2022
  
	Version 4.69 - 27 January 2022
  - Fix: Some properties were being defaulted in the class declaration, and these defaults are not applied when classes are NEWed. These defaults moved to constructor methods.
Version 4.68 - 17 October 2021
  - Add: Optional OpenPassword and EditPassword parameters to Excel SaveAs method.
- Add: SetFileType, SetPasswords methods.
- Updated some of the templates to make use of Clarion 11 wide template screens.
Version 4.67 - 8 June 2021
  Version 4.66 - 24 May 2021
  
	Version 4.65 - 3 September 2020
		- Fix: ImportExcelToTps wizard used fixed object name of MyExcel
		instead of name set by developer.
Version 4.64 - 25 July 2020
		- Fix:  Break after one record if saving a Group
- Fix: When saving a VIEW the CurrentFieldNumber was not being set
- Fix: If Self.NumRows is not set (ie left as -1) then no limit on
		export is applied.
Version 4.63 - 13 May 2020
		- Fix: Regression in 4.62 (in the SaveAs Excel and NewObject Baseclass
		methods) where OMITTED code was incorrect.
- Removed trace statement (for every debug statement even if debug
		mode was off).
Version 4.62 - 19 December 2019
		- Refactor: Use of OMITTED in Excel class to cater for Legacy objects
		that generate boiler-plate empty methods.
Version 4.61 - 22 October 2019
		- Change: More Equate names changed to avoid conflict with EasyCom. 
Version 4.60 - 16 October 2019
		- Change: Various Equate names changed to avoid conflict with EasyCom.
		If you encounter an error in your embed code add oi or pw to the front
		of the offending equate. For example IID_IPICTURE
		becomes pwIID_IPICTURE. Use of these equates
		in code is not expected though.
Version 4.59 - 15 October 2019
		- Fix: Repeated calls to ReplaceText, on Different documents, would
		fail.
Version 4.58 - 13 September 2018
		- Add: Clarion 11 to install.
Version 4.57 - 6 August 2018
		- Add: Code Template, ImportXLS,  Calls to ExcelImport method
		return the result in an implicit result# .
- Add: oix:xlPDF as SaveAs equate for XLFileFormat.
- Add: SetWorksheetEnableSelection method to oiExcel class.
- Add: TakeSaveRecord, TakeLoadRecord, LoadCellsQueue,
		UpdateFileRecord methods to  poExcelImpEx class
- Removed: c55 property from oiExcelImpEx class
Version 4.56 - 8 March 2018
		- Add: Excel Reports - when exporting a report to Excel can now
		specify Worksheet name (sheet will be created if necessary).
- Add: Excel Reports - can now export into an existing file.
- Change: Improvements to the WMF-to-Office algorithms.
Version 4.55 - 29 Jan 2018
		- Add: trace method to _oiRepGen class 
Version 4.54 Beta - 29 Jan 2018
		- Extra embed points added to the init office and kill office methods.
- oiRepGen.Setup method fixed - was missing some controls when
		generating.
- _oiRepGen.AssignColumn - improved algorithm for assigning a field's
		column.
- _oiRepGen.AssignControlsToGrid - improved algorithm for assigning a
		header or footer band's controls to the closest detail control. Also
		improved mechanism for determining whether a control is in the header,
		footer or detail band.
- _oiExcelRepGen.WriteDataToCell - fix to generate normal background
		if a cell is empty (was generating a black cell).
- oiExcel._WrapperRange - fix GPF when using select without a range
		(now WrapperRange is correctly called using the select equate, instead
		of the value equate).
- New method: oiWord.MailMergePrint - method introduced for a
		mailmerge to printer.
Version 4.53 Beta - 5 Jul 2017
		- oiWord - Added version of
		method SpellCheckRTFText which takes a Cstring.
Version 4.52 Beta - 20 June 2017
		- oiWord - refactor of spell checking for RTF text. Now calls new
		method SpellCheckRTFText.
Version 4.51 Beta - 5 December 2016
		- oiExcel - fix for ColumnNumber method (returning a column number
		from the Excel Column label). Was not returning column number > 27
		correctly.
Version 4.50 Beta - 24 November 2016
		- OiExcel - new method: 
		WriteFormulaToCell
- oiOutlook - new method: 
		GetMailRecipientsQ for extracting names and email address for a
		particular email.
- The template now uses a Project Define _OI45_ so that these methods
		can be used in our tools.
Version 4.38 Beta  - 16 October 2016
		- Renamed SetProperty method to oiSetProperty. renamed GetProperty
		method to oiGetProperty. Avoids clashes with H5 template.
- Change: IID renamed to cspw:IID. 
- Change:  HKEY_* equates renamed to cspwHKEY*.
Version 4.37 Beta  - 12 November 2015
		- Added cs prefix to some API calls which clashed with SV API
		prototypes.
- Thread added to __VarientFactory
Version 4.36 Beta  - 4 September 2015
		- Fix for GetColumnWidth for columns > 'Z'. 
Version 4.35 Beta  - 21 July 2015
		- Work-around for drag and drop (dragid no longer setting drag and
		drop ids on the same thread) in Clarion 9.1 (and up) in the Excel Import
		wizard.
- Excel Import wizard interface can be used to export to excel (coming
		soon).
- Support for using ABC classes in the insert and update methods (for
		importing from excel).
Version 4.34 Beta  - 11 May 2015
		- Normalized debug method across classes so derived methods had the
		same prototype as the base class.
Version 4.33 Beta  - 25 March 2015
	Version 4.32 Beta  - 11 March 2015
		- Includes missing oiABPROIversionspecific.clw in Clarion 10
 
Version 4.31 Beta  - 25 February 2015
		- Installer supports Clarion 10
- Updated some use of %cwversion
		UpVersion 4.30 Beta  - 30 January 2015
	
		- Fix: Compile error for missing property definition (regression in
		4.29)
Version 4.29 Beta  - 23 January 2015
		- Fix: Possible "Index out of Range" in AssignConttrolsToGrid
- New method in oiOutLook : CreateContactGroup
Version 4.28 Beta  - 15 April 2014
		- Fix regression in 4.27 - calling function as procedure warning.
Version 4.27 Beta  - 11 April 2014
		- Rename POINT and RECT to csPOINT and csRECT declarations in the
		cspwapi files.
- Included the cspwapidef.inc file into the cspwcom.clw file (to allow
		declaration and export of the _vtstr function).
- SetCellFormat enhanced
		to support the Currency in Excel.
- oiExcelImpEx class defaults self.killWhenDone property to 0 (which
		means you can re-use the save and/or load in the same procedure).
		oiExcelImpEx.Kill method now behaves like the oiExcel Kill method. Close
		now does the clearing of the mappings, etc.
- DLL mode set in oiOfficeInside.inc for the classes that did not have
		this attribute set (msWord, oiExcelImpEx,
		oiExcelImportWizardScreenControls, oiExcelImportWizard) 
- oiOutlook.UpdateAppointment - includes the Location field update.
- oiWord.SetSelection - If ColumnNumber is 0 and RowNumber is set,
		then selects the whole Row, and similarly if RowNumber is 0 and
		ColumnNumber is set, then selects the whole column.
- Template - removes old OfficeInside libs from the project.
Version 4.26 Beta  - 10 February 2014
		- Clarion 9.1 compatible install file.
- Removed some debugging output code
- New oiWord.RunMacro method makes
		it easy to a macro from code.
- Refactored the msOutlook class (moved some of the appointment
		handling code to the oiOutlook class).
Version 4.25 Beta  - 30 October 2013
		- Template fix: Exports the IReportGenerator derived methods (from the
		new IOutputGeneratorTarget parent interface).
Version 4.24 Beta  - 17 October 2013
	
		- Template fix: Word readonly reports outputs to non-editing mode.
- Import Wizard template fix: When table is selected, related table
		selection list is populated (for possible related table lookup
		selection).
- Template fix: Fix for RTFControl spell checking. 
Version 4.23 Beta  - 10 September 2013
		- Word and Excel Target Generator classes - Report to Word and Excel
		now works correctly.
- Button on Office Inside template to import the Excel Wizard
		procedure (also re-arranged template prompts on extension templates)
 
	Version 4.22 Beta  - 16 August 2013
	
		- Template fix for missing C9 target generator class method exports. Regression introduced in 4.15 for C9 (not able to export the
		class methods in the partial file).
- Include updated oiABPROIVersionSpecific.clw file for C6 install.
- Template fix in C9 for missing variable definition:
		%EAPOStartPowerPointVisible
Version 4.21 Beta  - 9 August 2013
		- Template fix in C9 for missing variable definition: %EAWOReportFileName
- C9 fix for duplicate variables (SC_xxxxxx)
- Move entire oiWordRepGen and oiExcelRepGen classes to different clw
		file (was not exporting the methods in the oiABPROIVersionSpecific.clw
		file). Regression introduced in 4.15 for C9 (not able to export the
		class methods in the partial file).
- Fix for missing %EAPOStartPowerPointVisible in new OfficeInside
		applications.
Version 4.20 Beta  - 17 July 2013
		- Work around for change in IReportGenerator interface in Clarion9
		(includes more GetFileName method added to 10209). 
Version 4.19 Beta  - 1 July 2013
		- FileExplorer compatibility improved (some apps generate duplicate
		function warnings).
Version 4.18 Beta  - 26 June 2013
		- Template tweak: Improved support for MultiProj in Clarion 8 (removed
		EOL character between defines).
- Class tweak:  Rename CURRENCY equate to cspwCURRENCY (in case
		of duplicate name).
Version 4.17 Beta  - 12 June 2013
		- oiExcel class: New selection oiObject in general objects (set in
		getobjects). GetSelection method sets the pointer to this object. 
- oiExcel class: Fix for AutoFilter (not functioning correctly):
		AutoFilter params changed to omit-able pFromColumn (if omitted then all
		columns are filtered). If pToColumn is omitted, then
		self.CountUsedColumns() is used. AutoFilter now uses the self.selection
		object (instead of the old wrapperrange class).
- oiOutlook class: Fix for GPF in the sendemail routine (where only
		one email address is used, and a semi-colon proceeded the email
		address).
Version 4.16 Beta  - 23 May 2013
		- Update: Implement 4.02 of cape templates.
- Fix: Excel, Outlook and PowerPoint templates updated to respect
		local "do not generate code" switch.
- Template change: readclasses into template variable in the context
		of the Global OfficeInside template (c6 context mode gets switched
		sometimes).
- Template fix: exclude derived methods from being exported when
		oiABPROI classes are not exported.
- Include pwutil.lib and correct project defines in MultiProj project
		in C7 and up.
- Exclude Clarion 5.5 specific template code for declaring the
		classes.
- PrimeField template derived method uses field handle (rather than
		field name).
- Template derived method uses MethodID rather than method name check:
		PrimeRecord, Setup, InsertRecord, NewTableSelected, SaveSettings
- In oiExcelImportExport class: only inlcude the header row if the
		startrow> headerrow, strip the prefix from the field names in the wizard
		field headers, don't auto-adjust the width of the columns in the field
		list.
- Fix GPF in oiWord.ReplaceTextEx (oView pointer was not set, rather
		use self.view child object).
Version 4.15 Beta  - 16 May 2013
		- Template change - OfficeInsideStub.tpw file made non-version
		specific (now that Clarion5.5 is no longer supported).
- Work around for change in IReportGenerator interface in Clarion9.
		Additional file oiABPROIVersionSpecific.clw (different for C8 and below
		to C9 and up) shipped.
Version 4.14 Beta  - 1 May 2013
		Template
		
		- Fix for Clarion 9 support.
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
		
		- Changed to Ver4 object/template management system (this involved
		some significant changes to the templates around class generation and
		the way multi-dll systems are generated).
	IMPORTANT 
	READ THIS.
- Add: support for Multi-Proj in C8
- Template Change - Moved #prepare outside the #sheet group in the
		global extension, moved Multi-DLL support group to it's own tab and new
		options tab.
- Template Change - include local disable here Template checkbox on
		Add_MSWord_Object did not disable OfficeInside completely on the
		procedure.
- Template Change - Excel filename for report uses the standard
		'Quotes' or variable. Old template prompt was ported to the new name.
- Template Change (ExcelImportWizard) - hide TablesList if only one
		table (and pre-select that table).
- Template Change (SpellingSuggestions control template) - change to
		use %Window rather than window (for those changing the window
		declaration).
- cspwapi.inc class change - change OSVERSIONINFO and OSVERSIONINFOEX
		to prefixed with cs to avoid duplicate declaration warnings.
- oiExcelImpEx.Load change - New property IncludeHeaderRow - set to a
		particular excel row to include that particular row in the import
		(showing headers) - also fixed for TakeRecord to break on outofrange or
		cycle on Record:Filtered
- ExcelImportWizard class change - Allow double click on the field map
		to remove a mapping. Selecting on the fieldmap or the sample table list
		selects the corresponding field in the other list.
- oiObject.GetChild method - an additional generic method to get the
		particular instance of a child (in a matrix of child objects - like cell
		by row/column) and initialize it.
- oiWord.SetSelection method - allows focus on the header and/or
		footer and the ability to select a particular table (and cell) therein.
- oiWord.OpenHeader/CloseHeader/OpenFooter/CloseFooter methods - uses
		oiObject to open/close the header/footer
- oiWord.ReplaceTextEx method - All replaces text in the header,
		footer, and body
- oiWord.GetObjects method - returns if already called (using
		GetObjectsDone to determine this)
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
		
			- Word ReplaceText method - ReplaceAll includes replace for text
			in shapes (like textboxes).
- Excel ImportWizard class - Property:
			FieldListControlDefaultWidth, FieldListControlCollapsedWidth,
			LastFrozenFieldListColumn; New Method: RemoveColumnMap. Allows you
			to collapse columns, unmap all, unmap right to enable easier mapping
			for large imports.
- Excel ImportWizard class - Work around if Excel fails to
			initialize (at first), and if all Excel example spreadsheet list
			column widths are set to 0, then reset (according to whether the
			column should be visible or not).
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
		
			- Template - set copyright to 2013
- Template change - export to report template uses %report (not
			report) in case report is changed to a different name.
- cspwcom.inc change - FONTNAME changed to cspwFONTNAME (avoid
			duplicates in case of other COM tools).
- oiExcelImpEx class - .Next method (instead of next()) - allows
			overriding of the next() call (to use for example
			access:filename.next.
- oiExcelImpEx class - ValidateRecord allows client side filtering
			during the load/save methods.
- oiExcelImpEx class - .Set method (instead of set(file)) - allows
			the default primary key to be used, or a key can be specific in the
			derived method.
- oiExcelImportWizard class - popup on field map allows all fields
			to be unmapped (or to the right of this column).
- Type attribute added to the oiFieldMapQ definition.
- Examples tidied up.
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
		
			- Resolved more duplicates (with other 3rdparty COM tools) -
			iDispatch,Variant_True, Variant_False and Variant_Bool
- Multi-Proj support: Removed compile limitation around GET method
			calls (since Clarion 6.1 and below is no longer supported)
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
		
			- Uses office01.tpw (regression in 4.08 when attempting to use
			cape01.tpw)
- Template change - attempt to fix problem where #system is
			intimitently not running the %ReadClasses section. Run at the local
			level (as a backstop).
- ImportWizard template - allow import into table, and support
			update (where re-import is required). 
- ImportWizard template - support relational lookup on many:1
			tables. Excel spreadsheet can contain the description, which can be
			added or lookedup for the related ID field population into the
			imported field
- ImportWizard template - can highlight required fields (which
			can't be removed from the import). Does not permit import to
			continue if required fields are not mapped
- ImportXlsToTpsABC utility template selects the correct txa
			dependant on whether it's a C8 or C6 import.
- ImpEx class fix - if column is not mapped, then don't
			assignfield - leave blank.
- ImpEx class change - new method PrimeField allows a field's
			value to be altered in derived code (like for a lookup).
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
		
			- Fix compile errors associated with duplicate equate definitions
			(HORZSIZE, VERTSIZE, LOGPIXELSX, memcpy, etc)
- Fix compile errors associated with clashing interface names
			(with other COM classes) : IUnknown, ISequentialStream
- oiExcelImpEx - call parent destruct (was only calling kill,
			resulting in a GPF on the second instance of a window in the same
			thread).
- New classes - oiExcelImportWizardScreenControls to handle new OI
			wizard control template (oiExcelImportWizard class requires this
			class to be used). Excel import wizard now has saved import formats,
			displays a sample of the Excel spreadsheet to be imported and a
			previewer for the table to receive the imported data, supports
			dragging and dropping between these two lists for easy column
			selection. 
- oiExcelImportWizard class uses oiExcelImportWizardScreenControls
			for all the control handles (a work around to allow the class
			properties to be screen controls).
- oiExcelImportWizard TakeEvent handles ExcelfileName lookup
			control, TableListControl selection. New methods: SaveSettings,
			RestoreSettings, GetMappedStrings, AddTable, RestoreFieldMapQ.
			oiTablesList expanded to include TableDescription, TableName,
			FileManager pointer and record buffer pointer.
- New method ReplaceTextEx - additional parameters to allow for
			options: pMatchCase pMatchWholeWord.
- ReplaceText fix - now uses oiObjects. Was not during recurssive
			replaces correctly.
- oiOutlook UpdateTask - fix to allow for body text of a task >
			255 characters.
- Template forces the pwutil.dll copy (for multi-proj multi-dll
			apps where OI is not added to the EXE app).
- MProj fix - includes the pwutil.lib into the project (if
			required).
- Add IReportGenerator methods required by oiWordRepGen (to the
			export file)
- New control template for the ImportFromExcelWizard controls.
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
		
			- Fix compile errors associated with other 3rdparty tools using
			the same API calls  (FORMATETC, etc)
- Add linkmode switch to classes (also _oilinkmode_ to the project
			defines)
- Add interface procedures to the procedure export from the data
			dll.
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
		
			- Fix compile errors associated with other 3rdparty tools using
			the same API calls  (InitializeCriticalSection, etc)
- GetObjects method (in the
			oiExcel class)
- Merge msExcel destruct with the oiExcel destruct methods (msExcel
			class will be deprecated).
- Export methods from the oiABPROI file (multi-dll), as well as
			procedures from the oiObject.clw file.
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
		
			- Fix compile error oi_GetWorkAreaWidth() (in some cases where
			this function was used) in multi-dll applications.
- Redefined conflicting COM object declarations (where COM classes
			were also defined by ADO COM or another 3rdParty COM class).
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
		
			- Renamed internal Office API equates (to allow for the
			co-existence of another COM office tool, like EasyExcel).
- New Properties in the oiExcelImpEx class:
			RowsDone and ColsDone
- Fix for "Function did not return value" in oiWord.clw
- Beginnings of the oiExcelImportWizard class
- Includes a reformatted offdemo.app (internal issues with module
			numbering)
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
		
			- Redistributed modules in the offdemo (duplicate name).
- Fix for Word Reports (was not getting the correct number of
			columns in a table).
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
		
			- OfficeInside nows ships as source. Only pwutil.dll needs to be
				shipped with your applications, regardless of whether they are compiled
				in local (Lib) mode or Standalone (DLL) mode.
- The classes in msOffice.inc and msOffice.clw included with the
				"Generics" examples has been merged into the main OfficeInside classes.
- Improved
Version 3.76 Gold - 08 March 2012
	General
		
			- Added:
				Converting a Macro from VBA to Clarion using
				OfficeInside (recommended reading)
- Added:
				Passing Parameters (oiParams)  (recommended reading)
- Fixed: Generics example the
				msOutlook.Kill method was setting the optional unloadCOM parameter to 0
				by default rather than 1. When the object was used on a thread which was
				created multiple times this would result in a failure the second time
				the thread was started.
	Outlook
		
			- Added: DocToMsg example in the
				Generics example folder. Creates an Outlook mail message from a Word
				document and sends it. 
- Added: msWord.GetMailEnvelope()
				method to the msWord class. This returns the Mail Envelope item which
				can be used to create an Outlook Mail Item from a Word document.
				Demonstrated in the Generics\DocToMsg.app example.
- Added: msOutlook.DocToMsg
				method which takes the Envelope item returned by the msWord.GetMailEnvelope()
				method, creates an Outlook Mail Items and sends it using the provided
				destination address and subject line. Demonstrated in the
				Generics\DocToMsg.app example.
Version 3.75 Beta - 21 February 2012
	General
		
			- Fixed: An error in the template
				which result in the OfficeInside TakeEvent embed code being orphaned.
- Fixed: oiObject.GetChildEx failing
				because the call to oiObject.FromVariant was not passing the child
				object.
- Fixed: GPF when calling
				oiObject.GetChild or GetChildEx with invalid objects or Null parameters.
- Added: oiObject.ErrorTrap method
				which improves error handling and translates COM errors.
- Added: Passing objects as
				parameters when calling methods using the oiObject class.
- Added: Demonstration of adding
				Page Breaks to the Generics example. This calls the msExcel.AddPageBreak
				method (in msOffice.clw in the Generic folder). It demonstrates working
				with Sheets, retrieving a collection (Sheet.PageBreaks), getting a child
				object where the GetChild call requires multiple parameters (Calling
				GetChildEx to get Sheet.Range), and calling methods which take multiple
				parameters (using the self.Params object). It also demonstrates calling
				a method which takes another object as a parameter - PageBreaks.Add(),
				which takes a Range parameter
Version 3.74 Beta - 10 February 2012
	General
	
		- Added: oiObject.InitFromID
			method. Primarily for internal use, provides intialization of objects by
			ID rather than name.
- Fixed: The oiExcel.GetWorkbooks()
			method moved to using the new InitFromID and now correctly returns the
			Workbooks collection.
- Added: msExcel.OpenXML
			Procedure(string name, long loadOption=2). This is demonstrated in the
			Generics example application. This method can
			be used to open an XML file in Excel and import the data into columns,
			with field names headers etc.
Version 3.73 Beta - 09 January 2012
		- Regression fix introduced in 3.72 - in Clarion 7.3 and up was trying to
			use C70OFF.DLL instead of CLAOFF.DLL
- Regression fix introduced in 3.72 - in Clarion 7.3, where FileExporer
			was used in the same app in local mode, there were duplicate symbols.
Version 3.72 Beta - 06 January 2012
	General
	
		- Added: New and updated methods to
			the classes provided with the Generics example application:
			
				- msWord.SetStyle - sets the style of the current
					selection
- Updated the msOutlook.NewMail method . Supports
					getting the Attachments object for a mail item and adding new
					attachments; setting the HTML body as well as the text body, and
					auto saving a draft:
 
 msOutlook.NewMail Procedure (<string subject>,
					<string mailTo>, <string body>, <string htmlBody>, <*msAttachmentsList
					attachments>, bool autoSave=false)
- Added automated Outlook restart to the Generics
					example (this is already demonstrated in the
				oiMail
					example). This functionality detects the Quit event if the user
					exits Outlook while the application is automating it, and creates a
					new instance of Outlook for automation to continue functioning.
 
- Fixed: Incorrectly named export for the
			oiParams.Fetch method.
- Fixed: Generation errors in Legacy
			applications in Clarion 8.
- Fixed: The Editable Report output
			to for Word and Excel creating zero byte temp files.
Excel
	
Word
	
		- Fixed: PrintOut
			method failing and not printing the document depending on the parameters
			passed.
Version 3.70 Beta - 02 September 2011
	General
	
		- Fixed: Error with Multi-Proj template
			settings for applications in C7.1 and up resulting in Duplicate Symbol
			errors.
- Updated: Removed verbose logging from
			the Excel editable report output class. 
- Fixed: Compile warning - The Generics
			example class msOutlook.Init not returning a value.
- Updated: The Generics example class
			msOutlook.SendReceiveAll to allow it to be called as a procedure
			(without checking the return value).
- Updated: The msOffice.clw and
			msOffice.inc files in the HTML Mail (FileExplorer) example.
- Note: Clarion 7.3 and 8 have a bug which
			causes Duplicate Symbol errors on the Construct@F11PWCOMINITER method
			when compiling in LIB mode. This has been reproduced and reported to
			SoftVelocity.
- Fixed: Typo in the
			Fetching and
			Saving Attachments section (the GetMailAttachmentsQ method was incorrectly spelled).
- Added:
			Fetching and
			Saving Attachments section to the Contents
- Updated: The Outlook Contents section of
			the documentation
- Added: The Demo example now demonstrates
			retrieving a list of attachments for a message and saving all
			attachments to disk in the Outlook_ReadEmailFolders example procedure.
- Fixed: Template note adding the
			oiImpEx.clw to the project for C55 applications.
- Added: C55 and Legacy compatibility to
			the oiImpExcelEx class
- Added: C55 Legacy version of the
			ImportExport example
- Fixed: Incorrect Get statement in the
			ImportExport example.
Version 3.66 Beta - 02 August 2011
	General
	
		- Fixed: Missing files in the HTML Mail
			(FileExplorer) example.
- Added: New methods to the msOutlook
			class used in the Generics example which demonstrates the new
			functionality provided by Office Inside 3. The new code demonstrates how
			to trap Outlook events and how to automatically restart Outlook in the
			background if it is closed by the user.
		
			- Init() - calls the parent's Init method and
				stores the current thread number for event handling
- New event handling methods:
 EventItemSend Procedure (), derived
 EventNewMail Procedure (), derived
 EventReminder Procedure (), derived
 EventOptionsPagesAdd Procedure (), derived
 EventStartup Procedure (), derived
 EventQuit Procedure (), derived
- TakeEvent - handles events from the current
				thread
- OnQuit - traps the Quit event for Outlook and
				checks whether Outlook was closed by the object or the user. If the
				user closes Outlook it is re-initialized.
- RestartOutlook - Restarts Outlook in the
				background if the user closed the last Outlook window or inspector.
 
- Fixed: msOutlook.UpdateAttendees
			and msOutlook.AddAttendees where checking the optional
			parameters incorrectly
- Added: LegacyMail.app example to the
			Generics example directory. Identical to the Mail.app except that it is
			based on the Clarion rather than ABC template chain.
- Updated: Removed extraneous code from
			the Mail.app example (in the Generics folder).
Version 3.65 Beta - 2 June 2011
	General
	
		- Fixed: The msOffice.clw and msOffice.inc
			files shipped with the Generics.app and Mail.app examples (Examples\OfficeInside\Generics\)
			were not included correctly in the last release.
Version 3.64	Beta -  1 June 2011
	General
	
		- Improved: The GetOfficeVersion method now retrieves
			the version directly from the object and only falls back to reading from
			the registry in the case where this fails.
- Added: oiOffice.GetVersionFromRegistry method. This
			is equivilent to the older GetOfficeVersion method and retrieves the
			current version of Office using the registry. It also checks for the
			presence of the the Microsoft Office Compatibility pack when checking
			installed versions.
- Improved: All the Version.lib API
			functions are now loaded at runtime and version.lib is no longer linked
			into either the DLL or LIB. This ensures that OfficeInside does not
			conflict with other accessories that use these APIs.
Excel
	
		- Fixed: oiExcel.GetWorksSheets(*oiObject) not retrieving the
			Worksheets object correctly
		Outlook
	
		- Added: New HTML Email example. Demonstrates displaying the HTML
			version of Emails retrieved from Outlook using CapeSoft FileExplorer.
- Added: New Mail example
			(in the Generics directory). Use new code in the msOffice.clw and
			msOffice.inc files provided with the example:
			
				- New msOutlook.GetFilteredMail method retrieves
					all items in the specified folder using column restriction and
					optionally record filtering in 
- New msOutlook.MailByDate demonstrates using the
					mail filtering to retrieve mail that matches a date range
- New msOutlook.FindMail method demonstrates
					using Find and FindNext to retrieve mail that matches a filter
					expression.
- Demonstrates Restrict,
				SetSort,
				SetColumns, FirstItem,
				NextItem, ResetColumns, FindItems, FindNext
					etc.
- Added benchmarking of the various approaches to
					filtering and retrieving mail. Test benchmark results with 806 items
					in the Inbox:
				
					- Fetch all 806 items using SetColumns in the
						msOutlook.GetFilteredMail example method to
						optimize the record retrieval:
 
 1.74 seconds
 
- With Restrict to limit mail being fetched
						to the desired range using the msOutlook.GetFilteredMail
						example method:
 
 0.04 seconds
 
- Using FindItems and
					FindNext
						to filter and fetch mail items (See the msOutlook.FindMail
						example method):
 
 0.05 seconds
 
- Using the old GetMailItemsQ method to fetch
						all items:
 
 9.55 seconds
 
 
 
- Fixed: The Restrict
			method now correctly restricts the Items collection for the current
			folder to the specified range.
- Added: UnRestrict
			method to remove the filter on the collection for the current folder set
			by calling Restrict.
- Added: SetSort method
			sets the sort order for a collection in Outlook (For example sets the
			order that Mail items are retrieved in based on a field such as Received
			Date).
- Fixed: NextItem method now correctly returns the
			child in all cases
- Added: Force parameter to the
		GetItems method. By default this now returns the current Items
			collect on exists or retrieves the collection if it does not (and
			fetches the default Folder collections if required). The Force parameter
			allows the Items collect to always be retrieved, and one exists the
			current one is released first.
- Changed: The FindNextItem method is now
			named FindNext.
Work in Process
	
		- Added: New AddPageBreak method to the msExcel class in the Generics
			example. Demonstrates:
			
				- Using the Worksheets, ActiveSheet and Range object
- Passing an Object as a parameter to a Office method (this is a
					Work In Progress)
 
- Deprecated: oiBase.ToVariant method.
Version 3.63 Beta - 11 May 2011
	General
		
			- Added: GetType and GetTypeName methods to retrieve the type of a
				Property and the description of that type.
- Fixed: Bug in the handling of Boolean values when converting to
				Variants in the PWVariantFactory class.
- Added: Documentation and example code for the GetType and
				GetTypeName
- Fixed: Incorrect equate for type handling
Version 3.62Beta - 09 May 2011
	General
		
			- Template update for Clarion 8 compatibility.
				Resolved unresolved externals and other errors im Clarion 8.
Version 3.61 Beta - 06 May 2011
General
	
		- Added: The Generics example now
			demonstrates populating a queue with mail using the standard
			GetMailItemsQ method as well as retrieving all individual mail
			properties using the oiObject class and displaying them on a window. The
			GetMailInfo method of the new msOutlook example class provides this
			functionality (see msOffice.clw in the Generics example folder).
- Added: Additional 
			documentation for oiObject and oiParams.
- Added: oiObject.Get() methods now
			handle multiple return types and internal conversion automatically. The
			returned variant type is read and an intelligent conversion is done on
			the passed type.
- Added: oiObject.SetBool method for
			setting a boolean value. 
- Added: oiObject.SetConst method for setting a value
			that should be set to one of a set of specified constants (this is the
			equivilent to calling Set() and passing it a Short,
			however it also allows equates and constant values to be passed.
- Added: oiParams.AddBool method to
			allow boolean values to be added to parameters being passed to a method
			with more clarity (rather than calling AddInt with the
			isBoolean set to True).
- Added: The AddString method now supports passing
			Constants (equates) and Shorts using the oiParam:Const and oiParam:Short
			values for the pType parameter
- Added: oiObject.Get(*short) and
			oiObject.GetProp(*short) methods.
- Added: oiObject.Set(*short) method.
- Added: Additional oiObject documentation, fixed
			missing anchors, documented new methods.
- Added: new msWord, msExcel
			and msOutlook classes, demonstrated in the Generic
			example (see the msOffice.inc and
		
			msOffice.clw files in the Generics example folder). These classes demonstrate extending the functionality built in
			classes using oiObject. All the demonstration functionality that uses
			the oiObject class is now demonstrated in these classes, which can be
			reused and extended in your own applications.
- Added: Each of msWord,
		msExcel and msOutlook example classes are
			extensively documented in themsOffice.inc and
			msOffice.clw files. The description for
			each method, along with each parameter, the return types and any
			additional comments are in the CLW file above each method.
- Added: msWord class methods:
		
			- GetObjects Procedure (), bool, virtual
- MergeFiles Procedure (FILE:queue
				filesQ), bool, virtual
- InsertFile Procedure (string
				fileName), bool, virtual
- PasteAndFormat Procedure (long
				formatType = oiw:FormatOriginalFormatting), bool, virtual
- NewDoc Procedure (<string
				template>, long newTemplate = oi:False, long
				documentType=oiw:NewBlankDocument, long visible=oi:True), bool, virtual
- GetCellValues Procedure
				(*WordTableCells cells, long tableNum = 1), bool, virtual
 
- Added: msExcel class methods:
- GetPageSetup Procedure (), bool,
			virtual
- AddNamedRange Procedure (string
			rangeName, string rangeValue), bool, virtual
- Added: msOutlook class methods:
- GetMailItem Procedure (string
			itemID), bool, virtual
- MoveMessage Procedure (string
			itemID, <string folderName>), bool, virtual
- NewMail Procedure (<string
			subject>, <string mailTo>, <string body>), bool, virtual
- SaveMailAs Procedure (string
			fileName, long mailFormat=oio:olMSG, bool openSavedFile=false), bool,
			virtual
- SetFileName Procedure (long
			mailFormat=oio:olMSG), string, virtual
- SendReceiveAll Procedure (), bool,
			virtual
- GetAttendees Procedure (<string
			itemID>), string, virtual
- UpdateAttendees Procedure (string
			attendeeName, <string itemID>), string, virtual
- AddAttendee Procedure (string
			attendeeName, <string itemID>, long busyStatus = oio:Busy, long
			requiredAttendee=oio:Required), string, virtual
- GetMailInfo Procedure
			(*mailInfoType mailInfo)
- SetBusy Procedure (long isBusy = oi:True), bool,
			virtual
- Added: the Conversion methods are now available for all of the
		Office application objectL
		
			- PicasToPoints procedure (long pPicas), long,
				name('PICASTOPOINTS@F15OIOFFICE')
- PixelsToPoints procedure (long pPixels), real,
				name('PIXELSTOPOINTS@F15OIOFFICE')
- PointsToCentimeters procedure (long pPoints), real,
				name('POINTSTOCENTIMETERS@F15OIOFFICE')
- PointsToInches procedure (long pPoints), real,
				name('POINTSTOINCHES@F15OIOFFICE')
- PointsToLines procedure (long pPoints), real,
				name('POINTSTOLINES@F16OIWORD')
- PointsToMillimeters procedure (long pPoints), real,
				name('POINTSTOMILLIMETERS@F15OIOFFICE')
- PointsToPicas procedure (long pPoints), real,
				name('POINTSTOPICAS@F15OIOFFICE')
- PointsToPixels procedure (long pPoints), long,
				name('POINTSTOPIXELS@F15OIOFFICE')
- LinesToPoints procedure (long pLines), long,
				name('LINESTOPOINTS@F15OIOFFICE')
- InchesToPoints procedure (real pInches), real,
				name('INCHESTOPOINTS@F15OIOFFICE')
- CentimetersToPoints procedure (real pCentimeters), real,
				name('CENTIMETERSTOPOINTS@F15OIOFFICE')
- MillimetersToPoints procedure (real pMillimeters), real,
				name('MILLIMETERSTOPOINTS@F15OIOFFICE')
 
- Added: New functionality to the Generics Example
		(highly recommended):
		
			- All the oiObject functionality which this example is based on
				has been moved into three classes - msWord, 
				msExcel and msOutlook. These are in the
				msOffice.clw and msOffice.inc
				files in the example folder. These classes provide all the normal
				functionality provided by the OfficeInside classes and expand on
				them. They serve as an excellent basis for building your own classes
				to expand the built in functionality as needed. The functionality
				and parameters of each method are documented above each method in
				the CLW file.
- ConvertUnits procedure - a generic
				procedure to convert between millimeters, points and centimeters.
				Handles all input and output units.
- Extensive Page Setup example code and
				interface. Demonstrates using the PageSetup object
				and creating a user interface for the properties. Also demonstrates
				retrieving the PageSetup values from Excel.
 
- Changed: Improved the accuracy of all unit
			conversion methods to ensure that rounding issues wouldn't cause values
			to degrade when switching a values between units a large number of
			times.
- Note: For a full reference on all objects available
			in the Office Object Model see the MSDN developer reference:
			- Excel:
			http://msdn.microsoft.com/en-us/library/bb149081%28office.12%29.aspx
- Outlook:
			http://msdn.microsoft.com/en-us/library/bb208225%28office.12%29.aspx
- Powerpoint:
			http://msdn.microsoft.com/en-us/library/bb265987%28office.12%29.aspx
- Word:
			http://msdn.microsoft.com/en-us/library/bb244515%28office.12%29.aspx
Version 3.60Beta - 4 April 2011
Word
	
		- Fixed: CloseDoc/NewDoc were not releasing all
			documented interfaces for the previous document, which could result in
			method calls failing on the new document.The interfaces were correctly
			released at object construction, so this only affected the creation of
			multiple consecutive documents.
- Fixed: Spell checking not correctly ignoring HTML
			escape codes where an escape code was used without any characters other
			than white space between a pair of tags.
Version 3.59 Beta (1 April 2011)
	General
		
			- Updated: The SpellCheck HTML example application which demonstrates spell
				checking HTML using OfficeInside and the FileExplorer HTML Editor:
			- Requires FileExplorer 5.31 or later
- Removed old code.
- Initial HTML populated into the control to demonstrate the use
				of the EditorReady method as well as populating the control for
				formatted HTML with a number of spelling errors for spell checking.
- Updated the Editor Files being used by the example
 
Word
	
		- Fixed: The SpellCheckHtml example clipping spaces
			when a section of HTML between two tags ended in one or more spaces. The
			number of spaces is now retained regardless of any other changes that
			occur during spell checking.
- Fixed: HTML escape codes such as ' ' were not
			always being correctly handled when spell checking HTML.
Version 3.58 Beta (30 March 2011)
	General
	
		- Added: SpellCheck HTML (FileExplorer) example
			application demonstrates using the OfficeInside spell checking to spell
			check HTML (uses FileExplorer to provide an HTML editor).
		- Updated: The SpellCheckHtml method
			now handles basic HTML escape codes.
	oiObject and oiParam - Generic Object
	
		- Fixed: The oiObject pointer for the current object
			and parent object were not being set to Null in the constructor, which
			could result in incorrect behaviour if they were assumed to be null when
			the object was created using New().
- Added: Expanded the Outlook functionality
			demonstrated by the Generics example:
- Added: Generics example expanded Mail and Appointment
			functionality:
			
			- Mail creation
- Sending and receiving (synchronization)
- Moving mail between folders
- Retrieving a specific folder
- Retrieving a Message object
- Saving items as all formats supported by Outlook (Text, Word,
				MSG, Unicode MSG, vCard, vCal, iCal etc.)
- Retrieving appointment objects and getting and setting their
				properties and calling methods
 
- Added: oiObject.MoveTo
			method moves one object into another, and clears all of the source
			object properties.
		Outlook
	
		- Added: oiOutlook.FindChildFolder
			locates a specific folder by name by recursing through all sub folders
			for a parent.
- Fixed: The oiOutlook.WithFolder
			was not checking whether the currently select folder pointer was valid
			correctly. This method is demonstrated in the Generics
			example.
- Fixed: The oiOutlook.WithFolder method was not retrieving the folder selected as the parent
			interface was not being used correctly.
- Changed: The oiOutlook.WithFolder method now recurses through all folders in order to locate a
			folder by name. This allows it to fetch any sub folder based on the
			folder name.
- Fixed: The oiOutlook.MoveItem(string
			folderName) method was not always retrieving the specified folder
			correctly. This method is demonstrated in the Generics
			example.
- Added: Both
			MoveItem methods now allow the Item to be passed. If it is
			omitted, then the currently item (oiOutlook.pItem) is used.
- Change: The FindItems method has been renamed to
			FindItem, as it
			retrieves a specific item. Use the FindNextItem method to
			fetch the next matching item.
- New: Generic Access to
			Outlook Items section in the documentation covering the
			properties used and the following methods:
 
			| CountItems | Returns the number of items in the current Items
		  collection |  | DeleteAllItems | Clears the current Items collection |  | FindChildFolder | Retrieves the child folder from a parent Folder that
		  matches the specified name. This performs a recursive search using the
		  specified parent as the root. |  | FindItem | Finds an item in the current Items collection (folder)
		  based on a search string. The FindNextItem method can be used to find
		  the next matching item. |  | FindNextItem | Finds the next Item matching the search term use with
		  the FindItem call |  | GetDefaultFolder | Retreives the default Inbox folder as well as the root
		  folder (Data Store) which contains the Inbox and all other folders for
		  that store. |  | GetItems | Retrieves the Items interface which represents items
		  in a folder |  | GetItem | Retrieves a specific item |  | GetItemByID | Retrieve an item from any folder based on the unique
		  Outlook ID |  | GetItemByValue | Retrieves an item from the current Items (folder)
		  based on the value of the default field for that item (the default
		  field varies depending on the item type) |  | GetNameSpace | Retreives the Outlook Namespace. This is the "root"
		  for all the rest of the data sets stored by Outlook. |  | LastItem | Retrieve the last item from the current Items
		  collection |  | MoveItem | Moves an items from one folder to another in Outlook |  | MoveItems | Moves all items in the current Items collection to the
		  specified folder. Allows optional filtering of the items based on a
		  filter expression. |  | NextItem | Retrieve the next item from the currently selected
		  folder (Items collection) |  | PreviousItem | Retrieve the previous item from the currently selected
		  folder (Items collection) |  | RemoveItem | Removes the item from the Items
		  collection (this does not delete the actual Item from Outlook). This
		  is the equivilent of filtering out unwanted records from a record set. |  | Restrict | Set a record filter for the result set of items being
		  returned by Outlook. This allows specific items to be retrieved based
		  on any of the fields in Outlook. |  | ResetColumns | Resets Outlook to fetch all columns (fields) |  | SetColumns | Restrict the columns (fields) being retrieved by
		  Outlook for items. This can improve performance by only retreiving
		  data required, rather than retrieving all fields that Outlook stores
		  for each item. This is effectively a View on a database. |  | SortItems | Sort the items in an Items collection in either
		  acending or decending order using the Outlook field specified. |  | WithFolder | Selects a specific folder by name |  
 
- Updated: All documentation example code moved from
			static syntax highlighting to dynamic JavaScript/CSS syntax
			highlighting.
Version 3.57 Beta (15 March 2011)
	oiObject and oiParam - Generic Objects
	
		- New: Expanded the Generics example to add Word functionality and
			demonstrate a variety of the objects available.
oiExcel
		- Fixed: The Excel report output missing columns when
			processing reports with controls which would overlap columns created for
			previously processed controls on the page. 
	Version 3.56 Beta (02 March 2011) 
 
	
	oiObject and oiParam - Generic Objects
	
		- Added: oiParam.AddNull() method. Adds a "null"
			parameter to the list. This allows optional parameters to be omitted.
- Updated the Generics example with new examples of Outlook, Word and
			Excel functionality. 
Outlook
		- Added: GetItemById() method. Retrieves an oiObject
			for an item using the passed EntryID.
- Added: GetItemByName() method. Retrieve and
			oiObject of an Outlook item based on the passed name (Outlook matches
			this against the default field on the item type to find the specified
			item).
Version 3.55 Beta (24 February 2011)
	General
	
		- Added .attachExisting property. If this is
			set before the call to the Init method then the object tries to attach
			to the existing instances of Word, Excel or Powerpoint if there is one,
			rather than creating a new instances. When the object closes down it
			does not close the application by default (the application can be
			explicitly closed by setting the attachExisting property to False before
			calling the Kill method).
- Added a Log method to the oiCore class (available in all classes
			throughout Office). This sends the passed string to the system debug
			output.
- Added a errorMessage and 
			errorFunction property to the based classes. Any call to
			ErrorTrap() will populate these two strings, which can then be used to
			display error messages etc. The errorMessage
			property stores the error message, and errorFunction
			stores the name of the method that it occured in.
	oiObject and generic objects
	
		- New: oiParams class that allows any number of parameters to be
			passed to any Office object. See the Generics
			example. New methods:
		
			- Construct Procedure ()
- Destruct Procedure ()
- Free Procedure ()
- Count Procedure ()
- Fetch Procedure (long pos)
- AddString Procedure (string sVal, long pType = 0)
- AddBString Procedure (string bs)
- AddInt Procedure (long pVal, bool isBool=false)
- Insert Procedure (*long pVal, bool
			isBool=false)
- Insert Procedure (*ulong pVal)
- Insert Procedure (*string pVal)
- Insert Procedure (*cstring pVal)
- Insert Procedure (*short pVal)
- Insert Procedure (*ushort pVal)
- Insert Procedure (*byte pVal, bool fUnsigned =
			false)
- Insert Procedure (*real pVal),
- Insert Procedure (*sreal pVal)
- Insert Procedure (*decimal pVal)
- Insert Procedure (*long pDate, *long pTime)
- Insert Procedure (*oiVariant pVal)
- Insert Procedure (*oiObject pObj)
- _AddVariant Procedure (long pVar)
 
 
- New: oiObject.CallEx Procedure calls any member of
			the Office object with the parameters stored in the 
			oiObject.params member.
- New oiObject.Call procedure. Functionally the same
			as CallEx(), except that it takes a oiParams object rather than using
			the oiObject.params member.
- New: oiObject.GetProp Procedure (string
			propertyName, *oiVariant pValue)
- New: oiVariant type that allows any Office
			type to be represented in Clarion applications
- Updated the Generics example to demonstrate the use of the new
			methods and classes. Note: This example has been moved to Clarion 6, as
			C55 does not support embedding Vista/Windows 7 manifests natively, which
			is required to interface with Outlook 2010. Not including a valid
			Vista/Windwos 7 manifest will cause the Outlook 2010 security dialog to
			not be displayed correctly (note: by default this dialog is only
			displayed when there is no up to date anti-virus installed, so this
			behaviour won't occur on many systems).
- New: oiObject.SetString Procedure (string
			propertyName, string pValue)
- New: oiObject.SetInt Procedure (string
			propertyName, long pValue)
- New Functionality in the Generics example application:
		
			- Creating a new mail message and setting the values for
				properties such as the Subject, Body and To fields.
- Saving a mail message to disk in a variety of formats such as
				text, HTML, MSG, Word Doc etc. (this demonstrates the new oiParams
				class which allows any number of parameters to be passed when
				accessing methods and properties of the Office objects).
- Send and Receive All (Synchronise). Demonstrates getting a
				collection (of Synch objects), looping through the collection and
				getting each object within it, and calling a method of that object.
- Listing, retrieving and modifying Appointments items (this code
				existed in previous versions of the example, but has been improved).
- New oiWord example, demonstrates basic functionality - custom
				Pasting setting the formatting options
 
oiExcel
		- New: Find method
			allows the document to be searched and returns the address of the cell
			that the data is found at.
- New: GetRangeAddress method returns the address
			that an Range object starts at.
Version 3.54 Beta (13 December 2010)
	General
	
		- This version is compatible with Clarion 7.3
- Updated documentation for oiOutlook with new examples of using the
			generic objects to perform tasks like performing a Send/Receive
			programatically etc.
	Word
	
		- Fixed: The PrintOut example was calling the Init method for Excel
			and Word twice, which was preventing it from opening documents
			correctly.
	oiExcelImpEx
	
		- Fixed: The CLW file was not being included in the project by the
			template, resulting in unresolved external errors.
- Fixed: The SetMap method was not correctly setting all queue entries
			based on the passed queue.
- New ValidateRecord example code in the documentation
- Added ValidateRecord example code to the ImportExport example
			application
- Added example data to the ImportExport example
Version 3.52 Beta (12 August 2010)
	General
	
		- Updated documentation for oiOutlook with new examples of using the
			generic objects to perform tasks like performing a Send/Receive
			programatically etc.
- Fixed: The PageSetup method was failing as the properties were set
			for the wrong interface.
Version 3.51 Beta (12 August 2010)
	General
	
		- Updated documentation for oiExcel to include additional examples
- Expanded the oiExcel How To section with new code examples
- Expanded the color handling sections and added links to all relevant
			methods, properties and other documentation to each of the section.
- Added new color handling sample code.
- Marked old export functions as deprecated and added notes linking to
			the new oiExcel class.
- Fixed typographic errors
- Expanded documentation for a number of methods in the oiExcel class,
			added code samples and reformatted the documentation in the new style
			(including parameters, return value, remarks, examples and references).
Version 3.50 Beta (12 August 2010)
	General
	
		- Clarion 7.2 compatibility updates.
	oiObject
	
		- The oiObject documentation
			is now available and documentats the entire class.
- Added a HowTo
			section to the oiObject documentation.
- The following methods are now available:
- Init procedure (string pName,
			*oiObject iParent, <long itemNumber>)
- Kill Procedure ()
- GetChild procedure (string cName,
			*oiObject child, <*long itemNumber>)
- GetChild procedure (string cName,
			*oiObject child, *string identifier)
- GetParent procedure (*oiObject
			iParent)
- AsVariant procedure ()
- Get procedure (string
			propertyName, *long pValue)
- Get procedure (string
			propertyName, *string pValue)
- Get procedure (string
			propertyName, *long dateValue, *long timeValue)
- Note: Under Clarion 5.5,
			the "Get" methods are named "GetProp".
- Set procedure (string
			propertyName, *real pValue)
- Set procedure (string
			propertyName, *string pValue)
- Set procedure (string
			propertyName, *long pValue)
- Set procedure (string propertyName
			dateValue timeValue)
- Set procedure (string propertyName
			pValue)
- Set procedure (string
			propertyName, *oiObject pObj)
- Call procedure (string methodName)
- Call procedure (string methodName,
			*long pValue)
- Call procedure (string methodName,
			*string pValue)
- Call procedure (string methodName,
			*oiObject pObj)
	oiExcelImpEx
	
		- New oiIExcelmpEx documentation. 
- Added a How To and
			Examples section, including code for the most frequently
			used functionality in the class, and the various scenarios that it is
			used in.
- Note: The Colum/Field mapping support has not been fully tested in
			this release. It will be tested and new set of examples and templates
			will be provided with the next release.
- New methods that are now available:
			- Construct Procedure ()
- Destruct Procedure ()
- Init Procedure ()
- InitExcel Procedure ()
- Kill Procedure ()
- Open Procedure (string p_FileName)
- NewWorkbook Procedure (string p_FileName)
- SaveFile Procedure ()
- OpenFile Procedure ()
- CloseFile Procedure ()
- With Procedure (*File f)
- With Procedure (*Queue q)
- With Procedure (*Group g)
- With Procedure (*View v)
- Load Procedure (*File p_File, string
				p_FileName)
- Load Procedure (*Group p_Group, string
				p_FileName)
- Load Procedure (*Queue p_Queue, string
				p_FileName) 
- Load Procedure (string p_FileName) 
- SetupLoad Procedure ()
- Save Procedure (*Group p_Group, string
				p_FileName)
- Save Procedure (*File p_File, string
				p_FileName)
- Save Procedure (*Queue p_Queue, string
				p_FileName),long 
- Save Procedure (*View p_View, string
				p_FileName) 
- Save Procedure (*string p_FileName)
- SetupSave Procedure()
- SaveData Procedure()
- TakeInit Procedure ()
- TakeSetup Procedure ()
- TakeComplete Procedure ()
- ValidateRecord Procedure ()
- TakeRecord Procedure (*excelImportQType cellsQ)
- InsertRecord Procedure ()
- AssignField Procedure ()
- IgnoreField Procedure (long fieldNum)
- ClearIgnored Procedure ()
- Close Procedure ()
- CloseAndKill Procedure ()
- CreateFooter Procedure ()
- CreateHeader Procedure ()
- AddMap Procedure (long fieldPos colPos)
- SetMap Procedure (*oiColumnMap qMap)
- GetMap Procedure (*oiColumnMap qMap)
- CreateMap Procedure ()
- ClearMap Procedure ()
- FieldName Procedure (long fieldPos), string
- ColumnName Procedure(long columnNumber), string
- CountFields Procedure()
- SetHeader Procedure (string headerText, long colPos)
- HeadersFromFields Procedure (long caseType = 0,
				long keepPrefix = false)
- RunFile Procedure (string fileName)
- FreeData Procedure ()
- FreeFileData Procedure ()
- FreeQueueData Procedure ()
- FreeGroupData Procedure ()
- ProgressControl Procedure (long
				progressControl)
- ProgressSetup Procedure (long rangeLow
				rangeHigh)
- ProgressSet Procedure (long progress)
- ProgressIncrement Procedure ()
- DbgMsg Procedure (string pDbgMessage)
- ErrorTrap Procedure (string errorMessage,
			string functionName)
- IsIgnored Procedure (long pos)
 
- Internal Methods
			- _ClearReferences Procedure ()
- _ClearAutos Procedure ()
- _GetRecord Procedure ()
- _GetViewRecord Procedure (long fieldPos)
- _ClearRecord Procedure ()
- _SetHeaderText Procedure(*string hText)
 
 
- The following Properties are now available:
- dataType long -
			The data type being import or exported
- debug long -
			Enable debug output
 
 Properties used for both import and export
- colMap &oiColumnMap - Maps columns to fields
- ignored &oiIgnored - Ignored fields or columns
- killWhenDone long
- excelFile string(280) - Name of the Excel document
 
 Properties that modify the position to process from, and the
			number of records to process. These are cleared at the end of each
			load/save call.
- startRow long -
			Row to start at in the Excel document
- startCol long -
			Column to start at in the Excel document
- curRow long - The
			current row being read/written
- curCol long - The
			current column being read/written
- numRows long -
			Number of rows to process
- numCols long -
			Number of columns to process
- startField long -
			Field to start at in the data structure when importing or exporting
- numFields long -
			Number of fields to export
- curRecPos long -
			Position of the record being processed
- currentField Any
			- The current field in the data structure
- currentFieldNumber
			long - Position of the current field
- progressControl long -
			Optional handle to a progress control 
- hideProgress long
			- Used to automatically unhide a progress control during the process,
			and then hide it again when complete
- action long - If
			this is oix:Save, then a save (export) is being performed, otherwise a
			Load (import) is being performed
- lastError long -
			The last error code
- errorMessage string(1024) -
			the error message associated with the last error
- openAfterSave long -
			If set the file is opened once the save is complete
 
 Export properties
- commitFileRecords long(1024) - How many file records to process in LOAD before committing
- headers &oiHeaders - Queue of custom headers for each column
- appendToFile long
			- If this is set, then the Excel workbook is appended to
- Import properties
- freeBeforeLoad long - Clear/Empty the data structure before loading
- cellsQ &excelImportQType - Queue of cell data for the current row. Allows
			filtering and modification in the 
 
 Internal Properties
- f &File
- q &queue
- g &group
- v &View
- rec &group
- fileOpened long,
			dim(100)
- viewOpened long
- bindPushed long
- Removed uneeded global extension from the ImportExport example, and
		corrected the path to the included oiImpEx.clw file.
Excel
	
		- Documented new methods:
			- PrintSheet procedure (*oixPrintProperties
				printSettings)
- PrintWorkbook procedure (*oixPrintProperties
				printSettings)
- _PrintOut Procedure (*oixPrintProperties
				printSettings, long pType=oix:PrintWorkbook)
- SetAlerts Procedure (long alertLevel)
- GetActiveSheet Procedure (*oiObject iSheet)
 
		Outlook
	
		- Updated Case 1659 (UAC breaks interaction with Outlook):
			Ensure that your applications that will
			interact with Outlook have a valid manifest file for Vista/Windows 7.
			Without a valid manifest file, your application may require elevation in
			order to run, which will prevent Outlook 2007 and 2010 from displaying security
			prompts to the user. In the event of a security prompt requiring user
			interaction, this will prevent your application from interacting with
			Outlook, and it may appears as if your application has locked up while
			waiting for a response from Outlook. It is strongly recommended that
			elevated applications do not interact with Outlook directly. The
			Microsoft design recommendations should be followed - seperated the
			functionality that requires elevation into a seperate application, or
			seperate the components that interact with Office into applications that
			can be run without requiring priviledge elevation. 
- Updated the FAQ with the above information.
- Updated the Outlook security FAQ to cover Outlook 2003 and earlier,
			Outlook 2007 and Outlook 2010
- New methods ot provide generic access to Outlook using the oiObject
			class, as to provide improved performance and flexibility when
			retrieving multiples items (Mail, Contacts, Appointments etc.). Allows
			the columns to be restricted (improving performance), as well as query
			style (filtered) access to Outlook data, for dramatically improved
			performance and efficiency when fetching large data sets, and the
			ability to synchronise data between Outlook and Clarion.
- GetNameSpace Procedure()
- GetDefaultFolder Procedure()
- WithFolder Procedure(string
		folderName)
- GetItems Procedure()
- GetItem Procedure(long itemPos)
- GetItem Procedure(long itemPos,
		*oiObject pItem)
- NextItem Procedure()
- PreviousItem Procedure()
- FirstItem Procedure()
- LastItem Procedure()
- Restrict Procedure()
- SetColumns Procedure()
- ResetColumns Procedure()
- RemoveItem Procedure()
- DeleteItems Procedure()
- MoveItem Procedure(string
		destFolderName)
- MoveItems Procedure(string
		destFolderName)
- FindItems Procedure(string
		searchString)
- FindNextItem Procedure()
- CountItems Procedure()
- _Cleanup Procedure()
- New Properties:
- pNameSpace 
		&oiObject - Root MAPI namespace
- pRootFolder 
		&oiObject - The Folders collection that contains the default inbox
 
 Default folders for each of the item types
- pMailFolder 
		&oiObject
- pContactFolder 
		&oiObject
- pCalendarFolder 
		&oiObject
 
 Current items
- pFolder &oiObject
- pItems &oiObject
		- The current Items collection
- pItem &oiObject -
		The currently selected item
- Fixed: The Reminder flag is now correctly retrieved when reading
		appointments.
 
Version 3.41 Beta (9 June 2010)
	General
	
		- Expanded the new oiObject
			documentation to cover all the methods provided, along with
			examples detailing the use of each of the methods and properties.
- The oiObject class now supports passing objects to methods as
			parameters. See the Moving
			Mail Between Folders HowTo for an example.
- Fixed a GPF in the Kill method as a result of a pointer being
			disposed of twice.
Version 3.40 Beta (4 June 2010)
	General
	
		- Clarion 7.2 Compatibility.
- Expanded the "Generics" example and added a new section documenting
			the new oiObject class, which provides full access to the Office Object
			Model.
- Coming soon: Additional examples of using oiObject to move mail and
			other items between folders in Outlook, as well as manipulating Excel,
			Word and Powerpoint.
	Excel
	
		- New oiExcelImpEx class provides powerful and simple import and
			export functionality to and from Excel using Clarion Files, Queues,
			Views and Groups.
- Added an ImportExport example that demonstrates using the new
			oiExcelImpEx class.
- Initial oiExcelImpEx documentation
- Coming soon: new import and export templates.
	Version 3.21 Beta (7 May 2010)
	General
	
		- Resolved duplicate symbol error in C7.1 in local (lib) mode for apps
			using FileExplorer and OfficeInside. 
- Resolved a duplicate symbol error in C7.1 in local mode when using
			both the Topspeed and DB4 file drivers and Insight Graphing with
			OfficeInside and FileExplorer.
Version 3.21 Beta (3 May 2010)
	General
	
		- New "Generics" example demonstrates using the oiObject class to
			interact with Outlook.
- Expanded the oiObject support in the oiOutlook class, to allow
			objects to be retrieved and used more effectively.
- New: oiGetChild() method that allows a string to be passed
			specifying which child is retrieved.
- For example, get an Appointment Item from Outlook based on the ID,
			set and get properties from the object, and then add a Recipient (an
			attendee) to the appoinment, and set properties for that object.
 
Outlook       oiOutlook
Namespace     oiObject
Appointment   oiObject
Recipients    oiObject
Attendee      oiObject
ItemID        string(_oit:EntryIDSize)  
attendeeList  string(1024)  
AddAttendee routine
    ident = 'MAPI'
    if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
        
        if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
            Appointment.Set('BusyStatus', oio:Busy) 
            
            if Appointment.GetChild('Recipients', Recipients)
               
                if Recipients.GetChild('Add', Attendee, attendeeName)                      Message('Attendee Added.')
                    Attendee.Set('Type', oio:Required)
                else
                    Message('Failed to add an Attendee.')
                end
                
                Appointment.Call('Save')
                
                Appointment.Get('RequiredAttendees', attendeeList)
                Display(?attendeeList)
            end
        else
            Message('Could not get the requested appointment, the ID may be invalid.')
        end
    end
    Do Cleanup
-  Fixed oiObject.GetChild not returning True when successful when
			passed a string identifier for the specific child to be retrieved.
	Word
		- Fixed: The NewDoc method was not working when a
			file name was passed to the method (when a file name is passed, that
			file is used as the template for the new document).
- Fixed: OpenDoc not returning true (1) when the
			document was opened successfully.
- New documentation for the 
			SaveAs method, including a full list of all formats for
			Office 2003 and earlier, and Office 2007 and later. Also includes
			multiple examples, and a full discussion on the various options for
			ensuring compatibility across versions of Word. 
			Recommended reading!
	Excel
	
		- Fixed: SelectWorksheet not selecting the specified
			sheet.
- Changed: Initial optimisation and refactoring of the methods related
			to interaction with work sheets. 
Version 3.20 Beta (12 April 2010)
	General
	
		- Added: oiObject.Kill method. This method cleans up
			and disposes all memory allocated for an oiObject instance.
- Added: iApplication object to each of the classes.
			This generic oiObject represents the
			application and can be used to call methods and access properties of the
			application associated with the OfficeInside classes, as well as get
			child object for that application.
- The new generic oiObject class is now functional and available for
			use:
			
				- Init - creates the object, using the passed
					name:
 iSheet
				oiObject
 ExcelBook
				oiExcel
 code
 ExcelBook.Init()
 :
 iSheet.Init('ActiveSheet',
			ExcelBook.iApplication)
- GetChild - gets a child object, such as a
			MailItem from a Folder or a Sheet from a Workbook.
 ExcelBook.iApplication.GetChild('ActiveSheet',
			iSheet)
- GetParent - retrieves the parent object.
 ! Use to retrieve a parent object of the passed object.
 iSheet.GetParent(iWorkbook)
- GetProperty - gets the value a property of the
			object using the property name. For example:
 iWorkbook.GetProperty('FullName',
			workbookFileName)
- SetProperty - Sets the property of the object
			to the passed value. Example:
 iActiveSheet.SetProperty('Name',
			'Accounts Nov')
- CallMethod - call a method of the object.
			Example:
 iSelectedSheet.CallMethod('PrintPreview',
			oi:False)
 
- Using a generic oiObject:
 iSheet
		oiObject
 ExcelBook
		oiExcel
 code
 ExcelBook.Init()
 
 :
 iSheet.Init('ActiveSheet',
		ExcelBook.iApplication)
 
 iSheet.GetChild('PageSetup',
		iPageSetup)
 
 :
 centerFooter = 'My Worksheet':
 iPageSetup.Set('CenterFooter',
		centerFooter)
- Excel Editable Report Output. Resolved (Fixed) Case 870:   Blank
			rows and columns not being deleted 
- Fixed: Potential memory leak when destroying an OfficeInside object.
- Tested OfficeInside with MS Office 2010.
- Resolved EXP file export inconsistencies, particularly for C55.
- Added a officeVersion property, which
			retrieves the version of Microsoft Office when the object is
			initialised. Note: You can get the version of Office directly by calling
			the GetOfficeVersion method. This can be used before
			the object is intialised to check for a valid version of Office - if no
			version of Office is installed this method returns zero, and if the
			version returned is less than 9 (Office 2000), then the version of
			Office available is too old. The versions returned are:
			
				- 14     Office 2010
- 12     Office 2007
- 11     Office 2003
- 10     Office XP
- 9       Office 2000
 
- The GetOfficeVersion method now supports all
			version of Office up to version 20 (future releases).
- Fixed: Incorrect icons used in the example application.
- Added: The main Demo example now allows the printer to be selected
			from a list when performing a mail merge to a printer. This also
			demonstrates the use of the new oiUtil class to fetch a list of all
			printers installed on the machine, as well as using the SetPrinter method to set the printer for Word
			
				- Notes: 
 1. When using the PrintOut method the printer to
					use can be passed directly to the method, and SetPrinter
					does not need to be called.
 2. If no printer is set (for both a mail merge and when calling
					PrintOut), then the current printer (usually the
					system default) is used.
 
- Examples: Demo: Removed the empty Wizard procedure from the demo
- Examples: Demo: oiExcelImportWizard is now called from the button
			and correctly place in the procedure tree.
- Examples: Demo: The About window now demonstrates the use of the
			GetVersion method to display the version of Office
			installed. This uses the oiOffice class directly, and retrieves version
			without initialising any of the Office applications. Note: The version
			is automatically retrieved and stored in the officeVersion
			property of each object when a specific object is initialised.
- Examples: Demo: Main Word example - fixed the display of methods
			being called in the listbox (note: some methods may not display in this
			list as the internal method handling is being updated and improved, this
			will not affect functionality or Word event callbacks).
- Examples: Demo: Added Document Statistics to the "Other" menu for
			the main Word example.
- Examples: Demo: Added a "Unit Conversion" example to the "Other"
			menu for the main Word example.
- Changed: The template now checks whether %ApplicationLocalMode is
			defined, otherwise it assumed that the project is in DLL mode. 
- Resolved (implemented): Case 1052:   DLL Function to check whether
			Office applications are available. Can be done by calling th
			GetOfficeVersion provided by all the classes. If the
			method returns 0, then Office is not available.
	Word
	
		- Spell Checking: Changed: By default Word is now initialised when the
			spell checking is first called, if it has not already been initialised.
			This can speed up the procedure start significantly, and only intialises
			Word when the needed (if the spell checking functionality is not used,
			then Word is never initialised). The object is reused until the
			procedure is closed, at which point it is automatically cleaned up.
- Spell Checking: Added: Automatic initialisation and creation of the
			document and spell checking interfaces. These are now persistent for the
			lifetime of the procedure, improving performance. Cleanup is done when
			the procedure exits.
- Spell Checking: Fixed: When spell checking and RTF control the
			actual RTF code was being retrieved in certain cases (an empy RTF
			control, or a control that only contained whitespace). The text is not
			correctly retrieved.
- Note: Word 2010 appears to have an error in one of the interfaces
			that is causing spell checking to fail. This has been reported to
			Microsoft.
- Fixed: Spell checking errors and template error in C55 and C6. The
			spell checking has been updated and improved for all versions of
			Clarion.
- Resolved (fixed): Case 1660:  Spell checking GPFs on an empty RTF
			control.
- Resolved (implemented): Case 2212:  Spell Checking template - change
			to init based on the user's choice (Word is initialised when the spell
			checking code is first called, however the user can intialise it
			earlier, and the spell checking code will automatically use the
			intiailised instance).
- Resolved (fixed): Case 1661:  Spell checking doesn't handle
			compositions. Spell checking now handles string that contain
			compositions such as "isn't"; "wouldn't"; "it's"; "could've" and so on.
- This version includes major refactoring and a rewrite of a large
			portion of this class.
- Support for multiple documents. When a new document is opened or
			created it becomes the active document, and when a document is closed,
			the next available document becomes the active one. This includes
			documents opened by the user - calling oiWord.GetActiveDocument(true)
			will get the active document for use, regardless of whether OfficeInside
			created or opened the document or not.
- The Open, Save and SaveAs methods now use the new format by default
			under Office 2007 and later.
- Added: When saving a document using the default format the version
			of Word being used is detected and the correct format selected
			automatically. This can be overridden using the pFileFormat parameter.
- Added: New formats for opening and saving files.
- Added: When opening a document the native format of the document is
			used rather than forcing a specific format.
- Fixed: Incorrect message that there is not sufficient buffer size
			for replacing a word when spell checking.
- Added: Opening documents using a Password is now supported.
- Improved efficiency of the OpenDoc method.
- Added the Documents interface to the class. Will provide support for
			working with multiple documents simultaneously.
- Closed (Fixed) Case 1611:  FindText always
			returns 1, even when nothing is found 
- Rewrite of the following methods to improve performance, memory
			usage, error handling, and improve the class structure:
		    
				- _InitWordSelection()
- _InitRange() - creates the range interface
- _WrapperSelection() - handles SetSelection();
					MoveLeft() etc. Will be replaced and deprecated in future versions.
- _WrapperDocument() - handles document level
					options such as self.SetBackground(). Will be replaced and
					deprecated in future versions.
- _KillRange()
- _InitTables()
- _InitInlineShapes()
- _WrapperParagraphFormat() - will be replaced in
					future versions.
- CheckSpelling_Init()
- _WrapperStoryRanges() - will be replaced in
					future versions
- _InitInlineShapes()
- InsertPicture()
- SaveAs()
- Underline()
- _WrapperWordFont() - will be replaced in future
					versions
- _InitWordFont()
- _InitPageSetup()
- _InitSystem()
- GetFileName()
- CountCharacters()
- SetSelection()
- _WrapperTableRows()
- Undo()
- _WrapperDocument() - Complete re-write. Will be
					split into individual methods using the new interfaces, and
					deprecated, along with all other "wrapper" methods.
- Redo()
- RefreshScreen()
- _WrapperActivePane() - will be replaced in
					future versions.
- _WrapperCommandBar() - will be replaced in
					future versions.
- ShowToolbar()
- HideToolbar()
- CountOpenDocs ()
- PrintPreview() 
- PrintPreview(long) 
- CheckSpelling_Init()
- SetActivePrinter()
- CountCharacter - complete rewrite, now calls
					DocumentStatistics
 
- Rewritten and refactored to support multiple simultaneous documents,
			improve performance, reduce overhead etc.
		
			- NewDoc()
- OpenDoc()
- CloseDoc()
 
- The following methods are now obsolete and deprecated:
			- _KillApplication
- _KillSystem
 
- New Methods:
			- GetDocuments - Gets the Documents interface
- GetActiveDocument - Get the ActiveDocument
				interface
- GetRange - Get the Range interface
- GetWindow - Get the ActiveWindow interface
- GetPane - Get the ActivePane interface
- StoreDoc - Stores each new or opened document
				in the Documents queue as an oiObject
- RemoveDoc - Removes a document from the
				.Documents queue, typically when it is closed.
- ReleaseDocs - Clears the .Documents queue and
				releases all memory allocated.
- GetDialogs - Get ths Dialogs interface and the
				Dialog interface for the File->Printers dialog (used for setting the
				active printer for Word).
 
- New Methods (general use)
		
			- DeleteSelection - Delete a selection
- RefreshDocs - Refreshes the list of available
				documents and populates the .Documents queue with all the currently
				open documents.
 
- New Documents queue, stores all open documents as a queue
			of oiObjects. The documents can be switched
			between, manipulated, and otherwise fully accessed  using the
			interface provided by the new oiObject class.
- Rewrote SetPrinter, which aso fixes it returning an
			incorrect value
- Resolved (fixed): Case 1595:   GetFontNames is not working -
			returning an empty queue. Note: This functionality in broken in Office
			2010 Beta. This has been reported to Microsoft.
- Resolved (implemented): Case 1299:   DeleteSelection
			method - deleted the current select in Word.
- Resolved (implemented): Case 1588:   Page orientation and setup,
			margins etc. - implemented via both the Update and
			PrintOut methods.
- Resolved (implemented): Case 1449:   Add Documents queue that stores
			Document objects 
- Closed (duplicate): Case 1931:   Autofilter not
			properly implemented 
- Resolved (implemented): Case 2216:   Version function needs to
			support checking for Office 2010 
- Resolved (implemented): Case 1127:   SaveAs function - Save As Html
			saves a "Web archive" .mht (EML) file, needs an HTML option
Outlook
	
		- Closed (Not reproducible) Case 1659: UAC breaks interaction with
			Outlook. 
- Closed (Not reproducible) Case 1667: Appointments not all being
			fetched when UAC is turned on 
- Resolved (Implemented) Case 373: The oioFolderItemsQ does not have
			date or time fields. 
- Resolved (By Design) Case 1119: IMAP folders not included in the
			Folder list that is retrieved. This is how the Microsoft Outlook Object
			Model is designed. 
- Resolved (Implemented) 
			Case 516: Increase Property Size (Body field for items).
- Fixed: Problems calling the oiSendEmail() function, which was
			failing under newer versions of Office.
Excel
	
		- Added: OpenWorkbook now prompts the user to select a file if the
			passed file name is blank or omitted. Previously calling with a blank
			file name would simply fail. The file name can be passed, or a blank
			file name can be passed, or the parameter can be omitted entirely.
- Resolved (Implemented) Case 1248: Expose additional print properties
			for Excel. See the PrintWorkbook() and 
			PrintWorkSheet() methods.
- Deprecated: OpenWorkbook_LB method. The
			functionality is provided directly by the OpenWorkbook
			method.
- Resolved (Implemented) Case 1408: Expose the 'DisplayAlerts'
			property. See SetAlerts()
- Added: GetActiveSheet(). Creates an 
			oiObject that represents the currently active sheet.
- Added: GetPageSetup(). Creates an 
			oiObject that represents the PageSetup object. This
			contains all the Page Setup settings for the currently active worksheet.
- Resolved (Duplicate) Case 1687: Add OpenHeader and CloseHeader
			methods. These are exposed by the PageSetup property, which is being
			exposed via the GetPageSetup() method.
- Resolved (Implemented) Case 1616: Expose the Zoom property in Office
			Inside. Implemented via the PageSetup object.
- Resolved (Implemented) Case 1877: Page Layout Options. Implemented
			via the PageSetup object.
- Resolved (fixed) Case 1934: C7 compatibility for editable reports.
- Resolved (Implemented) Case 1935: Set Page Margins. Implemented via
			the PageSetup object.
- Resolved (Duplicate) Case 1938: Set page zoom. Implemented via the
			PageSetup object.
- Resolved (Fixed) Case 1985: Editable reports not working in C7 PE.
- Resolved (Duplicate): Case 1370: Expose the PageSetup object 
- Resolved (Duplicate): Case 1867: Print Setup/Settings
			propeties/methods 
- First round of refactoring and optimisation:
		
			-  _WrapperRange - will be replaced in
				future releases
- InsertRow
- WriteToCell
- SelectCells
- InsertColumn
- SetCellBackgroundColor
- GetCellBackgroundColor
- CountUsedRows - complete replacement,
				encapsulates the functionality within the method itself, and adds
				full error handling. Returns the number of rows that contain data,
				or returns -1 if an error occurs and calls the ErrorTrap() method
 
- Old Excel Import template now cleanly closes the document rather
			than try to save it (new import template coming soon)
- SaveAs method now automatically detects the version and uses the new
			Excel format by default for Office 2007 and later.
- Fixed: Example data - some example had old data shipped
- Updated: All the example applications have been updated, tested and
			improved.
- If the Excel report output fails to save, the created Excel document
			is then displayed to allow the user to save it to an alternate location.
- Fixed Editable Report output not calculating columns correctly when
			placing data.
PowerPoint
	
		- Refactored methods and interfaces for future expansion of this
		class.
Version 3.15 Beta (21 January 2010)
	General
		- Modified template, DLLs, LIBs and linking for C7 and C7.1
			compatibility.
- _ABCLinkMode_=>1 set to 0 in C7.1 and C7.0 build for the LIB
			compile.
- Ship pwutil.lib, and link at the project level
- Changed projects to release mode to work around broken Assert
			function in Clarion 7.0. Fixes errors such as: "Assertion failed on
			line: 1461 in file pwcom.clw when calling ReplaceText".
- Fixed: Assert messages in Clarion 7.0, as a result of the broken
			Assert statement in C7.0 (see above). This error only affect Clarion
			7.0, it is fixed in Clarion 7.1.
- Tested build for regression in Clarion 6 in Local and Standalone
			modes.
- Test build for regressions in Clarion 5.5 in Local and Standalone
			modes.
	Excel
	
		- New: Added a SetAlerts() method to enable or
			disable the display of alerts. Can be set to true (1) or false (0). If
			alerts are disabled, then Excel will assume the default value rather
			than prompting the user. 
	Word
	
		- Note: There is a known bug in the spell checking for RTF controls.
			When the control is empty, or only contains control characters (such as
			CR,LF pairs), the GetText method is returning the underlying RTF rather
			than the text itself. This will be resolved for the next release.
		Outlook
	
		- One report of the Address Book/Contacts not working in the demo
			application. Tested in Office 2003 and 2007 under XP, Vista and Windows
			7. Note that the security settings can interfere, particularly in Office
			2007. If the user has selected to disable all interaction with external
			applications, the functionality will not work. The default setting in
			Office 2007 is to prompt the user if the anti-virus solution is out of
			date (or not installed). The new section of the docs on
			Outlook Security covers this issue in
			detail.
- Added: Outlook Security section
			to the Outlook documentation (If you use
			Outlook, this section should be considered required reading. Ignore it
			at your own peril!).
Version 3.14 Beta (31 December 2009)
	Word
	
		- New: The PrintOut() method now supports setting the
			printer using the PrinterName parameter.
- New: SetPrinter() method. Allows the printer for
			the current Word document to be set. 
- New: SetAlerts() method allows the alert level to
			be set to oiw:AlertsNone(0), oiw:AlertsMessageBox(-2),  or
			oiw:AlertsAll(-1).
Version 3.13 Beta (30 December 2009)
	Excel
	
		- Fixed: ReadCell truncating data at 255 bytes. The full 32KiB is now
			supported.
Version 3.12 Beta (23 December 2009)
	
	General
	
		- Fixed: Clarion 7.0 and 7.1 template compatibility
- Fixed: Linker problems in Clarion 7.1
- Fixed: Editable report template options causing problems in Clarion
			7.1 PE as a result of template changes in Clarion 7.1 (Clarion
			Enterprise is unaffected).
- Fixed: Word editable report output not displaying the selection
			option at runtime when used with Fomin Report Builder.
- Added: Performance improvements for the editable report output
		- Note: Non public pre-release versions of Clarion 7.1 prior to the
			office 6545 build are NOT supported, as a result of
			linker changes and fixes in the official 7.1 release.
Version 3.11 Beta (14 December 2009)
	General
	
		- Fixed: The Word Editable report template wasn't always providing the
			option to print to Word at runtime when using with Fomin Report Builder
			reports.
Version 3.10 Beta (03 December 2009)
	General
	
		- Deprecated: The Benchmark example is deprecated and has been removed
- Fixed: The Init() method prototype was incorrect in the Two Printers
			example
- Fixed: An assert firing when compiled in C7 debug mode ("assertion
			failed on line: 382 in file pwcom.clw")
- New: ProcessToExcel example application which
			demonstrated creating an Excel workbook, inserting data from a table,
			saving, and closing the workbook Automatically using a Process
			procedure.
- New: ExportBrowse example. Demonstrates creating a
			working, dynamically exporting all fields in a queue or a file to the
			workbook, and saving and closing the workbook (as well as optionally
			displaying it to the user). The approach used for the export can be used
			to export any file or queue, regardless of the fields in the queue or
			table.
- Update documentation, and list all the examples in the Examples
			section, along with descriptions of all examples.
- New editable report output templates for Word and Excel. These
			replace the old templates and provide improved integration with
			Clarion's report templates
- Editable report output support for Legacy applications
- Editable report output support for Fomin Report Builder
- Improved editable report output support for CPCS
- Improved editable report output support for other third party
			reporting and previewing templates
- Added: Editable reports for Excel and Word are now fully support in
			Legacy application.
	Word
	
		- New: ReplaceInString() method, allows one or more
			instances of a substring to be found and replaced in a string (does not
			require Word).
- Fixed: Spell Checking now fully supports
			Clarion 7 (fixed a GPF that could occur under C7).
- Fixed: The "Spell checking complete" message being displayed on
			controls that were excluded from spell checking (although no spell
			checking was actually performed the message was still displayed).
- Fixed: The spell checking template "exclude/include" controls
			options were not functioning correctly.
- New: 
			DocumentStatistics() method with the following options:
			- oiw:StatisticCharacters: Count of characters.
- oiw:StatisticCharactersWithSpaces: Count of characters including
				spaces.
- oiw:StatisticFarEastCharacters: Count of characters for Asian
				languages.
- oiw:StatisticLines: Count of lines.
- oiw:StatisticPages: Count of pages.
- oiw:StatisticParagraphs: Count of paragraphs.
- oiw:StatisticWords: Count of words.
 
	Excel
	- Improved: Editable Report Output now supports a far
		wider variety of reports and provides intelligent positioning for even
		complex reports. The previous version still had problems with reports that
		had few "columns" near the top of the report, but had controls spread out
		horizontally. It was creating columns for these controls, which then
		offseted columns created further down, which should have been "inserted"
		before these existing columns, but were instead added after them. The code
		has been refactored to handle these cases for both rows and columns.
Outlook
	
		- Added: A new "SimpleEmail" example that
			demonstrates sending a text only email using Outlook using a minimal
			window, and only one line of actual code.
Version 3.03 Beta (9 November 2009)
	Word
	
		- New: ReplaceInString() method, allows one or more
			instances of a substring to be found and replaced in a string (does not
			require Word, or the Init method to be called).
- New methods (methods that existed have been expanded, improved and
			are now fully supported by the templates):
			
				- SpellCheckString
- SpellCheckHtml 
- SpellCheckRTF
- ReplaceInString
 
- New callback methods:
		
			- GetRtfText
- ReplaceRtfText
- SpellWord 
 
- New: Completely replaces Spell Checking. Provides improved spell
			checking for text, RTF and HTML.
- New: Replace All functionality in spell checking is now implemented
- New: Spell checking is now object based and no longer generates
			large amounts of code for each control on the window
- Improved spell checking performance and efficiency.
- New spell checking control template allows the controls and code to
			be populated onto any window
- Control template based spell checking eliminates the maintenance
			required by the previously source based TXA import and helper template.
- Spell checking no longer requires any other extensions - just the
			control template needs to be populated onto a window (or the provided
			utility template can be used to add the window to your application
			automatically).
- New spell checking is fully backward compatible. We recommend
			replacing the old spelling suggestions window with the new one.
- Note: If the old template is used a warning at compile time will be
			displayed once. This warning will not be displayed on subsequent
			compilations of the application.
- New: oiWord.PageSetup()
			method allows all page setup properties for the current document to be
			modified.
- Documentation updates and improvements
Version 3.01 Beta (13 October 2009)
	General
	
		- Fixed: Missing files from the installer
- Fixed: Missing Example data in the installer
- Fixed: Compile errors in C7
	General
	
		- Added: oiApiBase class provides a base class that
			encapsulates basic API functionality, debugging and error logging
- Added: oiUtil class for general functionality
			outside of the Office classes, for example listing all printers on the
			system and populating them into a queue. Useful with the new 
			PrintOut methods that allows fully automated printing to any
			printer with no user interaction
- Added: oiUtil.EnumPrinters method populates a queue
			with a list of all printers installed on the system. See the new
			PrintOut example application.
- Added a new oiObject class. This represents any
			Office object, such as a mail item, workbook, worksheet, chart, mail
			folder, address book entry etc. This provides generic access to the
			methods and properties of Office objects, including those not exposed
			through the other OfficeInside classes.
 Some of the new methods provided by this class include:
				- GetProperty - gets the value a property of the
					object using the property name. For example:
 iWorkbook.GetProperty('FullName',
					workbookFileName)
- SetProperty - Sets the property of the object
					to the passed value. Example:
 iActiveSheet.SetProperty('Name',
					'Accounts Nov')
- CallMethod - call a method of the object.
					Example:
 iSelectedSheet.CallMethod('PrintPreview',
					oi:False)
- Init - creates the object, using the passed
					name:
 iSheet.Init('ActiveSheet',
					ExcelBook.iApplication)  iSheet.GetChild('PageSetup',
					iPageSetup)
 centerFooter = 'My Worksheet'
 iPageSetup.SetProperty('CenterFooter',
					centerFooter)
- GetChild - gets a child object, such as a
					MailItem from a Folder or a Sheet from a Workbook.
- GetParent - retrieves the parent object.
 
- Added: A new PrintOut example application that
			demonstrates using the new printing options for both Word and Excel.
- Entirely new Report Output engine.
			
				- The new Editable Report output engine for Excel extends the
					output abilities and now creates well formatted Excel spreadsheet
					without requiring specific alignment and sizing of controls. 
- Intelligent column and row checking allows controls to be
					automatically assigned to the correct column and row without
					specific alignment requirement
- Improved report processing speed (additional performance
					improvements are coming in future releases).
 
	Word
	
		- Fixed/Improved: All the unit conversion methods (PicasToPoints,
			PixelsToPoints, PointsToCentimeters
			etc.) now take the correct parameter types, and return using appropriate
			types rather than passing and returning strings.
- Improved: All unit conversion methods are now optimized and no
			longer use a wrapper method.
- Added: Completed PointsToPixels and 
			PixelsToPoints methods.
- Fixed: The PrintOut method is now fully functional
			and allows completely automated printing without any user interaction.
			See the PrintOut example application, which also demonstrates the use of
			the new 
- Added: Event handling functions (Note that
			these are not tested or supported in this release).
			
				- oiWord.EventStartup( )
- oiWord.EventQuit( )
- oiWord.EventDocumentChange( )
- oiWord.EventDocumentOpen( )
- oiWord.EventDocumentBeforeClose( )
- oiWord.EventDocumentBeforePrint( )
- oiWord.EventDocumentBeforeSave( )
- oiWord.EventNewDocument( )
- oiWord.EventWindowActivate( )
- oiWord.EventWindowDeactivate( )
- oiWord.EventWindowSelectionChange( )
- oiWord.EventWindowBeforeRightClick( )
- oiWord.EventWindowBeforeDoubleClick( )
- oiWord.EventEPostagePropertyDialog( )
- oiWord.EventEPostageInsert( )
- oiWord.EventMailMergeAfterMerge( )
- oiWord.EventMailMergeAfterRecordMerge( )
- oiWord.EventMailMergeBeforeMerge( )
- oiWord.EventMailMergeBeforeRecordMerge( )
- oiWord.EventMailMergeDataSourceLoad( )
- oiWord.EventMailMergeDataSourceValidate( )
- oiWord.EventMailMergeWizardSendToCustom( )
- oiWord.EventMailMergeWizardStateChange( )
- oiWord.EventWindowSize( )
- oiWord. EventXMLSelectionChange( )
- oiWord.EventXMLValidation( )
- oiWord.ErrorEventDocumentSync( )
- oiWord. EventEPostageInsertEx( )
- oiWord.EventMailMergeDataSourceValidate2( )
- oiWord.EventUnknown( )
 
	Excel
	- Added PrintSheet method to print the current sheet and
		allow the page range and number of copies to be specified.
- Added PrintWorkbook method to print the current
		workbook and allow the page range and number of copies to be specified.
- Added _PrintOut method that handles sheet and workbooks
		printing (typically not called directly)
- Added GetActiveWorkbook method to retrieve and oiObject
		that represents the currently active Workbook object. This may not be the
		workbook that relates the the oiExcel object, it is whichever workbook is
		currently active in Excel. This allows the Workbook to be interacted with
		using the generic access methods provided.
- Added GetCurrentSheet method
- Added GetActiveSheet method
- Added SetActivePrinter  method
		(not currently supported)
- Added GetActivePrinter method
- Added GetWorksheets method
Version 2.77 (20 July 2009)
	General
	
		- Fixed: Fixed incorrect release dates and version number in the
			History doc.
- Fixed: Error in the C7 LIB that caused FM3 to not upgrade files.
	Excel
	
		- Fixed: CloseWorkbook method returning 0 incorrectly when no
			parameter was passed to specify the behaviour (the workbook was
			correctly closed, but the return value was incorrect).
- Fixed: RenameWorksheet()
Version 2.76 (14 July 2009)
	General
	
		- Fixed: Fixed incorrect release date for 2.74 in the History
			document.
- Fixed: Compatibility problems with OfficeInside and editable reports
			between various versions of Clarion
- Fixed: Long standing issue with the editable report classes and a
			potential conflict with FM3, which prevented files from upgrading in
			some cases.
- Changed: The Editable Report classes now ship as source code and are
			added at the project level. The underlying classes are contained in
			_oiABPROI.clw and oiABPROI.inc and the ReportGenerator interface is
			defined in oiABPROI.clw.
	Word
	
		- Fixed: Fixed the SpaceBefore and SpaceAfter options of the
			SetParagraphFormatting not working correctly.
Version 2.74 (06 July 2009)
	General
	
		- Fixed: OfficeInside is now compatible with Clarion 7 is both Local
			and Standalone modes.
	Excel
	
		- Fixed: The oiExcel.ExcelImport() method  was not correctly
			retrieving the filename from the user when no filename is passed. The
			method can be called with a blank file name, in order to prompt the user
			for the file to import:
 ExcelDoc.ExcelImport ('',
			?Progress, numColumns, startRow)
- Added: Equates for passing to 
			oiExcel.CloseWorkbook( ) to determine the save behaviour:
 oix:Default  
			equate(1)
 oix:DontSave equate(2)
 oix:Save     equate(3)
- Fixed: The oiExcel.ExcelImport() method was prompting to save the
			document before closing.
- Fixed: The oiExcel.ExcelImport() method stopping before importing
			all rows if the startRow parameter was passed.
Version 2.74 (19 June 2009)
Outlook
	
		- Fixed: The Contact HomeAddressStreet property was not being
			updated when the UpdateContact method was called to update the entire
			contact from a group (updating the individual property worked correctly,
			as did retrieving the value from the Outlook contact). 
Version 2.73 (15 June 2009)
	General
	
		- Fixed a compile error when using the Editable Report templates in
			current build of C7 (5675). The SoftVelocity ReportGenerator interface
			changed in this release (ProcessText reverted to the C6 protoype). This
			resolves the "No matching prototype available" error in oiABPROI.clw on
			compilation.
Version 2.72 (11 June 2009)
	General
	
		- Documentation improvements, new navigation and menu system etc.
- Changed: The oiBase.NewObject() method now requires the passed pItem
			to have been allocated before calling it (previously it allowed a null
			pointer to be passed, which would result in errors).
- Fixed: Memory leak in the oiExcel object because of handles to
			interfaces not being freed.
- Fixed a problem with methods ignoring calls because of an incorrect
			flag being set on intialisation (prevented Mail Merge from working in
			2.71).
	Excel
	
		- Added: New oiExcel.Replace procedure to provide additional find and
			replace parameters (string pFind, string pReplace lookAt=0
			searchOrder=1 lookAt=2 matchCase=0 matchByte=0). 
- Fixed: ReplaceText (): Changed internal calling to not pass the last two
			parameters (searchFormat and replaceFormat), neither of which was used.
			Also corrected one of the parameters being passed incorrectly.
- Changed: ReplaceText(): now returns True for success and False for
			failure. 
- Changed: ReplaceText(): The replacement string may be an empty string, it is
			perfectly legal to replace a string with nothing (removing it)
- Added: New internal method GetCells() returns the Cells range object.
- Added: In Progress. Please do NOT use this method in this release. New Find() method for returning the position of a specific
			string of text. Supports searching in either direction, case sensitive
			or insensitive searches, searching for exact matches or the search
			phrase within the string etc. Returns the cell that the match was found
			at.
- Added: oiExcel.DisplayAlerts() method allows the
			display of messages from Excel to be enabled or disabled
- Added: oiExcel.EnableEvents() procedure (currently
			this is internal)
- Added: oiBase.ToCstring(*string s) method. Copies
			the contents passed string to a new cstring and returns a pointer to the
			new cstring.
- Added: oiExcel.RunAutoMacros() method that allows
			the auto macros built into a file to be run (Auto_Activate, Auto_Close,
			Auto_Deactivate, and Auto_Open macros)
- Added: oiExcel.GetWorkbooks().
- Added: oiExcel.GetActiveWindow().
- Deprecated: CountWorkbooks_LB()
- Deprecated: NewWorkbook_LB()
Version 2.71 (10 April 2009)
	General
	
		- C7 support update for Multi-Proj.
- C7 support - template includes the oiABPROI.INC, Fomin support,
		Report target selector, WOWordReporterDeclaration, legacy class
		generation when necessary.
- C7 support - uses the additional parameter in the implemented IReportGenerator.ProcessString
		class in C7.
		Outlook
	
		- Outlook (UpdateContact) - Updated to support all of the properties,
			optimised the update code and added a new GetContactPropertyName method
			to return the name when passed the long value for a field.
Version 2.69 (11 September 2008)
	General
	
		- Clarion 7 compatible release.
- Updated documentation and reformatted the oiExcel class documentation
			for improved clarity and consistency.
	Word
	
		- Added/Fixed: The FindText() method now returns 1 when the text that
			was search for is found, and zero if it is not found, which is the
			documented behaviour. The method now checks the Found property of the
			Find member of the Selection object to determine whether the search was
			actually successful. Previously the FindText() method was actually
			returning whether or not execution was successful, and the return value
			was not related to the result of the Find.
- Fixed: The MailMergeSetDataSource was always returning 0, even when
			successful. It now returns 1 for success and 0 for failure.
	Excel
	
		- Added: 
			GetCellBackgroundColor() method returns the background color of a
			cell or range of cells. Can be called as:
 curColor = oiExcel.GetCellbackgroundColor('',
			'')
 curColor = oiExcel.GetCellbackgroundColor('A1',
			'')
 curColor = oiExcel.GetCellbackgroundColor('D1',
			'E7')
Version 2.68 (16 July 2008)
	Excel
	
	General
	
		- Documentation updates.
- Website pages were not correctly reflecting the version.
Version 2.67 (02 July 2008)
	Word
	
		- Changed: Removed the temporary InitSite method.
	General
	
		- Fixed: Incorrect style sheet in some of the documentation files.
- Added: The Microsoft Office Compatibility pack is now supported.
			Unfortunately the compatibility pack causes the incorrect version of
			Office to be reported, which was causing OfficeInside to specify the the
			Office 2007 format for spreadsheets, which the compatibility pack would
			be create, and convert as if it was an older binary Excel document,
			causing the document o become corrupt. This has been resolved in this
			release.
- Added: Error handling and logging to the email sending for Outlook.
- Important: 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 setting does not appear to function correctly when most setups.
					Presumably it is meant to allow the antivirus software to determine
					whether access is allowed or not. Instead in every configuration
					tested it simply blocks all access, which means that sending mail
					will fail because the Recipient object cannot be retrieved. Outlook
					provides no indication of the failure, or the reason for it.
- "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 (because the first dialog is actually a
					security flaw). 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.
- Unfortunately all three of the settings are essentially useless
					- either they are overly onerous for the user, or they provide no
					protection against malicious software (even the option to always
					warn of suspicious activity can be overridden by malicious
					software). One solution to this is to install the free Advanced
					Security for Outlook from MAPILabs
					(http://www.mapilab.com/outlook/security/). This allows the user to
					choose whether an application is trusted when it tries to access
					Outlook. This approach only requires the user to allow (or deny) an
					application access once, which provides good protection, without any
					burden on the end user. 
 
Version 2.66 (11 June 2008)
	Word
	
		- Added: Additional errortrapping and error handling code for document
			and object creation.
- Changed: Changed the way that the Tables object was retrieved to
			improve reliability when processing multiple documents in a row.
	General
	
		- Fixed: The Clarion 5.5 DLL that shipped with the 2.65 release was
			the 2.64 version.
Version 2.65 (4 June 2008)
	Word
	
		- Added: [Beta] New PrintOut method that exposes all the print
			settings available in Word. This uses the new
		
			- Background (optional). True to have the macro continue
				while Microsoft Word prints the document.
- pAppend (optional). True to append the specified
				document to the file name specified by the OutputFileName argument.
				False to overwrite the contents of OutputFileName.
- pRange (optional). The page range. Can be one of the
				following WdPrintOutRange constants: wdPrintAllDocument,
				wdPrintCurrentPage, wdPrintFromTo, wdPrintRangeOfPages, or
				wdPrintSelection.
- OutputFileName (optional). If PrintToFile is True, this
				argument specifies the path and file name of the output file.
- pFrom (optional). The starting page number when Range
				is set to wdPrintFromTo.
- pTo (optional). The ending page number when Range is
				set to wdPrintFromTo.
- Item (optional). The item to be printed. Can be one of
				the following WdPrintOutItem constants: wdPrintAutoTextEntries,
				wdPrintComments, wdPrintDocumentContent, wdPrintKeyAssignments,
				wdPrintProperties, or wdPrintStyles.
- Copies (optional). The number of copies to be printed.
- Pages (optional). The page numbers and page ranges to
				be printed, separated by commas. For example, "2, 6-10" prints page
				2 and pages 6 through 10.
- PageType (optional). The type of pages to be printed.
				Can be one of the following WdPrintOutPages constants:
				wdPrintAllPages, wdPrintEvenPagesOnly, or wdPrintOddPagesOnly.
- PrintToFile (optional). True to send printer
				instructions to a file. Make sure to specify a file name with
				OutputFileName.
- Collate (optional). When printing multiple copies of a
				document, True to print all pages of the document before printing
				the next copy.
- FileName (optional). The path and file name of the
				document to be printed. If this argument is omitted, Word prints the
				active document. Available only with the Application object.
- ActivePrinterMacGX (optional). This argument is
				available only in Microsoft Office 98 Macintosh Edition. For
				additional information about this argument, consult the language
				reference Help included with Microsoft Office 98 Macintosh Edition.
- ManualDuplexPrint (optional). True to print a two-sided
				document on a printer without a duplex printing kit. If this
				argument is True, the PrintBackground and PrintReverse properties
				are ignored. Use the PrintOddPagesInAscendingOrder and
				PrintEvenPagesInAscendingOrder properties to control the output
				during manual duplex printing. This argument may not be available to
				you, depending on the language support (U.S. English, for example)
				that you’ve selected or installed.
- PrintZoomColumn (optional). The number of pages you
				want Word to fit horizontally on one page. Can be 1, 2, 3, or 4. Use
				with the PrintZoomRow argument to print multiple pages on a
				single sheet.
- PrintZoomRow (optional) . The number of pages you want
				Word to fit vertically on one page. Can be 1, 2, or 4. Use with the
				PrintZoomColumn argument to print multiple pages on a single sheet.
- PrintZoomWidth (optional). The width to which you want
				Word to scale printed pages, in twips (20 twips = 1 point; 72 points
				= 1 inch).
- PrintZoomHeight (optional). The height to which you want Word to
				scale printed pages, in twips (20 twips = 1 point; 72 points = 1
				inch).
 
- Added: [Beta] new task insert and update properties for use with the
		InsertTask, UpdateTask and GetTask/GetTaskQ methods:
		
			- oio:TaskCategories equate(13)
- oio:TaskCompanies equate(14)
- oio:TaskComplete equate(15)
- oio:TaskIsConflict equate(16) ! read only
- oio:TaskDateCompleted equate(17)
- oio:TaskTimeCompleted equate(18)
- oio:TaskIsRecurring equate(19) ! read only
- oio:TaskNoAging equate(20)
- oio:TaskOwner equate(21)
- oio:TaskPercentComplete equate(22)
- oio:TaskSize equate(23) ! size in bytes, read
			only
- oio:TaskStatus equate(24)
- oio:TaskStatusOnCompletionRecipients equate(25) !
			recipients who will receive notification on completion
- oio:TaskStatusUpdateRecipients equate(26) ! recipients
			who will receive notification when the task is updated
- oio:TaskTeamTask equate(27) ! set to true if this is a
			team task
- oio:TaskTotalWork equate(28)
- oio:TaskUnRead equate(29)
 
	General
	
		- Documentation Updates and improvements
- Internal class additions and cleanup, new generic COM classes and
			access methods
- New internal generic Get/Set and Call methods
Version 2.64 (04 April 2008)
Excel
	
		- Added: GetFileName() method that returns the name and path of the
			file on disk that is currently open.
- Changed: The ReadCell method now supports up to 4096 characters
			rather than 255 characters. This limitation will be removed in a future
			release.
- Added: The .excelFileName property to the Excel editable report
			class. This stores the file name that Excel returned once the file is
			saved.
	Word
	
		- Added: GetFileName() method that returns the name and path of the
			file on disk that is currently open.
- Fixed: Editable Report: Removed an extraneous call to Update() to
			change the application visibility after an editable report was created,
			but the application has already been closed by the Kill() and the file
			opened (if chosen) in a new instance using ShellExecute.
- Added: The .wordFileName property to the
			Word editable report
			class. This stores the file name that Word returned once the file is
			saved.
- [Editable Reports] Added: If the FileName is blank for the report
			output then the user is prompted for a file name automatically.
	General
	
		- Note: There is an issue with compatibility with FileExplorer in Clarion 5.5 when in
			Local Mode (duplicate symbol errors). This is not an issue with Clarion
			6 or 7 and only occurs in Local Mode in Clarion 5.5.
- Fixed: the csWord.ico and csExcel.ico icons were not always being linked into
			the project automatically for Editable Report use with the TargetSelector.
- Added: Multi-Proj support for automatically including required icons in
			the project.
- [Editable Reports] Fixed: The Excel and Word Editable report now
			uses the new excelFileName/wordFileName property to ensure the correct
			file name is always opened.
- [Editable Reports] Fixed:Removed an extraneous call to Update() to
			change the application visibility after an editable report was created,
			but the application has already been closed by the Kill() and the file
			opened (if chosen) in a new instance using ShellExecute.
- [Editalbe Reports] Added: Error handling and user information
			messages.
- Right Reports Integrations -
			CapeSoft Right Reports
			now supports outputting reports to fully editable Word and Excel
			documents using OfficeInside.
- General documentation cleanup and improvements.
		Outlook
	
		- Fixed: The DateReceived and
			TimeReceived properties contents were
			reversed when retrieving the list of messages.
- Added: SaveAs() method that allows
			the document to be saved to disk as a the following formats:
		
			- Microsoft Office Word format (.doc)
- HTML format (.html)
- iCal format (.ics)
- MIME HTML format (.mht)
- Outlook message format (.msg)
- Outlook Unicode message format (.msg)
- Rich Text format (.rtf)
- Microsoft Office Outlook template (.oft)
- Text format (.txt)
- VCal format (.vcs)
- VCard format (.vcf)
 
Version 2.63 (02 January 2008)
	Excel
	
		- Added: ImportSetup() and ImportComplete() callback methods to allow
			the document to be modified before and after the actual import when
			using the ImportExcel() method.
- Fixed: The Report To Excel template was displaying a prompt to save
			the current sheet when used in versions of Office prior to 2007. The new
			version now supports all version of Office and correctly determines the
			version and saves the document appropriately.
- Added: Code for Excel and Word editable reports to check the version
			of Office being used do the file saving appropriately.
			Note: It is recommended that the file
			name is specified without a file extension, this will
			allow OfficeInside and the Office application to set the correct file
			extension (for example either .XLS or .XLSX).
General
	
		- Additional documentation updates, converted the bulk of the
			documentation to using style sheets, removed inline and outdated
			attributes, reduced the document sizes, added new method
			documentation and improved existing documentation with full
			parameter lists and descriptions, examples etc.
Version 2.62 (11 November 2007)
		Outlook
	
		- Added a new GetEmailBody method to the Outlook object that is
			does not limit the size of the email body fetched, and returns the
			size required if the passed string reference is not large enough and
			the data has been truncated. The old method has a limit of 20,000
			characters. This is the method that is now called in the example
			application.
Version 2.61 (17 October 2007)
	General
	
		- Fixed the GetOfficeVersion function which was returning the
			incorrect version of Office for versions prior to Office 2007. This
			was causing a problem in SendTo.
Version 2.60 (04 October 2007)
	General
	
		- Fixed the editable reports example and removed an unnecessary
			Message() statement, also added both Word and Excel functionality to
			both examples. This should have been fixed in the previous release but
			the incorrect example was fixed. 
- Closed (cannot reproduce): Case 1582: Office Inside not working
			with Office 2003 SBE. OfficeInside has been tested using Office 2003
			SBE under both Windows XP and Vista without any problems.
- Added: More documentation updates, fixed missing links in the
			new method listing, updated documentation for method, converted
			documentation to all CSS for styling to improve consistency and
			speed (reduced the page size).
- Added a GetOfficeVersion() method that returns the version of
			Office installed. This is particularly useful for determining
			whether Office 2007 (12) is installed and hence the default document
			format being used (.xlsx, .docx etc.)
	Word
	
		- Confirmed Behaviour: Case 1486: ReplaceText() has a 256 character limit in Word.
			This is an intrinsic limitation of MS Word, not of OfficeInside. The workaround
			is to use the Find method to find and select the text to replace, and then use
			the InsertText to insert text if more than 256 characters are needed. This has
			been documented for the
			ReplaceText
			method, along with the workarounds (such as putting your large
			string on the clipboard and calling
			MyWord.ReplaceText('LookFor',
			'^c',
			true). The 2-character string '^c' will be interpreted by Word
			as the Paste command. 
- Fixed: Case 1367: GotoEndOfDoc doesn’t go to last character. The new GotoItem
			method that this calls fixes the various bugs and problems that existed with
			this method. The GotoItem can be use to go to the last line in the document,
			which will actually also go to the end of the document (selection moves to after
			the last line). Similarly going to the first line goes to the start of the first
			line (the beginning of the document).
- Fixed: Case 1366: GetFontSize returning invalid result - the
			GetFontSize method was returning a large integer rather than the
			correct font size.
	Excel
	
		- Added: Support for saving to the new XLSX format for the editable
			report templates. If now uses the default format specified by Excel,
			which ensures that the Compatibility dialog box is not displayed. It is
			recommended that you do not specify the file extension when specifying
			the file name, which allows Excel to pick the correct file extension
			based on the format used.
Version 2.50 (12 September 2007)
	General
	
		- Fixed the Editable Report templates for Word and Excel, they were
			not sharing the same TargetSelector object unless it was specified
			manually and with some configurations it was possible to have two
			independent TargetSelectors declared in a single procedure.
- More documentation updates for Word and Excel.
- Note: For the Word and Excel editable reports in Legacy you must
			have at least one of the SV report output templates added. For ABC this
			limitation does not apply. Full Legacy support will be added in a future
			release to remove this limitation.
	Word
	
		- Added: Two new methods for AutoFormat support for tables. This
			allows one of the built-in tables styles in Word to be applied to any
			table automatically. This also solves the problem under Word 2002 where
			an auto style is selected as default and that style is applied to any
			tables inserted. See the oiWord.TableAutoFormat()
			and oiWord.TableUpdateAutoFormat()
			method for more information.
- Added Auto Formatting support to the example application for tables,
			support all of the around 30 different styles.
- Closed: Case 1583:
			Cannot reproduce in the current build. oiWord.TableSetCellBold setting
			the style for the whole column. This is not reproducible, using either
			the oiWord.TableSetCellBold() method or the normal methods for setting
			the current selection to Bold, Italic etc. Also tested to ensure that
			the Toggle commands work as well as On/Off for styles. Test with bold,
			italic, underlined and combinations. 
- Added: New
			FindText() method search
			for a string and selects the next instance found, allowing each instance
			of a string to be found and modified (the style changed, or the actual
			string changed etc.).
- Fixed: Case 1368:
			GotoItem method not working. This method has been
			completely replaced and now works for all of the options available. Also
			note that this method now works as expected, so a number of workarounds
			are no longer needed. See the new oiWord.GotoItem()
			documentation for more information.
- Confirmed Behaviour: Case 1486: ReplaceText() has a 256 character
			limit in Word. This is an intrinsic limitation of MS Word, not of
			OfficeInside. The workaround is to use the Find method to find and
			select the text to replace, and then use the InsertText to insert text
			if more than 256 characters are needed. This will be documented for the
			ReplaceText method.
	Excel
	
		- Closed: Case 1478: Cannot reproduce in the current build: SetCellFormat does not
			appear to be working fully. Test all possible cell formatting
			options, along with a large number of combinations. All are working
			correctly.
Version 2.40 (10 September 2007)
	General
	
		- Added a Clarion 7 build.
- New documentation and changes to the existing
			documentation. All method, properties and data types for Word and Excel
			are being documented and the documentation completely overhauled, in
			line with the new Outlook documentation.
- Fixed invalid tags and attributes in
			documentation, added accessibility, fixed non html encoded characters
			etc.
- Changed and Fixed the RecentFiles classes. They
			are now initialised only for Word and Excel (PowerPoint can also be made
			available) and they correctly list everything the the Recent Files list
			for both applications. The list and objects are initialised when the
			object is, and the list is available as soon as the application has
			started (directly after the call to the Init() method returns).
- Added a RecentFiles tab to both the Excel and
			Word examples that displays the Recent File list for each application.
- Major cleanup of the documentation, all documentation will be moved
			to XHTML 1.0 Strict, and use CSS for formatting. This will improve load
			performance, accessibility and consistency. A large number of errors,
			formatting problems and code issues have been fixed.
- Added a new section to the documentation indicating how to
			dynamically create OfficeInside objects using the New command.
			Important: If you New an OfficeInside
			object you must set the .disabled
			property to 1 before the call to the Init method or the call to
			Init() will not work, and subsequent calls to the methods of the object
			will not work.
	Word
	
		- Fixed the RecentFiles list, it was not
			returning the list of recent files due to an initialisation error.
- Note: Event handling is currently being worked
			on, it has not been enabled since OfficeInside moved to late bound in
			1.40 Beta. Currently event handling is only working for Outlook.
- Changed: The oiWord.Update()
			method. The Option parameter was optional, but required in order for any
			code to execute. It is not an optional parameter and is no longer passed
			as such.
- Fixed: Case 1561:
			Opening and closing two instance of Word on two threads produces a
			normal.dot error. Can no longer reproduce this in the current release of
			OfficeInside.
- Fixed: Case 1470: TableSetInsideBordersLineStyle
			equates were incorrect and setting the style resulted in the style being
			set to the next one in the style list.
- Fixed: Case 1560:
			TableSetOutsideBordersLineStyle was not working at all, it is now
			correctly setting the table borders.
- Added: Case 1404: Add
			support for Document Protection. You can now Protect and Unprotect any
			document, including choosing the type of protect (read only, edit
			comments only, edit form fields only, make revisions only, or no
			protection). See the
			oiWord.Protect() and
			oiWord.Unprotect() method. A password
			is used if specified.
	Excel
	
		- New methods to for importing Excel files.
			Replaces the old ImportXLSFile()
			method. The new method is
			ExcelImport()
			and calls the new
			TakeImportRecord()
			callback method. No longer has any limitation on the number of
			columns imported, any number of columns can be imported.
- New ColumnName() method replaces the old
			GetColumnAddressFromColumnNumber()
			method removes the 26 column limit - column numbers up to 450,000
			are now supported making this method quite future proof (Excel 2007 supports
			16K columns and earlier versions supported 255 columns). The old method is
			deprecated, but will still be supported and simply calls the new
			ColumnName() method.
- Important:
			If you are using the 'Import XLS To TPS' control template (now
			called 'Import and Excel File') then you
			must move your code for
			processing each record from the old ImportXLSFile_TakeRecord() method to the new
			TakeImportRecord() method. Also note
			that instead of each column being passed as a parameter the columns
			are now passed using a queue.
- Fixed the RecentFiles list, it was not
			returning the list of recent files due to an initialisation error.
- New alignment options for
			oiExcel.SetCellAlignment:
			- oix:WrapText
- oix:HorizontalAlignment
- oix:VerticalAlignmentszMemberof
- oix:Indent
- oix:ShrinkToFit
- oix:TextDirection
- oix:Orientation
 
- In addition alignment equates for each of the options was added
			(see the
			SetCellAlignment() documentation)
- New documentation for
			SetPaletteColor() and
			GetPaletteColor(), including three
			examples, and an example of two complete procedures for implementing
			local color palette management. Fully documented how Excel uses
			colors and the difference between passing clarion color equates and
			actual color values using the oiExcel.InterpretClarionColorEquates property.
- SetCellNumberFormat()
			now supports any format and picture that Excel supports, also
			fully documented how to create custom pictures and formatting, and
			to use Excel to generate a picture for any possible format needed.
 
	Outlook
	
		- Added: New properties to the
			oioFolderItemsQType. This queue is
			used to store the contents of the folder in Outlook. The following
			properties are now available when using the
			oiOutlook.GetMailItemsQ()
			method. Note that the oioFolderItemsQType
			has changed to reflect the new properties. If you are using
			your own manually declared queues rather than the types provided by
			OfficeInside you will need to update your queue declaration. Please
			note that this is strongly not recommended.
			
				- Categories
- Companies
- FlagRequest
- Importance
- IsMarkedAsTask
- LastModificationTime
- LastModificationDate
- ReceivedByName
- ReceivedTime
- ReceivedDate
- ReplyRecipientNames
- SentOnBehalfOfName
- UnRead
 
- Fixed: Case 823: Address Book reading
			GPFs with more than 350 contacts. This error
			cannot be reproduced in the current release, even with far more than
			350 contacts
- Fixed: Case 824: Start Date and Start Time not
			read from Outlook when reading Tasks
- Added: New properties when reading Tasks to the
			oioTasksQType1 and
			oioTaskProperties structures
			(Writing to these properties will be supported in the next release.):
			- Categories
- Companies
- Complete
- IsConflict
- DateCompleted
- TimeCompleted
- IsRecurring
- NoAging
- Owner
- PercentComplete
- Size
- Status
- StatusOnCompletionRecipients
- StatusUpdateRecipientsTeamTask
- TotalWork
- UnRead
 
Version 2.36 (23 July 2007)
	General
	
		- Fixed: Compile error (unresolved external) in
			C55. The DLL for C55 was not correctly compiled, and an old DLL was
			included in the install.
Version 2.35 (11 July 2007)
	General
	
		- Documented a number of DLL functions that can be
			called from anywhere within an application using OfficeInside (no object
			needs to be instantiated to call these functions). See the
			DLL Functions section.
- Exposed the oiBaseToDec() and
			oiDecToBase() DLL
			functions.
Version 2.34 (06 July 2007)
	General
	
		- When using the
			Excel.dontCloseOnKill or
	        the Word.dontCloseOnKill option  the instance of Word
	        or Excel is now automatically made visible and the
	        display refreshed (and automatic display refreshing enabled if it was
	        disabled).
- Corrected the dates in the History for all releases in 2007 (they were
			listed as 2006).
- Updated the Editable Reports example. Clarified the options, redid
			window layout, provided new instructions etc. The example now
			demonstrates the different options setting the report target. The hand
			code required will be moved to template options.
- Added support for Multi-Proj
		- Updated documentation for the
			ScreenRefresh() method.
- New editable report template, generates all code needed, supports
			other report generators (such as those provided by SoftVelocity), allows
			the user target selection dialog box to be controlled etc.
	Excel
	
		- New editable report template, generates all code needed,
			supports other report generators (such as those provided by
			SoftVelocity), allows the user target selection dialog box to be
			controlled etc.
- New SaveAs
			method and documentation, now support specifying a file format to
			save the file as, which is useful for ensuring that a standard XLS
			file is saved with Office 2007, and ensuring that the Compatibility
			dialog is not displayed.
Version 2.33 (07 February 2007)
		General
	
		- The template now generates return values for method declarations
	        that return values and correctly returns the parent's return value by
	        default. Solves the "Function did not return a result" compiler warnings.
- Installer is now cryptographically signed by Capesoft Software. Ensures
	        the validity of the installer and avoids the "unsigned file" security
	        warning. Also allows the installer to run correctly under Windows Vista.
Version 2.32 (07 February 2007)
		General
	
		- Fixed the dontCloseOnKill option
        for use with
			Word and
			Excel, it was allowing Word and Excel to close
	        when Kill() was called and it had been set to a non zero value.
Version 2.31 (06 February 2007)
		General
	
		- Updated documentation to reflect newly added methods for
	        spell checking etc.
			SpellCheckString,
			SpellCheckHtml,
			SpellWord. These method will be used to clean up the template generated spell checking.
	        In addition they provide improved support and functionality.
- Added example code using SpellCheckString and SpellCheckHtml, which show how
	        the methods work, as well as providing an example of spell checking a
	        FileExplorer control.
- General documentation update (ongoing) to document every method
			and property, add examples for every method, document all
			parameters, return values and add cross referencing!
- New Properties sections added to Word and Excel docs, and new Methods tables
	        added.
Version 2.30 (02 February 2007)
		General
	
		- New Office01.tpw for handling classes and objects, maintains
	        backward compatability while supporting all possible parameters etc. 
- Fixed template bug that was not generating parent called with pointer to typed
	        queues corrected.
- Template: Added support for additional data types in the method declarations.
- Update the template that generates object and method declarations, and fixed
	        a number of small issues.
	Excel
	
		- Documented the two templates to import from Excel. See the Import
			From Excel templates section.
- Udpated document, new example code for WriteToCell (shows how to export a table
	        to an Excel file), clean up documentation example code, added syntax
	        highlighting etc. Documentation will be overhauled as the Outlook docs
	        have already been.
- New section in the documentation on class properties.
- New dontCloseOnKill
			property allows the OfficeInside object to be killed while
		    leaving Excel open.
Word
	
		- New SpellChecking methods.
- New method to check the spelling
	        of all words in a string and to encapsulate spelling (CheckSpelling).
- Add a CheckSpellingHtml method to allow HTML to be spell checked.
- Added support for punctuation to the spell checker so that additional punctuation
	        is not incorrectly determined as part of the word.
- Optimised spell checked and improve process speed of splitting the string into
	        words, removing punctuation etc.
- Added support for ignoring URL Encoded characters in HTML.
- Added support for ignoring HTML Escape code such as  
- Additional documentation on Spell Checking and RTF controls, new FAQs, links
           in the docs and cross referencing etc.
- New dontCloseOnKill
			property allows the OfficeInside object to be killed while
	        leaving Word open.
Version 2.21 (23 January 2007)
Excel
	
		- Fixed the PrintMe() method wich stopped working the the previous release. 
Version 2.20 (16 January 2007)
	Word
	
		- Fixed the MailMerge example in the Clarion 6 Demo, now
              uses a CSV file, fixed issues with dialog boxes displaying and
              problems reading the data from the file etc
- Case 1126: oiWord.InsertTable() fails when too many
              rows are specified (stops editable reports working):
 Fixed this using the Table.Rows.Add() method. Now the Tables.Add()
              call always adds a single row table, and Table.Rows.Add()is called in a loop to add the
              rest of the rows. No real speed difference and there is now no
              limitation on the number of rows being added. Although the MS Documentation for the Add() method of
              the Tables Collection seems to indicate that there is no limit
              to the number of added rows(other than
              the 32 bit signed integer being passed), all the examples provided
              seem to use the Table.Rows.Add() method in a loop, indicating
              that this appears to be a known(and ignored) behavior.
- Updated spell checking templates, fixed a potential
              problem with C55 and spell checking with RTF controls, where they
              were spell checked before any other controls.
- Created new C55 and C6 specific examples for spell checking,
              show the two different approach needed for RTF controls in the two different version.
- Added
			SetScreenUpdating() and
			ScreenRefresh() methods to allow screen updating
            to be turned off when writing data to Word (provides a small performance improvement) and
			ScreenRefresh() allows the screen to be refreshed manually.
- Updated documentation and began documentation rewrite.
	Outlook
	
		- Modified the Address Book example to use a queue declared in
            the data section. Although it is recommended that you use the data types
            provided for Contacts, Tasks, Appointments, Folders and Messages, the Clarion
            listbox editor does not allow you to populate the fields easily, and so
            to make the example easily modifiable we have opted to declare the queue
            as local data.
Excel
	
		- Began rewrite of docs. This will be a full rewrite as has been done with the Outlook docs
- New Methods:
          	
				- SetCalculations:
                     Allows automatic calculation of each inserted or edited cell in Excel
                     to be turned off. This can dramatically increase the speed of writing
                     large numbers of cells to Excel, and once complete automatic calculation
                     can be turned back on using the same method.
- Calculate: Forces the values of all formulas in all open
                    workbooks to be calculated. Useful if SetCalculations has turned
                    off automatic cell value calculation and the values need to be calculated at some point.
- SetScreenUpdating:Allows screen updating to be turned off and on
                    in Excel. This can also dramatically improve performance when inserting large numbers of cells.
 
- The new methods for optimisation have been implemented in the editable report
                templates etc. to improve performance. This has provided a small improvement
                in output speed to Word, and a very large performance improvement in outputting
                to Excel (in some cases as much as a hundred times faster).
Other
	
		- Added support for the Recent Files classes to the demo application
- Global and Local templates: cleaned up tabs, moved overlapping
            text, added descriptions to tabs, made RTF info version specific for C55/C6 etc.
- New utility functions:
          	
				- oiDecToBase: Converts from a decimal (base 10) to any other base, for example Hexidecimal (base 16), binary (base2) etc.
- oiBaseToDec: Converts from any base to a decimal number. For example convert Hexidecimal or binary to decimal.
 
- New Classes for all the applications representing the Recently Used Files objects:
          	
				- oiRecentFiles: Stores a list of recent files for all of the Office applications (Word, Excel,
	              Powerpoint and Outlook). This class is automatically initialised when
	              the main object is, and filled with a list of recent files, which
	              can then be accessed by looping through the queue. The class also contains
	              methods to refresh the queue, delete files, open files etc.
- oiRecentFile: Class used by the RecentFiles class, and represents an individual file in the
	              list. This class will typically not be accessed directly.
 
- New oiBase class that the original Office Inside classes inherit from, as well as the new child classes (such as RecentFiles).
                The oiBase class provides NewObject, CallMethod, GetProperty and SetProperty methods,
                and neatly encapsulates access to the properties and methods of the COM objects
                encapsulated by Office Inside. It is intended to also provide an interface for exposing
                COM objects that have not otherwise been exposed by Office Inside.
- Moved all functionality into the C55 compatible demo application. Functionality will no longer be split between C55 and C6 in the main
                Demo. For features that differ in C55 and C6 (or like editable report are
                only available in C6) separate examples will be include.
- Moved editable reports to a separate example.
- Editable reports no longer require either C6 EE or the SV Advanced Report Output Templates, they now only require Clarion
              6. See the new Editable Report Example for the optional code to allow the use of editable
              reports without the SV templates.
- Editable reports  now start hidden and only display when complete (if the template setting to display the document is turned on).
- Note: The RecentFiles class and other new base class
              method have very rudimentary document and will be fully documented in the next release. The RecentFiles
              class usage is demonstrated in the main OffDemo.app example application on the Word_Main window (procedure)
Version 2.11 : (08 December 2006)
		- New classes (to be documented and functional in the next release): RecentFile, RecentFiles
- New Data type (to be documented and functional in the next release): RecentFilesType
- Completely rewritten documentation for the Outlook class. Every single method,
	        property, data type and equate have been documented. Quickstart sections
	        showing how the objects work have been added, along with improved formatting
	        and clarity. Every method has all parameters, the return values, related
	        class properties, data types and equates listed, along with an actual
	        example of its use. In addition every method now has a See Also section
	        that cross references it with all related methods.
Version 2.10 :  (17 November 2006)
		- Added support for spell checking RTF text boxes and RTF controls populated
	        using the RTF template in both ABC and Legacy for Clarion 6.
- Added Clarion 5.5 RTF Spell Checking control template. In order to add spell
          checking to a Clarion 5.5 RTF control populate the 'Office Inside Spell
          Check for C55 RTF' spell checking control template onto the window
          for each RTF control that needs spell checking. This adds a "check
          spelling" button which then checks the spelling of the control. This
          is necessary simply because of the design of the C55 RTF control and
          class. See the section on C55 RTF Controls.
- Added support for FileExplorer and Office Inside on the same window and the same
	        thread. There is now a "Activate compatibility with File Explorer" on
	        the local extension of the Office Inside object. Tick this box only if
	        you are using Office Inside on the same procedure as FileExplorer. 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.
- Changes to the manner in which Office Inside is initialised to allowing another
	        object or control outside of Office Inside to initialise COM. This allows
	        the above feature of compatibility with File Explorer, but also allows
	        the use of Office Inside with other COM objects that need to initialise
	        the COM interface themselves.
- Add the first set of changes to the documentation. All objects, method, properties,
	        data types etc. will be fully documented and the existing documentation
	        enhanced to provide better examples, as well as better explanations of
	        the method, their parameters, return types, requirements etc.
- Fixed: Spell check template used the an embed for alertkeys in Legacy that did
	      not work in some instances. Simplified the code to use a single embed for
	      both ABC and Legacy. Thanks to Jorge Alejandro Lavera for not only reporting
	      this, but suggesting the solution too.
Version 2.01 : (30 August 2006)
		- Added support for Text Boxes on Editable Word and Excel reports.
- Updated documentation for oiOutlook.GetMailFoldersQ
Version 2.00 :  (18 August 2006)
		- Fixed the oiOutlook. GetMailFoldersQ method to return all folders, not just the outbox
- oiOutlook.GetMailFoldersQ now recurses through as many levels as there are folders,
	        rather than being limited to four levels.
- oiOutlook.GetMailFoldersQ has a new optional parameter that allows all folders to be retrieved,
	        including non mail folders such as Contacts, Tasks etc.
- Minor documentation updates.
For versions prior to 2.00 please see the 
Old Version History document.