Cómo trabajar con sugerencias

Documentos de Google permite a los colaboradores hacer sugerencias que son las ediciones diferidas efectivamente estaban pendientes de aprobación.

Cuando uses documents.get para recuperar contenido de documentos, es posible que este incluya sugerencias. Para controlar la forma en que documents.get representa las sugerencias, usa la opcional SuggestionsViewMode parámetro. Las siguientes condiciones de filtro están disponibles con este parámetro:

  • Obtén contenido con SUGGESTIONS_INLINE, de modo que el texto esté pendiente de eliminación o inserción en el documento.
  • Obtén contenido como vista previa y acepta todas las sugerencias.
  • Obtén contenido como vista previa, sin sugerencias, con todas las sugerencias rechazadas.

Si no proporcionas SuggestionsViewMode, la API de Documentos de Google usa un valor predeterminado apropiado para los privilegios del usuario actual.

Sugerencias y índices

Una de las razones por las que SuggestionsViewMode es importante es que los índices de la puede variar en función de si hay sugerencias, como se muestra a continuación.

Contenido con sugerencias Contenido sin sugerencias
{
 "tabs": [
  {
   "documentTab": {
    "body": {
     "content": [
      {
       "startIndex": 1,
       "endIndex": 31,
       "paragraph": {
        "elements": [
         {
          "startIndex": 1,
          "endIndex": 31,
          "textRun": {
           "content": "Text preceding the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 31,
       "endIndex": 51,
       "paragraph": {
        "elements": [
         {
          "startIndex": 31,
          "endIndex": 50,
          "textRun": {
           "content": "Suggested insertion",
           "suggestedInsertionIds": [
            "suggest.vcti8ewm4mww"
           ],
           "textStyle": {}
          }
         },
         {
          "startIndex": 50,
          "endIndex": 51,
          "textRun": {
           "content": "\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 51,
       "endIndex": 81,
       "paragraph": {
        "elements": [
         {
          "startIndex": 51,
          "endIndex": 81,
          "textRun": {
           "content": "Text following the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

{
 "tabs": [
  {
   "documentTab": {
    "body": {
     "content": [
      {
       "startIndex": 1,
       "endIndex": 31,
       "paragraph": {
        "elements": [
         {
          "startIndex": 1,
          "endIndex": 31,
          "textRun": {
           "content": "Text preceding the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 31,
       "endIndex": 32,
       "paragraph": {
        "elements": [
         {
          "startIndex": 31,
          "endIndex": 32,
          "textRun": {
           "content": "\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 32,
       "endIndex": 62,
       "paragraph": {
        "elements": [
         {
          "startIndex": 32,
          "endIndex": 62,
          "textRun": {
           "content": "Text following the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

En la respuesta anterior, el párrafo que contiene la línea "Text next the sugerencia" muestra la diferencia cuando se usa SuggestionsViewMode. Con la valor establecido en SUGGESTIONS_INLINE, el startIndex de la ParagraphElement comienza en 51 y endIndex se detiene en 81. Sin sugerencias, el startIndex y endIndex varían de 32 a 62.

Obtén contenido sin sugerencias

En la siguiente muestra de código parcial, se muestra cómo obtener un documento como vista previa con Se rechazan todas las sugerencias (si las hay) estableciendo la SuggestionsViewMode. parámetro en PREVIEW_WITHOUT_SUGGESTIONS.

Java

final string SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS";
Document doc =
    service
        .documents()
        .get(DOCUMENT_ID)
        .setIncludeTabsContent(true)
        .setSuggestionsViewMode(SUGGEST_MODE)
        .execute();

Python

SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS"
result = (
  service.documents()
  .get(
      documentId=DOCUMENT_ID,
      includeTabsContent=True,
      suggestionsViewMode=SUGGEST_MODE,
  )
  .execute()
)

Omitir el parámetro SuggestionsViewMode equivale a proporcionar DEFAULT_FOR_CURRENT_ACCESS como el valor del parámetro

Sugerencias de estilo

Los documentos también pueden tener sugerencias de estilo. Estos son cambios sugeridos para el formato y la presentación, en lugar de realizar cambios en el contenido.

A diferencia de las inserciones o eliminaciones de texto, estas no compensan la índices, aunque pueden dividir un TextRun en un tamaño más pequeño solo agrega anotaciones sobre el cambio de estilo sugerido.

Una de esas anotaciones es la SuggestedTextStyle: que consta de 2 partes:

  • El elemento textStyle, que describe cómo se le da estilo al texto según el estilo sugerido. cambia, pero no dice qué cambió.

  • El textStyleSuggestionState, que indica cómo se altera la sugerencia los campos de textStyle.

Puedes ver esto en el siguiente extracto de la pestaña del documento, que incluye un cambio de estilo sugerido:

[01] "paragraph": {
[02]    "elements": [
[03]        {
[04]            "endIndex": 106,
[05]            "startIndex": 82,
[06]            "textRun": {
[07]                "content": "Some text that does not ",
[08]                "textStyle": {}
[09]            }
[10]        },
[11]        {
[12]            "endIndex": 115,
[13]            "startIndex": 106,
[14]            "textRun": {
[15]                "content": "initially",
[16]                "suggestedTextStyleChanges": {
[17]                    "suggest.xymysbs9zldp": {
[18]                        "textStyle": {
[19]                            "backgroundColor": {},
[20]                            "baselineOffset": "NONE",
[21]                            "bold": true,
[22]                            "fontSize": {
[23]                                "magnitude": 11,
[24]                                "unit": "PT"
[25]                            },
[26]                            "foregroundColor": {
[27]                                "color": {
[28]                                    "rgbColor": {}
[29]                                }
[30]                            },
[31]                            "italic": false,
[32]                            "smallCaps": false,
[33]                            "strikethrough": false,
[34]                            "underline": false
[35]                        },
[36]                        "textStyleSuggestionState": {
[37]                            "boldSuggested": true,
[38]                            "weightedFontFamilySuggested": true
[39]                        }
[40]                    }
[41]                },
[42]                "textStyle": {
[43]                    "italic": true
[44]                }
[45]            }
[46]        },
[47]        {
[48]            "endIndex": 143,
[49]            "startIndex": 115,
[50]            "textRun": {
[51]                "content": " contain any boldface text.\n",
[52]                "textStyle": {}
[53]            }
[54]        }
[55]    ],
[56]    "paragraphStyle": {
[57]        "direction": "LEFT_TO_RIGHT",
[58]        "namedStyleType": "NORMAL_TEXT"
[59]    }
[60] }

En el ejemplo anterior, el párrafo consta de 3 segmentos de texto, que comienzan en las líneas 6 14 y 50. Examina la ejecución de texto del medio:

  • Línea 16: Hay un objeto suggestedTextStyleChanges.
  • Línea 18: textStyle especifica varios formatos.
  • Línea 36: El textStyleSuggestionState indica que solo la parte en negrita de esta especificación fue la sugerencia.
  • Línea 42: El estilo en cursiva de este texto ejecutado es parte del documento actual. (y no se ven afectadas por la sugerencia).

Solo forman parte los componentes de diseño establecidos como true en textStyleSuggestionState de la sugerencia.