将Google工作表值分配给对象

时间:2018-03-07 06:10:03

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

我很难将从Google表格导入的数据操作到对象中。每当我使用Logger.log(myObject)检查代码时,我得到一个返回值:

  

[18-03-06 21:52:55:530太平洋标准时间]主计划= [对象对象]

如何从Google表单导入,使其不显示为[object Object]?我希望能够操纵数据!

以下是代码示例:

// Object based schedule production
function createNewSchedule () {
  var requestSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Requests");
  var newScheduleSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NewSchedule");
  var lastColumn = requestSheet.getLastColumn(); //30 columns

  var requestData = availableDocsData();
  var availDocs;
  var counter = 0;
  var masterSchedule = {};

  //resetting the masterSchedule to temporary values.
  var resetMasterSchedule = {};
  var temp1 = newScheduleSheet.getRange(2, 1, 11, 1).getValues();
  temp1 = arrayDeconvert(temp1);
  var temp2 = newScheduleSheet.getRange(2, 2, 11, 1).getValues();
  temp2 = arrayDeconvert(temp2);
  var temp3 = newScheduleSheet.getRange(2, 3, 11, 1).getValues();
  temp3 = arrayDeconvert(temp3);
  var temp4 = newScheduleSheet.getRange(2, 4, 11, 1).getValues();
  temp4 = arrayDeconvert(temp4);
  var temp5 = newScheduleSheet.getRange(2, 5, 11, 1).getValues();
  temp5 = arrayDeconvert(temp5);
  resetMasterSchedule["temp1"] = temp1;
  resetMasterSchedule["temp2"] = temp2;
  resetMasterSchedule["temp3"] = temp3;
  resetMasterSchedule["temp4"] = temp4;
  resetMasterSchedule["temp5"] = temp5;
  masterSchedule = resetMasterSchedule;

  // Loop makes day by day schedule
  for (var i = 1; i <= lastColumn-1; i++) {

    Logger.log ('master schedule = ' + masterSchedule);

var currentDay = [];

//finding the previous day, prevDay, given i.
var prevKeyi = i - 1;
var prevKey = Object.keys(masterSchedule)[prevKeyi];
var prevDay = masterSchedule[prevKey];

// ... I can supply additional code if needed 

这是函数arrayDeconvert():

// convert Google Sheets format to regular javascript array format
function arrayDeconvert(array) {
  var newArray = [].concat.apply([], array);
  return newArray;
}

我的函数总是打破其他函数,包含(),它调用变量 prevDay ,这是存储在对象中的值, masterSchedule 。当它试图计算 prevDay 的长度时,它无法进行,因为它是UNDEFINED ......

// returns true if array contains object, starting at position x.
function contains(a, obj, x) {
  for (var i = x; i < a.length; i++) {
    if (a[i] === obj) {
      return true;
    }
  }
  return false;
}

由于

1 个答案:

答案 0 :(得分:0)

这个答案怎么样?

问题1:

我认为master schedule = [object Object]的原因是由于该对象试图用作字符串。如果您想查看该对象,请尝试以下操作。

Logger.log(masterSchedule)

Logger.log('master schedule = ' + JSON.stringify(masterSchedule))

问题2:

在您的脚本中,temp1temp5的5个属性已导入resetMasterSchedule。另一方面,在var lastColumn = requestSheet.getLastColumn(); //30 columns,您说lastColumn是30。

这意味着您的脚本会尝试从具有5个属性的对象中检索30个属性。这样,在检索到第5个属性后,将返回undefined

对于您的脚本,如果您想从masterSchedule检索所有属性,那么这个怎么样?

var len = Object.keys(masterSchedule).length;
for (var i = 0; i < len; i++) {
  var prevKey = Object.keys(masterSchedule)[i];
  var prevDay = masterSchedule[prevKey];
}

如果我误解了你的问题,我很抱歉。