nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
Other
2.07k stars 624 forks source link

Numbers not read when using backspace to edit a cell in Excel with "Allow editing directly in cells" enabled #16861

Open Qchristensen opened 1 month ago

Qchristensen commented 1 month ago

Steps to reproduce:

  1. Ensure "Allow editing directly in cells" is checked in Excel's "Advanced" options.
  2. Type a number in any cell, eg 1234
  3. Press tab to move out of the cell, then shift+tab to return to the cell
  4. Press F2 to edit the cell
  5. Press backspace to remove characters one at a time.
  6. Press NVDA+up arrow (NVDA+l) to read the current line.
  7. Press tab then shift+tab to leave the cell then return to it
  8. Open Excel's advanced settings and uncheck "Allow editing directly in cells".

Actual behavior:

At step 5, when using backspace, nothing is reported. At step 6, the text may be read or may read "unknown". At step 7, the value is read confirming that characters were removed with backspace.

Expected behavior:

These functions should work as expected.

NVDA logs, crash dumps and other attachments:

IO - inputCore.InputManager.executeGesture (09:28:34.516) - winInputHook (12596): Input: kb(desktop):backspace DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (09:28:34.576) - MainThread (8796): Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 69024 (EXCEL7), objectID 982, childID 0, process 29020 (excel), thread 27676 DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (09:28:34.576) - MainThread (8796): Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_VALUECHANGE, window 69024 (EXCEL7), objectID 983, childID 0, process 29020 (excel), thread 27676 DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (09:28:34.579) - MainThread (8796): Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 69024 (EXCEL7), objectID 984, childID 0, process 29020 (excel), thread 27676 DEBUG - editableText.EditableText._hasCaretMoved (09:28:34.636) - MainThread (8796): Caret didn't move before timeout. Elapsed: 0.10508 sec

Note that this happens regardless of whether NVDA is set to use UI Automation in Excel.

System configuration

NVDA installed/portable/running from source:

NVDA version:

2023.3 Beta 3 installed

Windows version:

Windows 11 (64-bit) Version: 23H2, Build: 22631.3880

Name and version of other software in use when reproducing the issue:

Office 365 (64-bit) Version: 16.0.17726.20108

Other information about your system:

Other questions

Does the issue still occur after restarting your computer?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

2023.3.3 (Portable) - same behaviour. 2023.1 (temporary) - same behaviour 2022.4 (temporary) - same behaviour 2022.3.2 (temporary) - Worked 2021.3.5 (Portable) - Worked

If NVDA add-ons are disabled, is your problem still occurring?

Does the issue still occur after you run the COM Registration Fixing Tool in NVDA's tools menu?

Adriani90 commented 1 month ago

Does this happen with 2024.3 Beta?

Qchristensen commented 1 month ago

Yes @Adriani90 - I'm using NVDA 2024.3 Beta 3. I should have mentioned that the user who first reported this - in the NVDA user group - https://nvda.groups.io/g/nvda/message/119435 - has used both NVDA 2024.1 and NVDA 2024.2 since this issue appeared (when they upgraded to Windows 11).

Adriani90 commented 1 month ago

Here is a detailed logging that is written with UIA, speech, speech manager, synth driver and Events enabled in advanced logging categories. It seems the speech is in cancelling for every subsequent uterance after pressing f2.

IO - inputCore.InputManager.executeGesture (18:07:19.889) - winInputHook (23360):
Input: kb(laptop):f2
DEBUG - speech.manager.SpeechManager.cancel (18:07:19.889) - MainThread (18684):
SpeechManager- Cancel
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:19.933) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_FOCUS, window 329060 (EXCEL7), objectID 1058, childID 0, process 26960 (excel), thread 12144
DEBUG - UIAHandler.UIAHandler.IUIAutomationFocusChangedEventHandler_HandleFocusChangedEvent (18:07:19.962) - Dummy-2 (21636):
handleFocusChangedEvent called with element [None] Bereich with automationID [None], className EXCEL6 and frameworkID Win32
DEBUG - UIAHandler.UIAHandler.isNativeUIAElement (18:07:19.962) - Dummy-2 (21636):
checking if is native UIA  element: [None] Bereich with automationID [None], className EXCEL6 and frameworkID Win32
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.964) - Dummy-2 (21636):
Locating nearest ancestor windowHandle for element [None] Bereich with automationID [None], className EXCEL6 and frameworkID Win32
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.966) - Dummy-2 (21636):
Found ancestor element with valid windowHandle hwnd 0X5011E of class EXCEL6
DEBUG - UIAHandler.UIAHandler.isUIAWindow (18:07:19.966) - Dummy-2 (21636):
Found cached is UIA window False for hwnd hwnd 0X5011E of class EXCEL6
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.966) - Dummy-2 (21636):
Got previously cached nearest windowHandle of hwnd 0X5011E of class EXCEL6 for element [None] Bereich with automationID [None], className EXCEL6 and frameworkID Win32
DEBUG - UIAHandler.UIAHandler.isNativeUIAElement (18:07:19.966) - Dummy-2 (21636):
Treating element as non-native
DEBUG - UIAHandler.UIAHandler.IUIAutomationFocusChangedEventHandler_HandleFocusChangedEvent (18:07:19.966) - Dummy-2 (21636):
Ignoring for non native element [None] Bereich with automationID [None], className EXCEL6 and frameworkID Win32
DEBUG - UIAHandler.UIAHandler.IUIAutomationFocusChangedEventHandler_HandleFocusChangedEvent (18:07:19.966) - Dummy-2 (21636):
handleFocusChangedEvent called with element Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUG - UIAHandler.UIAHandler.isNativeUIAElement (18:07:19.967) - Dummy-2 (21636):
checking if is native UIA  element: Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.967) - Dummy-2 (21636):
Locating nearest ancestor windowHandle for element Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.969) - Dummy-2 (21636):
Found ancestor element with valid windowHandle hwnd 0X50564 of class EXCEL7
DEBUG - UIAHandler.UIAHandler._isUIAWindowHelper (18:07:19.969) - Dummy-2 (21636):
checking window hwnd 0X50564 of class EXCEL7
DEBUG - UIAHandler.UIAHandler._isUIAWindowHelper (18:07:19.971) - Dummy-2 (21636):
window has UIA server side provider
DEBUG - UIAHandler.UIAHandler._isUIAWindowHelper (18:07:19.971) - Dummy-2 (21636):
MS Excel spreadsheet  treated as non-UIA
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:19.971) - Dummy-2 (21636):
Got previously cached nearest windowHandle of hwnd 0X50564 of class EXCEL7 for element Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUG - UIAHandler.UIAHandler.isNativeUIAElement (18:07:19.971) - Dummy-2 (21636):
Treating element as non-native
DEBUG - UIAHandler.UIAHandler.IUIAutomationFocusChangedEventHandler_HandleFocusChangedEvent (18:07:19.971) - Dummy-2 (21636):
Ignoring for non native element Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUG - NVDAObjects.UIA.UIA.__init__ (18:07:20.009) - MainThread (18684):
No windowHandle for UIA NvDAObject. Searching UIA element ancestry for nearest windowHandle
DEBUG - UIAHandler.UIAHandler.getNearestWindowHandle (18:07:20.009) - MainThread (18684):
Got previously cached nearest windowHandle of hwnd 0X50564 of class EXCEL7 for element Zelle bearbeiten Bearbeiten with automationID CellEdit, className [None] and frameworkID [None]
DEBUGWARNING - NVDAObjects.window.excel.ExcelBrowseModeTreeInterceptor._get_isAlive (18:07:20.019) - MainThread (18684):
could not compare sheet names
Traceback (most recent call last):
  File "NVDAObjects\window\excel.pyc", line 565, in _get_isAlive
  File "monkeyPatches\comtypesMonkeyPatches.pyc", line 94, in new__getattr__
  File "comtypes\client\lazybind.pyc", line 168, in __getattr__
  File "comtypes\automation.pyc", line 807, in _invoke
  File "monkeyPatches\comtypesMonkeyPatches.pyc", line 33, in __call__
_ctypes.COMError: (-2147418111, 'Aufruf wurde durch Aufgerufenen abgelehnt.', (None, None, None, 0, None))
DEBUG - treeInterceptorHandler.killTreeInterceptor (18:07:20.019) - MainThread (18684):
Killed treeInterceptor: <NVDAObjects.window.excel.ExcelBrowseModeTreeInterceptor object at 0x00BD1A30>
DEBUG - eventHandler.doPreGainFocus (18:07:20.019) - MainThread (18684):
SpeechManager- executeEvent: Removing cancelled speech commands.
DEBUG - speech.manager.SpeechManager.removeCancelledSpeechCommands (18:07:20.019) - MainThread (18684):
SpeechManager- removeCancelledSpeechCommands
DEBUG - speech.manager.SpeechManager._getMostRecentlyCancelledUtterance (18:07:20.019) - MainThread (18684):
SpeechManager- Length of _cancelCommandsForUtteranceBeingSpokenBySynth: 0 Length of _indexesSpeaking: 0 
DEBUG - speech.manager.SpeechManager._doRemoveCancelledSpeechCommands (18:07:20.019) - MainThread (18684):
SpeechManager- Last index: None
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.019) - MainThread (18684):
_getTextWithFieldsForUIARange
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.019) - MainThread (18684):
rootElement: Bearbeiten
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.019) - MainThread (18684):
full text: 1234
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.019) - MainThread (18684):
Fetching parents starting from enclosingElement
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.019) - MainThread (18684):
Hit root
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Done fetching parents
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Generating controlFields for parents
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Done generating controlFields for parents
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Yielding control starts for parents
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Done yielding control starts for parents
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Yielding balanced fields for textRange
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
no children
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
Yielding text
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
_getTextWithFields_text start
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
Walking by unit None, with further units of: [1, 2, 0]
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
Chunk has text. Fetching formatting
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
Yielding formatting and text
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
field: FieldCommand formatChange with {'language': 'de_DE'}, text: 1234
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFields_text (18:07:20.029) - MainThread (18684):
Done _getTextWithFields_text
DEBUG - NVDAObjects.UIA.UIATextInfo._getTextWithFieldsForUIARange (18:07:20.029) - MainThread (18684):
_getTextWithFieldsForUIARange end
IO - speech.speech.speak (18:07:20.029) - MainThread (18684):
Speaking ['Eingabefeld', CancellableSpeech (still valid, devInfo< isCanceledCache: False, isValidCallback: True, isValidCallbackDevInfo: isLast: True, previouslyHad: True, isAncestorOfCurrentFocus: False, is foreground obj False, isMenuItemOfCurrentFocus: False >), '1234']
DEBUG - speech.manager.SpeechManager.speak (18:07:20.029) - MainThread (18684):
SpeechManager- speak (priority <SpeechPriority.NORMAL: 0>): ['Eingabefeld  ', CancellableSpeech (still valid, devInfo< isCanceledCache: False, isValidCallback: True, isValidCallbackDevInfo: isLast: True, previouslyHad: True, isAncestorOfCurrentFocus: False, is foreground obj False, isMenuItemOfCurrentFocus: False >), '1234  ']
DEBUG - speech.manager.SpeechManager._queueSpeechSequence (18:07:20.029) - MainThread (18684):
SpeechManager- Out Seq: [['Eingabefeld  ', CancellableSpeech (still valid, devInfo< isCanceledCache: False, isValidCallback: True, isValidCallbackDevInfo: isLast: True, previouslyHad: True, isAncestorOfCurrentFocus: False, is foreground obj False, isMenuItemOfCurrentFocus: False >), '1234  ', IndexCommand(984)], [EndUtteranceCommand()]]
DEBUG - speech.manager.SpeechManager._queueSpeechSequence (18:07:20.029) - MainThread (18684):
SpeechManager- Current priority: 0, queLen: 0
DEBUG - speech.manager.SpeechManager._getMostRecentlyCancelledUtterance (18:07:20.029) - MainThread (18684):
SpeechManager- Length of _cancelCommandsForUtteranceBeingSpokenBySynth: 0 Length of _indexesSpeaking: 0 
DEBUG - speech.manager.SpeechManager._doRemoveCancelledSpeechCommands (18:07:20.029) - MainThread (18684):
SpeechManager- Last index: None
DEBUG - speech.manager.SpeechManager.speak (18:07:20.029) - MainThread (18684):
SpeechManager- Will interrupt: False Will push: True | _indexesSpeaking: [] | _curPriQueue valid: False | _shouldPushWhenDoneSpeaking: False | _cancelledLastSpeechWithSynth False
DEBUG - speech.manager.SpeechManager.speak (18:07:20.029) - MainThread (18684):
SpeechManager- Pushing next speech
DEBUG - speech.manager.SpeechManager._pushNextSpeech (18:07:20.029) - MainThread (18684):
SpeechManager- pushNextSpeech - doneSpeaking: True
DEBUG - speech.manager.SpeechManager._checkForCancellations (18:07:20.029) - MainThread (18684):
SpeechManager- Speaking utterance with cancellable item, index: 984
DEBUG - speech.manager.SpeechManager._pushNextSpeech (18:07:20.029) - MainThread (18684):
SpeechManager- Synth Gets: ['Eingabefeld  ', '1234  ', IndexCommand(984)]
DEBUG - speech.manager.SpeechManager._onSynthIndexReached (18:07:20.844) - synthDrivers._espeak.BgThread (22084):
SpeechManager- synthReachedIndex: 984, synth: SynthDriver('espeak')
DEBUG - speech.manager.SpeechManager._onSynthDoneSpeaking (18:07:20.844) - synthDrivers._espeak.BgThread (22084):
SpeechManager- synthDoneSpeaking synth:SynthDriver('espeak')
DEBUG - speech.manager.SpeechManager._handleIndex (18:07:20.859) - MainThread (18684):
SpeechManager- Handle index: 984
DEBUG - speech.manager.SpeechManager._removeCompletedFromQueue (18:07:20.859) - MainThread (18684):
SpeechManager- Removing: ['Eingabefeld  ', CancellableSpeech (still valid, devInfo< isCanceledCache: False, isValidCallback: True, isValidCallbackDevInfo: isLast: True, previouslyHad: True, isAncestorOfCurrentFocus: False, is foreground obj False, isMenuItemOfCurrentFocus: False >), '1234  ', IndexCommand(984)]
DEBUG - speech.manager.SpeechManager._removeCompletedFromQueue (18:07:20.859) - MainThread (18684):
SpeechManager- Item is in _cancelCommandsForUtteranceBeingSpokenBySynth: True
DEBUG - speech.manager.SpeechManager._getMostRecentlyCancelledUtterance (18:07:20.859) - MainThread (18684):
SpeechManager- Length of _cancelCommandsForUtteranceBeingSpokenBySynth: 0 Length of _indexesSpeaking: 0 
DEBUG - speech.manager.SpeechManager._doRemoveCancelledSpeechCommands (18:07:20.859) - MainThread (18684):
SpeechManager- Last index: None
DEBUG - speech.manager.SpeechManager._pushNextSpeech (18:07:20.859) - MainThread (18684):
SpeechManager- pushNextSpeech - doneSpeaking: False
DEBUG - speech.manager.SpeechManager._pushNextSpeech (18:07:20.859) - MainThread (18684):
SpeechManager- No more speech
DEBUG - speech.manager.SpeechManager._handleDoneSpeaking (18:07:20.859) - MainThread (18684):
SpeechManager- Synth done speaking, should push: False
IO - inputCore.InputManager.executeGesture (18:07:21.240) - winInputHook (23360):
Input: kb(laptop):backspace
DEBUG - speech.manager.SpeechManager.cancel (18:07:21.240) - MainThread (18684):
SpeechManager- Cancel
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.257) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1059, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.257) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_VALUECHANGE, window 329060 (EXCEL7), objectID 1060, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.257) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1061, childID 0, process 26960 (excel), thread 12144
DEBUG - editableText.EditableText._hasCaretMoved (18:07:21.350) - MainThread (18684):
Caret didn't move before timeout. Elapsed: 0.108141 sec
IO - inputCore.InputManager.executeGesture (18:07:21.618) - winInputHook (23360):
Input: kb(laptop):backspace
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.632) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1062, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.633) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_VALUECHANGE, window 329060 (EXCEL7), objectID 1063, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.633) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1064, childID 0, process 26960 (excel), thread 12144
DEBUG - editableText.EditableText._hasCaretMoved (18:07:21.728) - MainThread (18684):
Caret didn't move before timeout. Elapsed: 0.110027 sec
IO - inputCore.InputManager.executeGesture (18:07:21.809) - winInputHook (23360):
Input: kb(laptop):backspace
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.826) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1065, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.826) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_VALUECHANGE, window 329060 (EXCEL7), objectID 1066, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.826) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1067, childID 0, process 26960 (excel), thread 12144
DEBUG - editableText.EditableText._hasCaretMoved (18:07:21.922) - MainThread (18684):
Caret didn't move before timeout. Elapsed: 0.103437 sec
IO - inputCore.InputManager.executeGesture (18:07:21.979) - winInputHook (23360):
Input: kb(laptop):backspace
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.994) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1068, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.994) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: EVENT_OBJECT_VALUECHANGE, window 329060 (EXCEL7), objectID 1069, childID 0, process 26960 (excel), thread 12144
DEBUG - IAccessibleHandler.internalWinEventHandler.winEventCallback (18:07:21.994) - MainThread (18684):
Dropping UIA proxied event for Excel7 window. WinEvent: IA2_EVENT_TEXT_CARET_MOVED, window 329060 (EXCEL7), objectID 1070, childID 0, process 26960 (excel), thread 12144
DEBUG - editableText.EditableText._hasCaretMoved (18:07:22.091) - MainThread (18684):
Caret didn't move before timeout. Elapsed: 0.111908 sec
Adriani90 commented 1 month ago

Even more confusing, it works properly when adding a equal sign before the numbers and pressing tab and shift+tab. After that the cell becomes a formula cell and it works as expected.

cc: @michaelDCurran I suspect NVDA assumes that numbers in cells always mean they are formula cells. but without the equal sign they are not, so probably there is another cell object type exposed by MS Excel when the cell contains numbers without the equal sign.

Very good catch Quentin, Strange issue anyway.