2012-06-26 2 views
2

body.replaceText ('TextA', 'TextB');를 호출하여 템플릿 문서 복사본의 자리 표시자를 텍스트로 대체하는 Google Apps 스크립트가 있습니다.지정한 위치에 이미지 삽입

이제 이미지가 포함되도록 이미지를 확장하고 싶습니다. 아무도이 일을하는 방법을 알고 있습니까?

는 안드레이에게,

편집을 주셔서 감사합니다 : 그냥 내 스크립트가 무엇을하는지는 명확하게 할 수 있습니다. 스프레드 시트에서 Google 양식을 만들었습니다. 양식 제출시 실행되는 스크립트를 작성하고 양식에 해당하는 시트를 탐색하고 처리되지 않은 행을 찾고 해당 셀에서 값을 가져 와서 Google 문서 사본에 넣습니다. Google 양식의 일부 필드는 '\ r \ r'이 나오는 여러 줄 텍스트 필드입니다.

여기 지금, 우아하지 않음으로써 함께 왔어요 해결하지만 그것은 지금까지 작동합니다

// replace <IMG src="URL"> with the image fetched from URL 
function processIMG_(Doc) { 

    var totalElements = Doc.getNumChildren(); 

    for(var j = 0; j < totalElements; ++j) { 

    var element = Doc.getChild(j); 
    var type = element.getType(); 

    if (type =='PARAGRAPH'){ 
     var par_text = element.getText(); 

     var start = par_text.search(new RegExp('<IMG')); 
     var end = par_text.search(new RegExp('>')); 
     if (start==-1) 
     continue; 

     // Retrieve an image from the web. 
     var url = getURL_(par_text.substring(start,end)); 
     if(url==null) 
     continue; 

     // Before image 
     var substr = par_text.substring(0,start); 
     var new_par = Doc.insertParagraph(++j, substr); 

     // Insert image 
     var resp = UrlFetchApp.fetch(url); 
     new_par.appendInlineImage(resp.getBlob()); 

     // After image 
     var substr = par_text.substring(end+1); 
     Doc.insertParagraph(++j, substr); 

     element.removeFromParent(); 
     j -= 2; // one - for latter increment; another one - for increment in for-loop 
     totalElements = Doc.getNumChildren();  
    }  
    } 
} 
+0

이 대체 기능을 사용하여 스크립트가 '\ r \ r'을 어떻게 추가합니까? 내가 놓친 것 같아요? –

답변

4

을 여기에 수행하는 코드의 조각 (약) 당신이 원하는.

(즉, 할 아마도 다른 방법이 있습니다 그것은 확실히 약간의 개선이 필요하지만 일반적인 생각이있다) 나는 장소를 표시하기 위해 문서에 '###'를 사용하기로 선택한

경우 이미지 이미지가 Google 드라이브 (또는 '일부'Google 드라이브)에 있어야합니다. 아래 코드는 내가 공유 한 문서와 공유 한 이미지를 사용하므로 시도해 볼 수 있습니다. 여기는 the link to the doc입니다. 이미지를 제거하고 테스트하기 전에 ###를 넣는 것을 잊지 마십시오 (누군가가 전에 코드를 실행 한 적이 있다면 ;-)

function analyze() { // just a name, I used it to analyse docs 
    var Doc = DocumentApp.openById('1INkRIviwdjMC-PVT9io5LpiiLW8VwwIfgbq2E4xvKEo'); 
    var image = DocsList.getFileById('0B3qSFd3iikE3cF8tSTI4bWxFMGM') 
    var totalElements = Doc.getNumChildren(); 
    var el=[] 
    for(var j = 0; j < totalElements; ++j) { 
     var element = Doc.getChild(j); 
     var type = element.getType(); 
Logger.log(j+" : "+type);// to see doc's content 
     if (type =='PARAGRAPH'){ 
     el[j]=element.getText() 
     if(el[j]=='###'){element.removeFromParent();// remove the ### 
     Doc.insertImage(j, image);// 'image' is the image file as blob 
     } 
     } 
    } 
} 

EDIT :이 스크립트가 ### 문자열을 작동하게하려면 은 그 단락에 만 혼자 있어야하며, 이전이나 이후에는 다른 문자가 없어야합니다. Enter 키를 누를 때마다 새 줄이 작성되므로 문서가 새 단락을 만듭니다.

+0

감사합니다. Serge! 그게 내가 필요한거야. 이제 "Test \ r \ r ### \ r \ rTest"와 같은 텍스트를 단락으로 분할하여 내 프로젝트에서 코드가 작동하도록했습니다. –

+0

로거를보고 주저하지 말고 –

+1

"Test \ r \ r ### \ r \ rTest"- 단락이 어떻게 구성되어 있는지, 따라서 el [j] == '###'은 작동하지 않습니다. 나는 이것을 계속 연구 중이다 ... –

관련 문제