6

Google ドキュメントでマウスで単語または行を選択し、スクリプトでこれらの選択された単語または行を取得したいと考えています。

例:

  var doc = DocumentApp.getActiveDocument();
  var docText = doc.editAsText();
  var text = docText.getSelection();

試してみましたが、VBA のような選択アクセスの方法が見つかりませんでした。

4

5 に答える 5

10

昨日、カーソル位置と選択したテキストを操作する機能が追加され、Issue 2865: Get current user location & state information in Documentに対処しました。ブログ記事もご覧ください。

選択を操作するには、いくつかのトリックがあることがわかりました。ここにそれらを表示しようとしました - 他のものを見つけた場合はコメントを追加してください。喜んで更新します.

function onOpen() {
  DocumentApp.getUi().createMenu('Selection')
    .addItem("Report Selection", 'reportSelection' )
    .addToUi();
}

function reportSelection () {
  var doc = DocumentApp.getActiveDocument();
  var selection = doc.getSelection();
  var ui = DocumentApp.getUi();

  var report = "Your Selection: ";

  if (!selection) {
    report += " No current selection ";
  }
  else {
    var elements = selection.getSelectedElements();
    // Report # elements. For simplicity, assume elements are paragraphs
    report += " Paragraphs selected: " + elements.length + ". ";
    if (elements.length > 1) {
    }
    else {
      var element = elements[0].getElement();
      var startOffset = elements[0].getStartOffset();      // -1 if whole element
      var endOffset = elements[0].getEndOffsetInclusive(); // -1 if whole element
      var selectedText = element.asText().getText();       // All text from element
      // Is only part of the element selected?
      if (elements[0].isPartial())
        selectedText = selectedText.substring(startOffset,endOffset+1);

      // Google Doc UI "word selection" (double click)
      // selects trailing spaces - trim them
      selectedText = selectedText.trim();
      endOffset = startOffset + selectedText.length - 1;

      // Now ready to hand off to format, setLinkUrl, etc.

      report += " Selected text is: '" + selectedText + "', ";
      report += " and is " + (elements[0].isPartial() ? "part" : "all") + " of the paragraph."
    }
  }
  ui.alert( report );
}
于 2013-06-28T17:02:15.670 に答える
2

あなたは近くにいます。findText() メソッドが必要だと思います。

var text = docText.findText("some string of text in the document") // for example

私は VBA に詳しくありませんが、これはドキュメント内のテキストを選択するために機能します。

于 2013-05-20T02:01:37.880 に答える
0

ブライアンの答えに追加するために、強調表示された単語またはフレーズの配列を返すように個々の文字を変換するためにこれを書きました。

   function findHighlighted() {
    var results = [];
    var body = DocumentApp.getActiveDocument().getBody(),
            bodyTextElement = body.editAsText(),
            bodyString = bodyTextElement.getText(),
            char, len;
    for (char = 0, len = bodyString.length; char < len; char++) {
            if (bodyTextElement.getBackgroundColor(char) !== null)
                    results.push([char, bodyString.charAt(char)]);
    }
    return results;
}

function getWords() {
    var arr = findHighlighted();
    var wordList = [];
    var holding = [];
    var nextNum, sum;
    for (var i = 0; i < arr.length; i++) {
            if (arr[i + 1] === undefined) {
                    nextNum = 0;
            } else {
                    nextNum = arr[i + 1][0];
            }
            sum = (Number(arr[i][0]) + 1);
            if (nextNum === sum) {
                    holding.push(arr[i][1]);
            } else {
                    holding.push(arr[i][1]);
                    wordList.push(holding.join(""));
                    holding = [];
            }
    }
    Logger.log(wordList);
}
于 2017-01-01T08:43:14.763 に答える