diff --git a/src/orca/scripts/apps/soffice/formatting.py b/src/orca/scripts/apps/soffice/formatting.py
index 933477c..6de360c 100644
--- a/src/orca/scripts/apps/soffice/formatting.py
+++ b/src/orca/scripts/apps/soffice/formatting.py
@@ -66,7 +66,7 @@ formatting = {
             # We treat spreadsheet cells differently from other table cells in
             # whereAmI.
             #
-            'basicWhereAmI': 'roleName + column + columnHeader + row + rowHeader + (textContent or spreadSheetCell) + anyTextSelection'
+            'basicWhereAmI': 'roleName + column + columnHeader + row + rowHeader + (textContent or spreadSheetCell) + anyTextSelection + tooLong'
             },
     },
     'braille': {
@@ -85,7 +85,7 @@ formatting = {
 if orca.settings.useExperimentalSpeechProsody:
     print "Adding pauses to soffice speech formatting strings."
     formatting['speech']['ROLE_SPREADSHEET_CELL']['basicWhereAmI'] = \
-        'roleName + pause + column + pause + columnHeader + pause + row + pause + rowHeader + pause + (textContent or spreadSheetCell) + pause + anyTextSelection + pause'
+        'roleName + pause + column + pause + columnHeader + pause + row + pause + rowHeader + pause + (textContent or spreadSheetCell) + pause + anyTextSelection + pause + tooLong + pause'
     formatting['speech'][pyatspi.ROLE_TABLE_CELL]['focused'] = \
         '((tableCell2ChildLabel + tableCell2ChildToggle) or cellCheckedState) + pause + (expandableState and (expandableState + pause + numberOfChildren + pause))'
     formatting['speech'][pyatspi.ROLE_TABLE_CELL]['unfocused'] = \
diff --git a/src/orca/scripts/apps/soffice/speech_generator.py b/src/orca/scripts/apps/soffice/speech_generator.py
index 5548071..a31ad80 100644
--- a/src/orca/scripts/apps/soffice/speech_generator.py
+++ b/src/orca/scripts/apps/soffice/speech_generator.py
@@ -308,6 +308,38 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                         result.append(text)
         return result
 
+    def _generateTooLong(self, obj, **args):
+        """If there is text in this spread sheet cell, compare the size of
+        the text within the table cell with the size of the actual table
+        cell and report back to the user if it is larger.
+
+        Returns an indication of how many characters are greater than the size
+        of the spread sheet cell, or None if the message fits.
+        """
+        tooLong = []
+        try:
+            text = obj.queryText()
+            objectText = self._script.getText(obj, 0, -1).decode("UTF-8")
+            extents = obj.queryComponent().getExtents(pyatspi.DESKTOP_COORDS)
+        except NotImplementedError:
+            pass
+        else:
+            tooLongCount = 0
+            for i in range(0, len(objectText)):
+                [x, y, width, height] = text.getRangeExtents(i, i + 1, 0)
+                if x < extents.x:
+                    tooLongCount += 1
+                elif (x + width) > extents.x + extents.width:
+                    tooLongCount += len(objectText) - i
+                    break
+            if tooLongCount > 0:
+                # Translators: people can enter a string of text that is
+                # too wide for a spreadsheet cell.  This string will be
+                # spoken if they do so.
+                #
+                tooLong = [_("%d characters too long") % tooLongCount]
+        return tooLong
+
     def _generateSpreadSheetCell(self, obj, **args):
         result = []
         if self._script.inputLineForCell == None:
@@ -341,6 +373,10 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                     if char.isdigit():
                         result.append(name)
                         break
+
+        result.extend(self._generatePause(obj, **args))
+        result.extend(self._generateTooLong(obj, **args))
+
         return result
 
     def _generateRealTableCell(self, obj, **args):
