Ovewrite table Google Script interactive Google Sh

2020-08-01 08:51发布

问题:

This is my final project in view mode :

https://drive.google.com/open?id=1gOOb3hND3q2v0vTy8SfPVHFiCnTkJPR5

each row corresponds to a Google Doc project so when I modify in the row it will modify the corresponding Doc and when I click to see the document in the same window when I modify if then click the submit button I will change the row so I have an interactivity 100% with only the trigger onEdit(e) which will call function Edit(e) and openDialog(e).

The problem is that it can overwrite the Google Doc file as in the image. The problem comes from function

onEdit(e){
  Edit(e);
  openDialog(e); // tick to see the project in the same window and modify it transfer to the row 
}

if I put openDialog(e); in comment if for instance I delete a text field in the row it will modify it correctly and with the openDialog(e) it will overwrite it. I've tried to put the openDialog code into the Edit(e) code as in the New.gs file but it's unsuccesful and close the doc https://script.google.com/d/1bV_eJONvUAbHyO6OB04atfm_sb5ZO8LWNoQ23fxf0lFnRzHRSwW7hsQc/edit?usp=sharing Do you have an idea to solve it? Thank you very much :) Separately they function very well. Together no it can overwrte the file so I don't know I need to close the Google Doc at very time because I open it 2 times?

It's the column J; I set a trigger to view the Google Doc in the same window and I can modify inside submit button and will change the row (this is the openDialog corresponding part) Edit : sorry this is the code

var TITLE = 'Show Google Doc';
var SPREADSHEET_ID = "17ssKkCAoPUbqtT2CACamMQGyXSTkIANnK5CjbbZ1LZg"; // = 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 ;
var COLUMN_VIEW_Google_Doc;


/** will return the number of the column correspondant **/
function find_columns_in_projet(){
 //search the columns
}

function onEdit(e){
  Edit(e);
 // openDialog(e);
}


function Edit(e) { 
  find_columns_in_projet();

  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();
  //Access the range with your parameter e.
  var range = e.range;
  
  var row = range.getRow();
  var column = range.getColumn();
  if( e.range.getColumnIndex() != COLUMN_URL + 1 ) {
    var URL = data_sheet[row-1][COLUMN_URL-1];
    Logger.log('Le URL est bien : ' , URL);
    
    var body = DocumentApp.openByUrl(URL).getBody();
    Logger.log('The body is ' + body );
    if(body)
    {... code to write the information from the spreadsheet to the Google Doc 
   }   
}
}

/** every row in the current Sheet corresponds to a Google Doc Document   **/
/**  to see the Google Doc in the same page  click in colum J and be able to modify the Google Doc 8 rows table inside
By clicking the button Submit it will transfer the information with what you have changed to the row of the corresponding project int the Sheet  **/

function openDialog(e) {
  
  /**  columns in the Spreadsheet that are lines in the Google Doc table  **/
/**  find_columns_in_projet();
  
  /** the good Sheet  **/
  if( ( e.range.getSheet().getName() === "Sheet1" ) &&   ( e.range.getColumnIndex() == COLUMN_VIEW_Google_Doc ) ) {
    if( e.value === "TRUE" ) {
      try {
        //Get Google Doc body
        /**  the URL that is in the column I  **/
        
        var URL = e.range.offset(0,-1,1,1).getValue();
        e.range.setValue("FALSE");
        
        
        // Add this line
        var ui = HtmlService.createTemplateFromFile('ModeLessDialog');
        ui.body = URL;                                                                         // Pass url to template
        ui.insert = e.range.getRow() ;
        ui = ui.evaluate().setWidth(1000).setHeight(500);
        SpreadsheetApp.getUi().showModalDialog(ui, 'Show Google Doc');
      }
      catch(err) {
        Logger.log(err);
      }
    }
  }
}


function submitDoc(url,insert) {
  /** the Spreadsheet need for getRange insert position **/
  var tss_bis = SpreadsheetApp.getActiveSpreadsheet();
  var sheet_bis = tss_bis.getSheets()[0];
  find_columns_in_projet();
  try {
    Logger.log(url);
    var google_doc = DocumentApp.openByUrl(url) ;
    var body = google_doc.getBody();
    if(body) {
code to write the information from the Google Doc into the Spreadsheet by button submit
      }
      Logger.log(body);
    }
    return true;
  }
  catch(err) {
    Logger.log(err);
  }
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<iframe id="srcFrame" src="<?= body ?>" name="<?= insert ?>" width="1000" height="400"></iframe>
<input type="button" value="Sumit changes to the Spreadsheet" onclick="submitDoc()">
<script>
function submitDoc() {
var url = document.getElementById("srcFrame").src;
var insert = document.getElementById("srcFrame").name;
google.script.run.submitDoc(url,insert);
google.script.host.close();
}
</script>
</body>
</html>