Inconsistant results with Screen Readers

Posted by: mikedempsey on 8 September 2017, 5:24 am EST

  • Posted 8 September 2017, 5:24 am EST

    I am trying to modify my application to work with screen readers in order to get Section 508 compliance.

    I found your Section 508 VPAT (which may be interesting to a lawyer...) but I can not find any documentation on how to set up Spread to work correctly with a screen reader.

    I have tried 2 different readers - JAWS 11, and Narrator (included with Windows)

    If I set the AccessibleName property of Spread, Narrator reads what I set, but Jaws says "Spread Sheet1, Row n Column n".
    Apparently they are reading from different parts of the control. (Maybe JAWS is reading from the Sheet rather than the Spread itself.)

    In addition, the "Row n, Column m" part of what it reads appears to be random.
    It is definately not reading the 'current' row/column.
    Also the numbers are zero based (it said 'zero' sometimes) which is not the way users think.

    Finally it announces this text only when the spreadsheet first gets focus.
    If I use the arrow keys to move around I get total silence.

    Do you have a document somewhere that explains exactly what needs to be set - at what level (Spread, Sheet, Column, Row, Cell) in order to allow a screen reader to work correctly with Spread.





  • Replied 8 September 2017, 5:24 am EST

    I apologize for taking this long to get back to you.We really don't have a good example for you at this time, I've been working on one though and I'll get it to you as soon as I can.
  • Replied 8 September 2017, 5:24 am EST

    OK, I guess I'll wait for the example.


  • Replied 8 September 2017, 5:24 am EST

    By adding code to move the Focus to the spreadsheet's parent, and then back again, I can make the screen readers read the appropriate text when moving from cell to cell [Using the EnterCell() event] even though the spreadsheet is ReadOnly.

    So far so good.

    However JAWS still ignores the string I set for AccessibleName, and instead reads something that either you provide, or which it somehow divines for itself. (Spread name, Sheet name, Row n, Column m, cell text)

    Do you guys provide this text somewhere, or is it JAWS that is figuring this out for itself?

    If you provide it, how do I override your text - or simply prevent you from setting it - so that the screen reader will read the AccessibleName text that I am setting myself.



  • Replied 8 September 2017, 5:24 am EST

    Hello Mike,

    You should be able to set the name for Spread and Sheet only. You can access the Index for Row/Column/Cell not name.

    You may set the Spread name through properties window and set the sheet name using




  • Replied 8 September 2017, 5:24 am EST

    Yes I have already changed the Spread and Sheet names in order to make JAWS read what I want for that part.

    The problem is the rest of what it reads - "Row n, column m" (both zero based indexes.)

    So are you saying that you DO provide the accessible Text via another property (not AccessibleName) but that I can not override this?

    Setting AccessibleName works fine with Narrator, so what is it that JAWS is reading?

    Zero based indexes are VERY unfriendly. As are indexes compared to column labels.
    I dont understand why I can make Narrator say exactly what I want, but not JAWS. What is different here?




  • Replied 8 September 2017, 5:24 am EST

    Hi Mike,

    I think JAWS is reading the AccessibleDescription.  But it seems the AccessibleObject implementation in Spread is very limited and needs significant enhancement to be very useful for actual accessibility.  Spread does not implement child accessible objects for the cells, or focus tracking within the spreadsheet for accessibility, and without that the screen reader cannot follow the changes to the active cell as the user navigates.  And the code updating the AccessibleDescription is not very user friendly, as you have noted.

    To make it work well, I think it needs a custom AccessibleObject implementation, like the one shown in the MSDN help context for AccessibleObject, that implements GetChild and support for child AccessibleObject implementations for the cells.  It might require creating a subclass of FpSpread to implement all the infrastructure between the custom AccessibleObject and the control's notifications like OnLeaveCell.  I asked one of our support techs to look into creating such a sample, but it got beyond their skill level very quickly, and I determined that the scope of the effort was too much to ask of support (or customers) and that we need to consider some feature enhancements for Spread to make this better.  Unfortunately, it will not be possible to implement such enhancements for v5 anytime soon, and it might be next year it can be considered, possible for v6.

  • Replied 16 November 2020, 5:54 am EST

    Hi Sean,

    I have a client who uses JAWS and I'd love to know if any of the functionality you describe in this last post ever got implemented for version 6 or later. Thanks!
  • Replied 17 November 2020, 7:47 pm EST


    We have responded to the other case you created over SupportOne: 469239. You are requested to continue the discussion over there.

Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels