2014-07-19 109 views
1

在谷歌文檔的整個段落,該功能可將選定的文本爲黑色如何改變只有*選擇*文本爲大寫,而不是在其中選擇存在

function selectedFontColorBlack() { 
// DocumentApp.getUi().alert('selectedFontColorBlack'); 
    var sel = DocumentApp.getActiveDocument().getSelection(); 
    var elements = sel.getRangeElements(); 
    for (var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 

     // Only modify elements that can be edited as text; skip images and other non-text elements. 
     if(element.getElement().editAsText) { 
     var text = element.getElement().editAsText(); 

     // Bold the selected part of the element, or the full element if it's completely selected. 
     if (element.isPartial()) { 
     text.setForegroundColor(element.getStartOffset(), element.getEndOffsetInclusive(), "#000000"); 
     } else { 
     text.setForegroundColor("#000000"); 
     } 
    } 
    } 
} 

此功能改變全款在光標(或選擇)的存在是爲了大寫:

function uppercaseSelected() { 
// DocumentApp.getUi().alert('uppercaseSelected'); 
    var sel = DocumentApp.getActiveDocument().getSelection(); 
    var elements = sel.getRangeElements(); 
    for (var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 

     // Only modify elements that can be edited as text; skip images and other non-text elements. 
     if(element.getElement().editAsText) { 
     var text = element.getElement().editAsText(); 
     text.setText(text.getText().toUpperCase()); 
     } 
    } 
} 

我沒有看到任何相應setText功能上選擇的「抵消」的作品,一樣的setForegroundColor(Integer,Integer,String)。 (這兩個函數都在類Text中。)

如何將實際選定的文本更改爲大寫,而不是選擇存在的整個段落?

謝謝。

回答

1

嘗試使用setAttributes(startOffset, endOffsetInclusive, attributes)方法。退房the documentation [編輯:我不好,我不認爲會這樣做。我會看起來更長一點壽]
隱藏在@Mogsdad所指的帖子中的寶石是:var selectedText = elementText.substring(startOffset,endOffset+1);
在使用方法上稍微冗長一些:可以在諸如DocumentApp.getActiveDocument().getSelection().getSelectedElements()[i].getElement().editAsText().getText() 之類的對象上使用字符串方法substring,因此,從本質上講,抓住該子字符串,將其轉換爲大寫字母,刪除範圍爲(selectedElement.getstartOffset,selectedElement.endOffsetInclusive)的文本並插入粗體文本at selectedElement.getstartOffset

田田!檢查出來:

function uppercaseSelected() { 
    // Try to get the current selection in the document. If this fails (e.g., 
    // because nothing is selected), show an alert and exit the function. 
    var selection = DocumentApp.getActiveDocument().getSelection(); 
    if (!selection) { 
     DocumentApp.getUi().alert('Cannot find a selection in the document.'); 
     return; 
    } 

    var selectedElements = selection.getSelectedElements(); 
    for (var i = 0; i < selectedElements.length; ++i) { 
     var selectedElement = selectedElements[i]; 

     // Only modify elements that can be edited as text; skip images and other 
     // non-text elements. 
     var text = selectedElement.getElement().editAsText(); 

     // Change the background color of the selected part of the element, or the 
     // full element if it's completely selected. 
     if (selectedElement.isPartial()) { 
     var bitoftext = text.getText().substring(selectedElement.getStartOffset(), selectedElement.getEndOffsetInclusive() + 1); 
     text.deleteText(selectedElement.getStartOffset(), selectedElement.getEndOffsetInclusive()); 
     text.insertText(selectedElement.getStartOffset(), bitoftext.toUpperCase()); 
     } else { 
     text.setText(text.getText().toUpperCase()); 
     } 
    } 
} 
+0

這似乎是我需要一些其他的東西,雖然,這麼好的信息。 – aliteralmind

+0

我還沒弄明白!這是一個非常沙盒的API – danyamachine

+0

@aliteralmind:查看最新的編輯。 – danyamachine

2

Google App script Document App get selected lines or words?開始的代碼,並提出了大約一年前。如果它對你有幫助,我很高興。

「訣竅」是您需要刪除原始文本並插入轉換的文本。

此腳本生成一個菜單,其中包含UPPER,lower和Title Case選項。由於刪除/插入,處理多個段落需要特別注意。我已經把它留給你了!

function onOpen() { 
    DocumentApp.getUi().createMenu('Change Case') 
    .addItem("UPPER CASE", 'toUpperCase') 
    .addItem("lower case", 'toLowerCase') 
    .addItem("Title Case", 'toTitleCase') 
    .addToUi(); 
} 

function toUpperCase() { 
    _changeCase(_toUpperCase); 
} 

function toLowerCase() { 
    _changeCase(_toLowerCase); 
} 

function toTitleCase() { 
    _changeCase(_toTitleCase); 
} 

function _changeCase(newCase) { 
    var doc = DocumentApp.getActiveDocument(); 
    var selection = doc.getSelection(); 
    var ui = DocumentApp.getUi(); 
    var report = ""; // Assume success 

    if (!selection) { 
    report = "Select text to be modified."; 
    } 
    else { 
    var elements = selection.getSelectedElements(); 
    if (elements.length > 1) { 
     report = "Select text in one paragraph only."; 
    } 
    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 elementText = element.asText().getText();  // All text from element 
     // Is only part of the element selected? 
     if (elements[0].isPartial()) 
     var selectedText = elementText.substring(startOffset,endOffset+1); 
     else 
     selectedText = elementText; 

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

     // Convert case of selected text. 
     var convertedText = newCase(selectedText); 
     element.deleteText(startOffset, endOffset); 
     element.insertText(startOffset, convertedText); 
    } 
    } 
    if (report !== '') ui.alert(report); 
} 

function _toUpperCase(str) { 
    return str.toUpperCase(); 
} 

function _toLowerCase(str) { 
    return str.toLowerCase(); 
} 

// https://stackoverflow.com/a/196991/1677912 
function _toTitleCase(str) 
{ 
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
} 
+0

這已添加到[此要點](https://gist.github.com/mogsdad/6518632)。 – Mogsdad

+0

這確實是個訣竅。謝謝! – aliteralmind

相關問題