从Google Doc交互式更改为Google Spreadsheet复选框

时间:2018-07-11 07:41:19

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

我在我的项目中有另一篇文章(容器绑定脚本),但是这一次,当我修改Google Doc表部分时(当我在J列中打勾时),我尝试用另一种方式来修改Google表格,因为每一行都对应一个Google Doc项目。这是列J;我设置了一个触发器以在同一窗口中查看Google Doc,并且可以在其中进行修改:当我关闭Google Doc时,它并不会立即修改Google表格的行。这是修改线的那一刻,所以问题是它有一个滴答声的延迟。要查看它:

1)登录google make copy工具->脚本编辑器,在编辑时从电子表格中设置trigget view_doc_and_edit-> >>>

2)现在,如果您在Colum J中单击某个文档,您将看到与之对应的Google文档,我们可以对其进行修改

3)关闭时,我们在表中没有任何变化,如果再次单击同一位置(行),它将更改该行。

我知道对于Google Doc onEdit不存在,因此我尝试通过这种方式来尝试修改任何想法以同时具有交互式工具

这是我的项目
https://docs.google.com/spreadsheets/d/1k_kj98U__0Bk44gh0qRFpaVx0ru3sN1pSPGiMQwimxo/edit?usp=sharing

var TITLE = 'Show Google Doc';
var SPREADSHEET_ID = "1k_kj98U__0Bk44gh0qRFpaVx0ru3sN1pSPGiMQwimxo"; // = assign your spreadsheet id to this variable


var column_name_project ;
var column_code_project ;
var column_chef_project;
var column_service ;
var column_other_services ;
var column_type_of_project ;
var column_perimeter ; 
var column_date_project ;

var COLUMN_URL ;



/** will return the number of the column correspondant **/
function find_columns_in_projet(){
  var tss = SpreadsheetApp.openById(SPREADSHEET_ID);
  var sheet = tss.getSheets()[0];
  var lastColumn = sheet.getLastColumn();
  var data = sheet.getRange(1,1,1,lastColumn).getValues()[0]; 

  for(var n=0;n<data.length;n++){ 

    if(data[n].toString().indexOf('Name project') > -1)
      column_name_project = n+1;


    else  if(data[n].toString().indexOf('Code') > -1)
      column_code_project = n + 1;

    else if(data[n].toString().indexOf('Chef') > -1)
      column_chef_project= n + 1;

    else  if(data[n].toString().indexOf('Service') > -1)
      column_service = n +1 ;

    else if(data[n].toString().indexOf('Other services') > -1)
      column_other_services = n + 1;

    else if(data[n].toString().indexOf('Type of the project') > -1)
      column_type_of_project = n + 1;

    else if(data[n].toString().indexOf('Perimeter') > -1)
      column_perimeter = n + 1;

    else if(data[n].toString().indexOf('Date') > -1)
      column_date_project = n + 1;

    else if(data[n].toString().indexOf('URL') > -1)
      COLUMN_URL = n +1  ;
  }
}

/**  pour visualiser le document sur la meme page **/
function view_doc_and_edit(event) {

  find_columns_in_projet();
  Logger.log("!! La colonne URL est: !!" + COLUMN_URL );
  if( ( event.range.getSheet().getName() === "Sheet1" ) &&   ( event.range.getColumnIndex() == COLUMN_URL +1 ) ) {
    if( event.value === "TRUE" ) {
      try {
        var URL = event.range.offset(0,-1,1,1).getValue();
        Logger.log('The URL is : ' + URL );
        var google_doc = DocumentApp.openByUrl(URL) ;
        var body = google_doc.getBody();
        Logger.log('The body is ' + body );


        // Add this line
        var ui = HtmlService.createTemplateFromFile('ModeLessDialog');
        ui.body = URL; // Pass url to template
        ui = ui.evaluate().setWidth(1000).setHeight(500);
        SpreadsheetApp.getUi().showModalDialog(ui, TITLE);
        var insertion_position = event.range.getRow()  ;
        var tss_bis = SpreadsheetApp.openById(SPREADSHEET_ID);
        var sheet_bis = tss_bis.getSheets()[0];
        var numRows_bis = sheet_bis.getLastRow();
        var lastColumn_bis = sheet_bis.getLastColumn();

        //from the second line car the first line we have the headers
        var data_sheet = sheet_bis.getRange(1,1,numRows_bis,lastColumn_bis).getDisplayValues();
        if(body)
        {
          var ok = 0;                                    //pour l'instant il n'y a pas de tableau trouvé (avec 8 lignes) qui nous interesse pour mettre à jour dans la feuille de calcul
          var numChildren=body.getNumChildren();
          var compteur=0;
          //tant qu'on n'a pas du tableau on va parcourir (car on n'est pas sur d'avoir le 4 comme enfant (Numero_Enfant_Tableau_Template) car l'utilisateur pourra modifier/insérer un prargraphe une image etc.
          while(ok ==0 && compteur<numChildren)
          {
            var child=body.getChild(compteur);
            /** ============On est concerné par le premier tableau seulement qui a au plus 8 lignes d'information ================**/
            Logger.log('Le type dans la boucle  ' + child.getType());

            //on a trouvé un tableau qui nous interesse et qui a au plus 8 lignes d'information **/
            if(child.getType()==DocumentApp.ElementType.TABLE && child.asTable().getNumRows() >= 8)
            {
              //on a trouve notre premier tableau la variable ok = 1
              ok=1;   

              /**  Le nombre de lignes dans le premier tableau avec au plus 8 lignes qui nous interessent **/
              var numrows = child.asTable().getNumRows();
              Logger.log('Le nombre de lignes dans notre Google Doc  ' + numrows);

              /** on va parcourir notre tableau pour récuperer les champs qui nous interessent  **/ 

              var k = 1;     //on sait que c'est l'information à droite qui nous interessent on va éviter une boucle inutile
              var celltxt,trange;


              /** On va mettre la valeur du celltxt dans le spreadsheet et on va ajuster automatiquement la colonne avec la méthode autoResizeColumn **/
              celltxt=child.asTable().getCell(0, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_name_project); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(1, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_code_project); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(2, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_chef_project); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(3, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_service); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(4, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_other_services); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(5, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_type_of_project); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(6, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_perimeter); //l'emplacement correspondant
              trange.setValue(celltxt);

              celltxt=child.asTable().getCell(7, k).editAsText().getText();
              Logger.log('La valeur (à droite) dans le tableau  ' + celltxt);
              trange = sheet_bis.getRange(insertion_position, column_date_project); //l'emplacement correspondant
              trange.setValue(celltxt);
            }
            compteur++;       /** on va incrementer le compteur jusqu'à on trouve le tableau qui nous interessent **/
          }
        }
        event.range.setValue("FALSE");
      }
      catch(err) {
        Logger.log(err);
      }
    }
  }
  google_doc.saveAndClose();
}


0 个答案:

没有答案