0
votes

Obtenez le texte correct sélectionné par l'utilisateur dans le script Google Docs Apps

J'ai besoin du texte intégral d'une sélection effectuée par l'utilisateur dans Google Docs, qui peut s'étirer sur plusieurs lignes.

Ceci est différent de cette question: Obtenez du texte sélectionné par l'utilisateur Parce que dans cette question, la demande était d'obtenir le texte des mots ou des lignes individuels sélectionnés. Je dois être capable de gérer plusieurs lignes avec le bon blanc.

J'ai écrit le code ci-dessous, et cela passe presque le texte de deux lignes ensemble sans caractère nouveau (ou quoi que ce soit) séparant eux. Cela n'inclut pas non plus les onglets du texte d'origine. Je suppose qu'il y a d'autres limitations que je n'ai pas rencontrées! xxx

Disons que j'ai un document qui ressemble à cela avec tout le texte sélectionné par l'utilisateur (avec un onglet dans la deuxième ligne): xxx

mon script construira la chaîne, "Ligne 1Line 2". La chaîne que je voudrais, c'est une "ligne 1 \ nine 2" ou "ligne 1 \ rline 2".


2 commentaires

Pouvez-vous s'il vous plaît partager un exemple de ce que vous voulez et quelle est la production actuelle?


J'ai mis à jour la question avec un exemple!


3 Réponses :


0
votes

Cette fonction est issue d'une fonction que j'ai écrite au texte sélectionné à haute lumière. Je l'ai modifié pour ajouter le texte sélectionné dans le document afin qu'il puisse être affiché dans un format non HTML qui ne affichera pas l'espace blanc. Espérons que cela vous sera utile. XXX


1 commentaires

J'apprécie l'effort, mais aussi loin que je peux dire que cela ignore les pauses de la ligne, comme le mien fait! (Le vôtre gère les onglets que j'ai demandé à l'origine, mais je me suis trompé à propos de la mienne ne les manipulant pas.)



0
votes

J'ai réussi à copier le texte sélectionné (avec les pauses de ligne et les onglets) avec la modification suivante de votre code: xxx

sur la sélection des éléments que vous obtenez chacun des paragraphes que vous avez sélectionnés, Disons que 2 paragraphes et une intro au milieu. Ensuite, vous appendez chacun de ces éléments / paragraphes sous forme de nouveau paragraphe.

Vérifiez si cela fonctionne pour vous et laissez-moi savoir!


1 commentaires

Eh bien, vous avez essentiellement ajouté manuellement un «\ R» entre éléments en leur émettant avec l'appenda paragraphe. Je cherche à avoir une chaîne de texte avec lequel travailler, pas une sortie directe, mais que vous m'avez poussé à croire que j'étais impérié. Peut-être que j'ai juste besoin d'ajouter manuellement un '\ r' entre les éléments comme je construis la chaîne. J'avais présumé que les éléments n'étaient pas toujours de nouveaux paragraphes, mais ils sont peut-être? Jusqu'à présent, ajouter le retour de la voiture manuellement fonctionne pour moi, alors merci! Je viens d'ajouter ce qui suit à ma boucle pour la boucle: si (i + 1



0
votes

La réponse de Kessy m'a fait hypothétiquer que je suis impérié quels éléments sont, et qu'il peut être approprié d'ajouter manuellement un seuil de transport unique entre eux dans la construction d'une chaîne. Voici mon code d'origine avec cette légère modification.

Jusqu'à présent, cela fonctionne, mais si mon hypothèse sur les éléments est fausse, cela peut échouer avec le texte formaté de manière non testée. (Bien que si le texte soit formaté de manière beaucoup plus compliquée, il peut ne pas avoir de sens d'avoir une version de chaîne unique et unique de toute façon. EG Texte dans une table.) P>

function getSelectedText()
{
  var selection = DocumentApp.getActiveDocument().getSelection();
  if( !selection )
    return "";
  var selectedElements = selection.getRangeElements();
  var theText = "";

  for( var i=0; i < selectedElements.length; i++ )
  {
    var thisText = selectedElements[i].getElement().asText().getText();
    if( selectedElements[i].isPartial() )
      var thisText = thisText.substring( selectedElements[i].getStartOffset(), selectedElements[i].getEndOffsetInclusive() + 1)
    theText += thisText;
    //I'm assuming each element is separated by one carriage return.
    if( i+1 < selectedElements.length )
      theText += '\r';
  }
  return theText;
}


0 commentaires