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