获取Google表格脚本中的值时的最佳做法

时间:2016-12-13 05:06:09

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

我正在编写一个脚本来复制工作表并将一些数据粘贴到工作表中。我必须制作C. 500份的表格,这样我才能改进我的代码并学习一些东西。

下面是从我的工作表中的命名范围中提取数据的代码,然后所有这些数据都会在我的脚本中的其他地方使用。

我的问题是 - 是否有更好/更有效的方式获取所有数据并进行管理?所有列都是并排的,所以我可以只用一次调用工作表来获取单个变量中的所有信息,但是使用[0],[1]引用等在代码中进一步管理数组是很困难的。 p>

var getTeachersNameReq = ss.getRangeByName('ERB Generator!teachersNameReq').getValues().filter(String); //Logger.log(getTeachersNameReq);
var getTeachersEmailReq = ss.getRangeByName('ERB Generator!teachersEmailReq').getValues().filter(String); //Logger.log(getTeacherEmailReq);
var getTeachersNameOpt = ss.getRangeByName('ERB Generator!teachersNameOpt').getValues().filter(String); //Logger.log(getTeachersNameOpt);
var getTeachersEmailOpt = ss.getRangeByName('ERB Generator!teachersEmailOpt').getValues().filter(String); //Logger.log(getTeachersNameOpt);
var getSubjectGroup = ss.getRangeByName('ERB Generator!subjectGroup').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getSubjectGroup);  
var getSubjectCode = ss.getRangeByName('ERB Generator!subjectCode').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getSubjectCode);
var getSubjectName = ss.getRangeByName('ERB Generator!subjectName').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getSubjectName);
var getCoTeacher = ss.getRangeByName('ERB Generator!coTeacher').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getCoTeacher);  
var getNewFileNames = ss.getRangeByName('ERB Generator!ERBFileName').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getNewFileNames);  
var getERBexists =  ss.getRangeByName('ERB Generator!ERBExists').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getERBexists);
var getCanTeacherEdit =  ss.getRangeByName('ERB Generator!teacherCanEdit').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getCanTeacherEdit);
var getClass = ss.getRangeByName('ERB Generator!class').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getClass);
var getOBECExamSheet = ss.getRangeByName('ERB Generator!OBECExamSheet').getValues().slice(0, getTeachersNameReq.length); //Logger.log(getOBECExamSheet);
var getSemester = ss.getRangeByName('ERB Generator!semester').getValue(); //Logger.log(getSemester);
var getAcedimicYear = ss.getRangeByName('ERB Generator!acedimicYear').getValue(); //Logger.log(getAcedimicYear);  
var getNameListFileID = ss.getRangeByName('File Links Data!nameListFileID').getValues().toString(); //Logger.log(getNameListFileID); 

1 个答案:

答案 0 :(得分:0)

getValues()会降低您的脚本速度。

我通常只从表格中读取一次:

  1. 表格:准备单个列表中的所有数据
  2. 表格:将其加入单格
  3. 脚本:单元格的getValue()(获取字符串)
  4. 脚本:解析字符串
  5. 步骤1。准备单个列表中的所有数据

    有些数据只是一个值。我使用JSON解析它:

    • string - 用双引号括起来:"srtring"
    • 数字 - 保持原样:500

    如果我需要一个数组,我会用分号;加入它并加入双引号""

    • 数组:"one,two,three,4,5,6"

    第二步。将其加入单个单元格

    将其放入括号:[]并用逗号,除以:

    • ["srtring",500,"one,two,three,4,5,6"]

    步骤3。单元格的getValue()

    我通常使用相同的命名范围,因此我不需要更改代码:

    var strData = ss.getRangeByName('eval').getValue();
    

    步骤4。解析字符串

    要将数据作为数组获取,我使用此函数:

    var data = JSON.parse(strData);
    

    字符串和数字已准备好在脚本中使用,数组被拆分:

    var array = data[2].split(';');
    

    我还建议在文件打开时onOpen读取数据并使用properties service来保存变量。