首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个用户一个电子表格

每个用户一个电子表格
EN

Stack Overflow用户
提问于 2020-11-20 08:24:12
回答 1查看 70关注 0票数 0

我在GAS中有一个代码,它与后台的电子表格一起工作,并且可以同时用于单一用途。问题是,我想在代码的开头创建一个电子表格的副本,以便与每个进入web应用程序的用户进行交互。我尝试了两种可能性:

  • 在main.js开始时创建重复,以便被识别为代码中每个函数的全局变量,但是当我与网页上的任何元素交互时,代码会创建重复文件,因为Javascript读取代码并进行每次交互。
  • 在DoGet函数中创建重复,在最后创建一个链接到Id或新文件的变量,但其他函数不像全局变量那样识别该变量,甚至在main.js开始时声明该变量

代码

代码语言:javascript
运行
复制
var x;
if(x == null){
    var myArray  = crearnuevoarchivo(x);
    x = myArray[0];
    var database = myArray[1];
}     

const sheetConfiguracion = database.getSheetByName("Configuracion");
var lastRowProgramas = lastRowForColumn(sheetConfiguracion, 18);
var lastRowMandos = lastRowForColumn(sheetConfiguracion, 12);
const sheetTipos = database.getSheetByName("Tipos");
var lastRowTipos = sheetTipos.getLastRow();
const sheetSolicitud = database.getSheetByName("Solicitud");
const registro_peticiones = SpreadsheetApp.openById('xxxxxxxxxxxxxx');  
const sheetRegistro = registro_peticiones.getSheetByName("Registro");
const sheetHerramientas = database.getSheetByName("Herramientas");
var lastRowHerramientas = lastRowForColumn(sheetHerramientas, 1);
const sheetSolicitudFOD = database.getSheetByName("Solicitud_FOD");
const sheetfotosID = database.getSheetByName("FotosID"); 


function crearnuevoarchivo(x){
  if(x == null){
   const database2 = SpreadsheetApp.openById('xxxxxxxxxxxxxx');
  var hoyarchivo = new Date();
  var mesarchivo = hoyarchivo.getMonth() + 1;
  var fechaarchivo = mesarchivo+"/"+hoyarchivo.getFullYear();
  const databaseID = DriveApp.getFileById('xxxxxxxxxx').makeCopy('database '+fechaarchivo, DriveApp.getFolderById('xxxxxxxxxxxxx')).getId(); 
  var database = SpreadsheetApp.openById(databaseID);
  x = 1;
  var myArray = new Array(2);
      myArray[0] = x;
      myArray[1] = database;
  return myArray
  }
}
  
var rutaWeb = ScriptApp.getService().getUrl();

function doGet(e) {
if(e.parameter.p){
var page = e.parameter.p;
        if(page == "noFOD"){  
           var hojas = database.getSheets();
           var nuevaSheet = hojas.pop();
           var valor = nuevaSheet.getRange(2, 14).getValue();
           return HtmlService.createTemplateFromFile(page).evaluate();
        }
        else{
        if(page == "catalogo"){
               var hojas = database.getSheets();
               var nuevaSheet = hojas.pop();
               nuevaSheet.getRange(3, 14).setValue(1);
               var valor = nuevaSheet.getRange(3, 14).getValue();
               return HtmlService.createTemplateFromFile(page).evaluate();
            }
        if(page == "index"){
                    var hojas = database.getSheets();
                    var nuevaSheet = hojas.pop();
                    var valor = nuevaSheet.getRange(5, 14).getValue();
                    var r = 5;
                    borrar_registro_noFOD();
                    borrar_registro_FOD()
                    return HtmlService.createTemplateFromFile(page).evaluate();
                    }
        if(page == "FOD"){  
                        var hojas = database.getSheets();
                        var nuevaSheet = hojas.pop();
                        var valor = nuevaSheet.getRange(4, 14).getValue();
                        var r = 4;
                        return HtmlService.createTemplateFromFile(page).evaluate();
                        }
        if(page == "catalogoFOD"){ 
                        var hojas = database.getSheets();
                        var nuevaSheet = hojas.pop();
                        var r = 6;
                        nuevaSheet.getRange(6, 14).setValue(r)
                        return HtmlService.createTemplateFromFile(page).evaluate();
                        }
        }
  }else{
    var out = new Array()
    
    var sheets = database.getSheets();
    for (var i=12 ; i < sheets.length ; i++){ 
    var sheet= database.getSheetByName(sheets[i].getName());
    database.deleteSheet(sheet);
    }
    const sheetTipos = database.getSheetByName("Tipos");
    sheetTipos.copyTo(database);
    var hojas = database.getSheets();
    var nuevaSheet = hojas.pop();
    nuevaSheet.getRange(2, 14).setValue(0);
    nuevaSheet.getRange(3, 14).setValue(0);
    nuevaSheet.getRange(4, 14).setValue(0);
    nuevaSheet.getRange(5, 14).setValue(0);
    nuevaSheet.getRange(1, 14, 7, 1).clearContent();
    nuevaSheet.getRange(2, 14, 6, 1).setValue(0);
    nuevaSheet.getRange(1, 15, 100, 7).clearContent();
    borrar_registro_noFOD(database);
    borrar_registro_FOD(database)
    var x = 1;
    var page = "index";
    }
  return HtmlService.createTemplateFromFile(page).evaluate();
}

从Index.html传递的参数示例

代码语言:javascript
运行
复制
/* <a href="<?!= rutaWeb + '?p=noFOD' ?>"  */
EN

回答 1

Stack Overflow用户

发布于 2020-12-01 09:05:45

Apps脚本中的全局变量与其他编程语言中的全局变量不同。

存储全局变量的一种方法是在Apps脚本中使用PropertiesService类,并使用:

  • setProperty(key, value) -用于存储键值对;
  • getProperty(key) -用于检索与键关联的值。

参考文献

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64926070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档