2015-09-19 25 views
1

我正在嘗試在Google文檔中查找文本,並用下標符號替換 - 用a3替換「a3」,但現在格式化爲3作爲下標。如何使用findText()更改多個事件的谷歌文檔格式?

基於答案here 我寫了一些代碼,是工作,但只替換任何出現的第一個實例(有些是重複的)。

我寫了下面:

for (var k=0; k<subscriptsReplace.length; k++) { 
     subscript = ' a'+subscriptsReplace[k]; 
     find = ' a'+subscriptsReplace[k]+' '; 
      Logger.log(find) 
    var element = body.findText(find); 
    if(element){ // if found a match 
    var start = element.getStartOffset(); 
    var text = element.getElement().asText(); 
    text.replaceText(find, subscript); 
    text.setTextAlignment(start+2, start+2, DocumentApp.TextAlignment.SUBSCRIPT); 
    Logger.log("found one"); 
} // else do nothing 
} 

注意subscriptsReplace是包含整個文件的標所有的數字數組。

我不明白爲什麼它沒有得到重複,通過查看日誌,我知道它沒有在重複中運行條件 - 所以它不會重新替換它已經替換的相同下標。

有人可以看到發生了什麼? 謝謝你!

+0

@Serge insas我基於你的回答(參見問題鏈接),因爲你寫了「如果你有多個,那麼你應該迭代整個文檔內容找到每個或他們,並全部替換它們。「 「整個文檔」是什麼意思?這是我的問題嗎?我會怎麼做?謝謝! – aShumays

回答

1

最後的問題是使用replaceText()在整個文檔,併爲此更換了所有的文本出現次數,在第一次迭代之後無法找到並替換格式。

下面是替換所有出現的代碼:

for (var k=0; k<subscriptsReplace.length; k++) { 
     find = 'a'+subscriptsReplace[k]+'_'; 
     var element = body.findText(find); 
    if(element){ // if found a match 
     var start = element.getStartOffset(); 
     var text = element.getElement().asText(); 
     text.setTextAlignment(start+1, start+1, DocumentApp.TextAlignment.SUBSCRIPT); 
     text.deleteText(start+2, start+2); 
    } // else do nothing 
} 

,你會看到,而不是更換,我加了一個特殊字符「_」作爲標記找到,然後用deleteText()擺脫當我重新格式化爲下標時,它們每次只有1個

0

您可以在整個身體與此取代一切:

function testReplace() { 
    var docBody = DocumentApp.getActiveDocument().getBody(); 
    docBody.replaceText(searchPattern, replacement); 
}; 

Google Documentation - Replace Text

+0

感謝您的回覆。不幸的是,這是行不通的,因爲替換隻是一個字符串,我想改變的是格式。該字符串不需要更改。或者我誤解了你的建議? – aShumays

+0

好吧,我可能誤解了你需要的東西。 –

+0

是的,但是你的迴應實際上讓我以另一種方式思考它,幫助我找到自己的問題:) – aShumays

相關問題