[Bug 24759] safearray axis in reversed order

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Oct 16 19:32:33 CDT 2010


http://bugs.winehq.org/show_bug.cgi?id=24759

--- Comment #8 from bill lam <cbill.lam at gmail.com> 2010-10-16 19:32:33 CDT ---
The safearray created in test was in fact incorrect, 
but the safearraygetubound/safearraygetlbound were also
incorrect in the same manner. error cancel error hence
the result appeared to be correct. What is needed is a
third party program that will use the safearray to validate
the safearray created.

It began when someone asked in forum

In studying OLE Automation I found an example of programming 
via C# that appears to write an array directly to a spreadsheet 
(see code fragment below):
         // Create an array to multiple values at once.
                 string[,] saNames = new string[5,2];

                 saNames[ 0, 0] = "John";
                 saNames[ 0, 1] = "Smith";
                 saNames[ 1, 0] = "Tom";
                 saNames[ 1, 1] = "Brown";
                 saNames[ 2, 0] = "Sue";
                 saNames[ 2, 1] = "Thomas";
                 saNames[ 3, 0] = "Jane";
                 saNames[ 3, 1] = "Jones";
                 saNames[ 4, 0] = "Adam";
                 saNames[ 4, 1] = "Johnson";

        //Fill A2:B6 with an array of values (First and Last Names).
                 oSheet.get_Range("A2", "B6").Value2 = saNames;

After some iterations, I got a way to do using safearray with a test
of pseudocode like,

NB. base is idispatch interface
  base=. createstddispatch 'Excel.Application'
NB. wb is workbooks property of base
  wb=. base.workbooks
NB. open method to open an excel file
  wb.open '/path/to/an_existing_excel_file'
  awb=. base.activeworkbook
  aws=. awb.worksheets  1     NB. sheet 1-base
NB. write number using safearray
NB. call method range of aws object for get block of shape of 3,4
  range=. aws.range  'C12:F14'
NB. create a safearray of integer 
NB. 0 1 2 3
NB. 4 5 6 7
NB. 8 9 10 11
NB. and wrap it inside a variant for ole automation use.
  sa=. safearray of shape (3,4) and values 0,1,2,3,4,5,6,7,8,9,10,11
  range.value2=. sa
  free sa
NB. read safearray for validation
  debugprint range.value2
NB. save and cleanup
  base.DisplayAlerts=. false
  awb.save
  awb.close
  base.quit

open the excel file, you will see a block like this,
0 5 10 #n/a
4 9 3  #n/a
8 2 7  #n/a

the last column was not initialised and the order of number in cells shuffled.

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list