我有大量的字串需要在 Google 檔案中替換。我運行腳本的性能受到了巨大的打擊,現在需要永遠運行。我正在研究如何優化。
body.replaceText("oldvalue1",newValue1)
body.replaceText("oldvalue2",newValue2)
body.replaceText("oldvalue3",newValue3)
..
..
..
有沒有更好的方法來使用谷歌腳本替換谷歌檔案中的文本?
uj5u.com熱心網友回復:
Array.forEach(obj => { body.replaceText(obj.old,obj.new)})
@kos 方式可能是更好的方式。
uj5u.com熱心網友回復:
正如@Kos在評論中提到的,最好的近似方法是使用 Google Docs API batchUpdates作為Google Apps Script 中的高級服務。
我給你留下了一個關于 Docs API 如何作為高級服務作業的例子。例如,我假設您有一個包含oldValueand的物件陣列newValue:
function batchUpdating(DocID = DocID) {
const replaceRules = [
{
toReplace: "oldValue1",
newValue: "newValue1"
},
...
]
const requestBuild = replaceRules.map(rule => {
var replaceAllTextRequest = Docs.newReplaceAllTextRequest()
replaceAllTextRequest.replaceText = rule.newValue
replaceAllTextRequest.containsText = Docs.newSubstringMatchCriteria()
replaceAllTextRequest.containsText.text = rule.toReplace
replaceAllTextRequest.containsText.matchCase = false
Logger.log(replaceAllTextRequest)
var request = Docs.newRequest()
request.replaceAllText = replaceAllTextRequest
return request
})
var batchUpdateRequest = Docs.newBatchUpdateDocumentRequest()
batchUpdateRequest.requests = requestBuild
var result = Docs.Documents.batchUpdate(batchUpdateRequest, DocID)
Logger.log(result)
}
Google Apps Script 可幫助我們處理授權流程,并為我們提供有關如何構建請求的提示。例如,Docs.newReplaceAllTextRequest(), 幫助我們構建對該服務的請求,提示我們它包含replaceText和containText。無論如何,我們也可以直接向請求提供物件:
const requestBuild = replaceRules.map(rule => {
return {
replaceAllText:
{
replaceText: rule.newValue,
containsText: { text: rule.oldValue, matchCase: false }
}
}
})
考慮到
每個請求在應用之前都經過驗證。如果任何請求無效,則整個請求都將失敗,并且不會應用任何內容。
如果您的腳本專案使用的是 2019 年 4 月 8 日或之后創建的默認 GCP 專案,則在您啟用高級服務并保存腳本專案后會自動啟用 API。如果您還沒有這樣做,您可能還會被要求同意 Google Cloud Platform 和 Google APIs 服務條款。
檔案:
- 替換所有文本請求
- 子串匹配條件
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/391006.html
