【问题标题】:Google Apps Script add paragraph to Google Document in specific location based on dateGoogle Apps 脚本根据日期将段落添加到特定位置的 Google 文档
【发布时间】:2022-10-02 00:06:11
【问题描述】:

我正在使用 Google 表单创建一种简单的方法,可以将故事和照片添加到 Google 文档中,以形成集体历史/期刊。

我的代码从链接的 Google 表格中获取 Google 表单响应,然后将 Google 表单响应附加到 Google 文档,但我想添加按在 Google 表单中提交的日期排序的响应。这样,在 2020 年 1 月 1 日发生的提交的事件将在 2020 年 1 月 2 日等发生的事件之前列出。

我该怎么做呢?

function autoFillGoogleDocFromForm(e) {
  var timestamp = e.values[0];
  var photo = e.values[1];
  var date = e.values[2];
  var event = e.values[3];
  var name = e.values[4];
  var photoCap = e.values[6];
  var photoDesc = e.values[7];

  var fileURL = photo;
  var fileID = fileURL.substr(fileURL.search(\"=\")+1);  //strip off text before id= in the URL
  var image = DriveApp.getFileById(fileID).getBlob();  

  var doc = DocumentApp.openById(\"1DrE4ElgaP08uOTH52E2GjgmrJmoL2VZsZ1YlNeV0_20\")

  var body = doc.getBody();
  body.appendPageBreak();
  body.appendParagraph(date);
  body.appendParagraph(event);
  body.appendParagraph(name);
  body.appendImage(image);
  body.appendParagraph(photoCap);
  body.appendParagraph(photoDesc);
  
  

  doc.saveAndClose();
}

    标签: javascript google-apps-script google-docs google-forms


    【解决方案1】:

    这是一个如何根据日期插入段落的示例。我使用 Date 对象来比较日期,因此我将“2022 年 1 月 1 日”形式的文本字符串转换为 Date 对象。

    Doc 的格式必须在分页符之后直接包含日期字符串。

    function testAutoFillGoogleDocFromForm() {
      try {
        let row = { values: [ "time", "photo", "2/1/2022", "event", "name", "", "photoCap", "photoDesc" ]};
        autoFillGoogleDocFromForm(row);
        console.log("done");
        row = { values: [ "time", "photo", "1/1/2023", "event", "name", "", "photoCap", "photoDesc" ]};
        autoFillGoogleDocFromForm(row);
        console.log("done");
      }
      catch(err) {
        console.log(err)
      }
    }
    
    function autoFillGoogleDocFromForm(e) {
      try {
        let timestamp = e.values[0];
        let photo = e.values[1];
        let date = new Date(e.values[2]);
        let event = e.values[3];
        let name = e.values[4];
        let photoCap = e.values[6];
        let photoDesc = e.values[7];
    
        let doc = DocumentApp.getActiveDocument();
        let body = doc.getBody();
        let i = 0;
        while( i < body.getNumChildren() ) {
          let para = body.getChild(i);
          if( para.getType() === DocumentApp.ElementType.PARAGRAPH ) {
            let j = 0;
            console.log("numchild = "+body.getNumChildren());
            while( j < para.getNumChildren() ) {
              let child = para.getChild(j);
              if( child.getType() === DocumentApp.ElementType.PAGE_BREAK ) {
                // get next paragraph and check date
                if( (i+1) === body.getNumChildren() ) break; // in case there is a page break at the end of body
                para = body.getChild(i+1);
                let temp = new Date(para.asParagraph().getText());
                console.log(temp);
                if( temp > date ) {
                  body.insertPageBreak(i++);
                  body.insertParagraph(i++,date.toLocaleDateString());
                  body.insertParagraph(i++,event);
                  body.insertParagraph(i++,name);
                  body.insertParagraph(i++,photoCap);
                  body.insertParagraph(i++,photoDesc);
                  return;
                }
              }
              j++;
            }
          }
          i++;
        }
        // if the date is latest just append a new page
        body.appendPageBreak();
        body.appendParagraph(date.toLocaleDateString());
        body.appendParagraph(event);
        body.appendParagraph(name);
        //body.appendImage(image);
        body.appendParagraph(photoCap);
        body.appendParagraph(photoDesc);
      }
      catch(err) {
        console.log(err)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多