[jawsscripts] Re: An Excel script

  • From: Marlon Brandão de Sousa <splyt.lists@xxxxxxxxx>
  • To: jawsscripts@xxxxxxxxxxxxx
  • Date: Wed, 16 Sep 2009 08:07:20 -0300

Hello,
The problem here is that I am adding code to a script that already
exists rater than distributing new individual scripts.

2009/9/15, Donald Marang <donald.marang@xxxxxxxxx>:
> Jamal wrote a program, JAWS Script Exchange (jsx), to make it easy for
> anyone to install your scripts.  The end user does not need to know where
> scripts are located or how to add to them or compile them.  It is easy to
> create an self installing package.  Here is the direct link:
> http://www.EmpowermentZone.com/jsxsetup.exe
>
>
> Make sure to read the documentation to take advantage of its many powerful
> features!
>
> Don Marang
>
>
> ----- Original Message -----
> From: "Marlon Brandão de Sousa" <splyt.lists@xxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Tuesday, September 15, 2009 5:01 PM
> Subject: [jawsscripts] Re: An Excel script
>
>
>> Hello,
>> Just for your information I was able to code the script.
>>
>> It basically is composed of two scripts: one allows for
>>
>> setting up to six columns to be monitored and the other
>>
>> that reads the columns choosen.
>> I would like to thank pretty much everybody who helped
>>
>> me to code it, specially Martin who stated some
>>
>> interesting types.
>> I will past the code below and I would ask you guys to
>>
>> point out better ways to achieving the objectives, if
>>
>> you do know. Also, after the code, I will post some
>>
>> questions about how to deploy these scripts.
>>
>> file microsoft excel.jsb
>> const
>> DebugJAWSBackspace = False,
>> ; next constant stores the columns letters (used with
>>
>> stringSeguiment to obtain the letter of the current column
>> c_sColNames = "A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|A
>> A|A B|A C|A D|A E|A F|A G|A H|A I|A J|A K|A L|A M|A N|A O|A P|A Q|A
>> r|A S|A T|A U|A V|A W|A X|A Y|A Z"
>>
>> globals
>> int mCol1, ;slot one
>> int mCol2, ;slot two
>> int mCol3, ; ;slot three
>> int  mCol4, ;slot four
>> int mCol5, ;slot five
>> int mCol6 ;;slot six
>>
>> <question> did someone already come with any workaround to represent
>> arrays?
>> The stringSeguiment aproach may work but I think that it would cause
>> serious performance issues if used as an array simulation
>>
>> ; the following function gets the column index and retrieves and
>> returns its equivalent letter, in order to compose the address of the
>> cell to be read in the script readMonitorCol
>>
>> string function getColName(int index, int bTrim)
>> ; index = column index
>> ; bTrim = if true will trim the blank spaces between the letters of
>> the c_sColNames
>> ; it was necessary to add this space to make JAWs speak the selected
>> column more clearly. For translating the index into the column letter,
>> we do not meed these spaces
>> var
>> string sColName ; column letter
>> let sColName = StringSegment (c_sColNames, "|", index)
>> if(bTrim) then
>> let sColName = stringStripAllBlanks (sColName)
>> endif
>> return sColName
>> endFunction
>>
>> ; following script sets the current column to a slot.
>> Its keystroke assignment is set to ctrl+alt+shift in
>>
>> microsoft excel.jkm
>>
>> script SetMonitorCol()
>> var
>> int Col, ; column ndex
>> int slotCol ; Desired slote to put this column
>> ; get the number pressed together with ctrl+alt+sift to activate the
>> script (this number (currently 1 to 6) will point the monitoring slote
>> to the current column
>> let slotCol=stringToInt(stringRight(getCurrentScriptKeyName(),1)) ;
>> get the current cell address (in indexes). The first parameter of
>> GetCellCoordinates will return the current column index
>> GetCellCoordinates (col, 0)
>> if(slotCol==1) then ; store the current column in slote one
>> let mCol1=col
>> elif(slotCol==2) then ; ; store the current column in slote two
>> let mCol2=col
>> elif(slotCol==3) then ;; store the current column in slote three
>> let mCol3=col
>> elif(slotCol==4) then ;; store the current column in slote four
>> let mCol4=col
>> elif(slotCol==5) then ; ; store the current column in slote five
>> let mCol5=col
>> elif(slotCol==6) then ;; store the current column in slote six
>> let mCol6=col
>> else ; point error
>> sayString("invalid slot")
>> endif
>> ; report what have been done
>> sayString("collumn " + getColName(col, false) + " added to slot " +
>> intToString(slotCol))
>> EndScript
>>
>>
>> ; following script reads the column of a given line, accordingly with
>> the choosen slot
>> ; its keystroke assignment is ctrl+shift+ in the microsoft excel.jkm file.
>> Script readMonitorCol ()
>> var
>> int iLine, ; current line
>> int slotCol ;choosen slot
>> ; get the current line
>> GetCellCoordinates (0, iLine)
>> ; get the number pressed together with ctrl+alt+sift to activate the
>> script (this number (currently 1 to 6) will point the column to be
>> read
>> let slotCol=stringToInt(stringRight(getCurrentScriptKeyName(),1))
>> if(slotCol==1) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot one
>> readMonitorCell(getColName(mCol1, true) + intToString(iLine))
>> elif(slotCol==2) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot two
>> readMonitorCell(getColName(mCol2, true)+intToString(iLine))
>> elif(slotCol==3) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot three
>> readMonitorCell(getColName(mCol3, true)+intToString(iLine))
>> elif(slotCol==4) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot four
>> readMonitorCell(getColName(mCol4, true)+intToString(iLine))
>> elif(slotCol==5) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot five
>> readMonitorCell(getColName(mCol5, true)+intToString(iLine))
>> elif(slotCol==6) then ; read the cell (line iLine, column with the
>> letter equivalent to the index stored in the slot six
>> readMonitorCell(getColName(mCol6, true)+intToString(iLine))
>> else ; error
>> sayString("invalid slot")
>> endif
>> EndScript
>>
>> My questions are the following:
>>
>> 1- How can I deploy these scripts in an easy way?
>>
>> Currently I would have to ask that one opens its microsoft excel.jss,
>> past the const declaration in the right place, then past the scripts's
>> code somewhere in the file, then update their microsoft excel.jkm file
>> with the right keystrokes, then update their jsd file with the scripts
>> documentation. This could easily lead to errors causing either the
>> scripts to not work properly or the microsoft excel.jss file to not
>> compile if something goes wrong
>> I surely could write a inno setup installer with heavy custom pascal
>> code that would programmatically open the files, add information and
>> then compile everything. I do think, however, that creating a .jsb
>> file with this code and using a use statement might be the best
>> solution. One would still need to edit their jss file, but only one
>> line would be needed.
>> I fear however that my jsb file can not access the excel built in
>> functions such as for example readMonitorCel(). So what would be the
>> easier way to deploy this kind of script?
>> If I use a jsb then what about the definitions of the jkm and jsd files?
>> Thanks,
>> Marlon
>>
>> 2009/9/11, Martin Slack <m.g.slack@xxxxxxxxxxxx>:
>>> Hi Marlon,
>>>
>>>   Your point 1- below is answered by my email below sent on 10 September.
>>> The code I gave showed only one line of the form:
>>>
>>> SayString (StringSegment (sLine, "|", 20))
>>>
>>>   because in your original posting, you said you wanted to read the
>>> contents
>>> of column t.  But you can have as many SayString statements as you like,
>>> because the string sLine contains the contents of all the cells in the
>>> current row.  To speak the cells from the current row in columns a, f, m
>>> and
>>> t simply use four lines of code:
>>>
>>> SayString (StringSegment (sLine, "|", 1))
>>> SayString (StringSegment (sLine, "|", 6))
>>> SayString (StringSegment (sLine, "|", 13))
>>> SayString (StringSegment (sLine, "|", 20))
>>>
>>>   If you want to follow a different route, as outlined in your point 2-
>>> below, you can use GetCellCoordinates to find the number of the column
>>> containing the current cell, and use that as an index into the
>>> StringSegment
>>> function to return the appropriate letter from a delimited string formed
>>> thus:
>>>
>>> let sExtendedAlphabet = "a|b|c|d|e|f|g| ... |uuu|vvv|www|xxx|yyy|zzz"
>>>
>>>   where I am using the vertical bar character as the delimiter and only
>>> including three alphabet's worth of columns (= 78 columns).  Extend the
>>> string further if you need to access more columns.
>>>
>>>   hth
>>>
>>> Martin
>>>
>>>
>>> ----- Original Message -----
>>> From: "Marlon Brandão de Sousa" <splyt.lists@xxxxxxxxx>
>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>> Sent: Friday, September 11, 2009 6:31 PM
>>> Subject: [jawsscripts] Re: An Excel script
>>>
>>>
>>>> Hello,
>>>> 1- The getRowTotals and such will work for one collumn only. I want to
>>>> set up to six collumns that will be read accordingly to the end number
>>>> of the keystroke pressed.
>>>> 2- I found that the getSelectionCoordinates() function will return me
>>>> a coordinate like b5 for example. I now need to get only the letters
>>>> of the string whichj will be the current collumn. Any suggestion as
>>>> how I can achieve this (like getting the "a62" string and end with the
>>>> "a" character only?
>>>> I cant simply get the first character because a collumn may have two
>>>> letters size like "ab75".
>>>> I just need to separate letters from numbers in a string.
>>>> Marlon
>>>>
>>>> 2009/9/11, Martin Slack <m.g.slack@xxxxxxxxxxxx>:
>>>>> GetCellCoordinates will return both the row and column as integers.
>>>>> See
>>>>> my
>>>>> replies to Reed for a method of converting column coordinates to the
>>>>> appropriate letters.
>>>>>
>>>>>   Martin
>>>>>
>>>>>
>>>>> ----- Original Message -----
>>>>> From: "Marlon Brandão de Sousa" <splyt.lists@xxxxxxxxx>
>>>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>>>> Sent: Friday, September 11, 2009 2:17 PM
>>>>> Subject: [jawsscripts] Re: An Excel script
>>>>>
>>>>>
>>>>>> Hello,
>>>>>> I will try it. BTW, there is a function called sayCell which takes a
>>>>>> string as parameter and that will say the cell contents. The problem
>>>>>> is, this parameter must be something like "a35" ... I just need to
>>>>>> know a way of getting the collumn one is placed into to set the
>>>>>> monitor thing.
>>>>>> Any other suggestion as how to get the current collumn letter when
>>>>>> pressing a keystroke?
>>>>>> Marlon
>>>>>>
>>>>>> 2009/9/10, Martin Slack <m.g.slack@xxxxxxxxxxxx>:
>>>>>>> Marlon,
>>>>>>>
>>>>>>>   The JAWS function GetRowText can be called to produce a delimited
>>>>>>> string
>>>>>>> of all the text in the active row of the table.  You can then specify
>>>>>>> which
>>>>>>> cell's contents to speak using the StringSegment function as below:
>>>>>>>
>>>>>>> Script testExcel ()
>>>>>>> Var string sLine
>>>>>>>
>>>>>>> let sLine = GetRowText ("|", "c%1r%2", "nothing found", 1, 26)
>>>>>>> ;let sLine = GetRowText ("|", "", "nothing found")
>>>>>>> SayString (StringSegment (sLine, "|", 20))
>>>>>>>
>>>>>>> EndScript
>>>>>>>
>>>>>>>
>>>>>>>   You can use either form of the GetRowText function above, either
>>>>>>> specifying everything (include each cell's coordinates in the string
>>>>>>> as
>>>>>>> well
>>>>>>> as how much of the row to read), or accept the default options of no
>>>>>>> coordinates and read the whole row.
>>>>>>>
>>>>>>>   If you need to specify the column by letter, you could compare your
>>>>>>> letter
>>>>>>> with a string of characters, say "a|b|c| ... |zz" using
>>>>>>> StringSegmentIndex
>>>>>>> until you found the match and then enter that number in the above
>>>>>>> code.
>>>>>>>
>>>>>>>   hth
>>>>>>>
>>>>>>> Martin
>>>>>>>
>>>>>>>
>>>>>>> ----- Original Message -----
>>>>>>> From: "Marlon Brandão de Sousa" <splyt.lists@xxxxxxxxx>
>>>>>>> To: <jawsscripts@xxxxxxxxxxxxx>
>>>>>>> Sent: Thursday, September 10, 2009 9:46 PM
>>>>>>> Subject: [jawsscripts] Re: An Excel script
>>>>>>>
>>>>>>>
>>>>>>>> That's also what I would like to know.
>>>>>>>> I want to implement a kind of monitor cell that is relative to the
>>>>>>>> line one currently is placed, so that if they are whatching for
>>>>>>>> collumn t for example they can be anywhere in line 2 and pressing a
>>>>>>>> keystroke the t2 cell would be read and if they are in anywhere in
>>>>>>>> line 135 and press the same command the t135 cell will be read and
>>>>>>>> so
>>>>>>>> on.
>>>>>>>> I can code a function like numberToLetter and use it, but cinse JAWS
>>>>>>>> can say the coordinates of a given cell then I also can use this
>>>>>>>> information in my scripts. We just need to figure out or be helped
>>>>>>>> as
>>>>>>>> to how to get this information.
>>>>>>>> Marlon
>>>>>>>>
>>>>>>>> 2009/9/10, Reed Poynter <reed.poynter@xxxxxxxxx>:
>>>>>>>>> Hi Scripters,
>>>>>>>>>
>>>>>>>>> In Ms Excel 2003, there is a Go To dialog where you can select
>>>>>>>>> blocks
>>>>>>>>> of
>>>>>>>>> data based on a top left and a bottom right cell.
>>>>>>>>> For example, in a spreadsheet, you hit F5 and specify A1:G6 and hit
>>>>>>>>> enter.
>>>>>>>>> The block of data is selected.
>>>>>>>>>
>>>>>>>>> I want to be able to do the following.
>>>>>>>>> Go to the top left cell and hit a key to save its coordinates, go
>>>>>>>>> to
>>>>>>>>> the
>>>>>>>>> bottom right cell, hit a second key to save its coordinates, put
>>>>>>>>> the
>>>>>>>>> 2
>>>>>>>>> saved
>>>>>>>>> coordinates together in a string and put it into the go to dialog.
>>>>>>>>>
>>>>>>>>> I don't know of anything in Excel that will do this for me.  So, I
>>>>>>>>> thought
>>>>>>>>> I'd write a JFW script to do it.
>>>>>>>>>
>>>>>>>>> I think my process would be to, with a hot key, save the
>>>>>>>>> coordinates
>>>>>>>>> of
>>>>>>>>> the
>>>>>>>>> top left cell to the clipboard,
>>>>>>>>> With a second hot key, capture the bottom cell coordinates, and put
>>>>>>>>> them
>>>>>>>>> together into a string with the first coordinates once retrieved
>>>>>>>>> from
>>>>>>>>> the
>>>>>>>>> clipboard.
>>>>>>>>> Save this new string to the clipboard,
>>>>>>>>> Open Excel's Go To dialog and paste in my coordinates.
>>>>>>>>>
>>>>>>>>> My first problem is having the script determine the cell
>>>>>>>>> coordinates.
>>>>>>>>> Looking through the functions in the Script Manager, the only guy I
>>>>>>>>> see
>>>>>>>>> is
>>>>>>>>> GetCellCoordinates.
>>>>>>>>> If I am sitting on cell A5,  GetCellCoordinates (x, y) returns
>>>>>>>>> integers
>>>>>>>>>
>>>>>>>>> 1
>>>>>>>>> and 5.
>>>>>>>>> I need something that will give me a5.
>>>>>>>>> Any suggestions?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>>
>>>>>>>>> Reed
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> __________
>>>>>>>>> Visit and contribute to The JAWS Script Repository
>>>>>>>>> http://jawsscripts.com
>>>>>>>>>
>>>>>>>>> View the list's information and change your settings at
>>>>>>>>> //www.freelists.org/list/jawsscripts
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> When you say "I wrote a program that crashed Windows," people just
>>>>>>>> stare at you blankly and say "Hey, I got those with the system, for
>>>>>>>> free."
>>>>>>>> Linus Torvalds
>>>>>>>> __________
>>>>>>>> Visit and contribute to The JAWS Script Repository
>>>>>>>> http://jawsscripts.com
>>>>>>>>
>>>>>>>> View the list's information and change your settings at
>>>>>>>> //www.freelists.org/list/jawsscripts
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --------------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> No virus found in this incoming message.
>>>>>>> Checked by AVG - www.avg.com
>>>>>>> Version: 8.5.409 / Virus Database: 270.13.89/2360 - Release Date:
>>>>>>> 09/10/09
>>>>>>> 11:29:00
>>>>>>>
>>>>>>> __________
>>>>>>> Visit and contribute to The JAWS Script Repository
>>>>>>> http://jawsscripts.com
>>>>>>>
>>>>>>> View the list's information and change your settings at
>>>>>>> //www.freelists.org/list/jawsscripts
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> When you say "I wrote a program that crashed Windows," people just
>>>>>> stare at you blankly and say "Hey, I got those with the system, for
>>>>>> free."
>>>>>> Linus Torvalds
>>>>>> __________
>>>>>> Visit and contribute to The JAWS Script Repository
>>>>>> http://jawsscripts.com
>>>>>>
>>>>>> View the list's information and change your settings at
>>>>>> //www.freelists.org/list/jawsscripts
>>>>>>
>>>>>
>>>>>
>>>>> --------------------------------------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>> No virus found in this incoming message.
>>>>> Checked by AVG - www.avg.com
>>>>> Version: 8.5.409 / Virus Database: 270.13.91/2363 - Release Date:
>>>>> 09/11/09
>>>>> 09:15:00
>>>>>
>>>>> __________
>>>>> Visit and contribute to The JAWS Script Repository
>>>>> http://jawsscripts.com
>>>>>
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/jawsscripts
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> When you say "I wrote a program that crashed Windows," people just
>>>> stare at you blankly and say "Hey, I got those with the system, for
>>>> free."
>>>> Linus Torvalds
>>>> __________
>>>> Visit and contribute to The JAWS Script Repository
>>>> http://jawsscripts.com
>>>>
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/jawsscripts
>>>>
>>>
>>>
>>> --------------------------------------------------------------------------------
>>>
>>>
>>>
>>> No virus found in this incoming message.
>>> Checked by AVG - www.avg.com
>>> Version: 8.5.409 / Virus Database: 270.13.91/2363 - Release Date:
>>> 09/11/09
>>> 09:15:00
>>>
>>> __________
>>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>>
>>
>>
>> --
>> When you say "I wrote a program that crashed Windows," people just
>> stare at you blankly and say "Hey, I got those with the system, for
>> free."
>> Linus Torvalds
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
>


-- 
When you say "I wrote a program that crashed Windows," people just
stare at you blankly and say "Hey, I got those with the system, for
free."
Linus Torvalds
__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: