L oop Google sheet - возвращает только последнюю строку - PullRequest
1 голос
/ 05 мая 2020

Кто-нибудь знает, почему, когда эта функция запускается, она экспортирует только последнюю строку массива каналов?

Это фрагмент, на котором я застрял, 'j' он повторяется нормально, но значение, которое я установил «messExSheet» всегда является последней строкой.

msgObj[curCol].push(curCel)
messString = JSON.stringify(msgObj);
messExSheet.getRange(j, 1).setValue(messString); 

Ищем первую строку и используем ее в качестве ключа объекта, как показано ниже

var Row_1 = ['r1-c1', 'r1-c2', 'r1-c3'];
var Row_2 = ['r2-c1', 'r2-c2', 'r2-c3'];
var Row_3 = ['r3-c1', 'r3-c2', 'r3-c3'];

//Out put
[{"r1-c1":["r2-c1"]}, {"r1-c2":["r2-c2"]}, {"r1-c3":["r2-c3"]}]
[{"r1-c1":["r3-c1"]}, {"r1-c2":["r3-c2"]}, {"r1-c3":["r3-c3"]}]

Полная функция ниже

----------

function messageToJSON(){

  var sheetName = 'sheet';
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);

  var rangeData = sheet.getDataRange();
  var lastColumn = rangeData.getLastColumn();
  var lastRow = rangeData.getLastRow();

  var searchRange = sheet.getRange(1,1, lastRow, lastColumn)
  var rangeValues = searchRange.getValues();

  var messExSs = SpreadsheetApp.getActiveSpreadsheet();
  var messExShName = 'messageExport';
  var messExSheet = messExSs.getSheetByName(messExShName);

  var msgObj = {};
  var result = [];
  var curCel = [];
  var messString = '';

  for ( i = 0; i < lastColumn; i++){ // columes ➔
    var curCol = rangeValues[0][i];
    msgObj[curCol] = [];

    for (j = 1 ; j < lastRow; j++){ // rows ⬇︎ //
      msgObj[curCol] = [];
      curCel = [];
      curCel = rangeValues[j][i];

      if(!(curCel === "")){
        msgObj[curCol].push(curCel)
        messString = JSON.stringify(msgObj);
        messExSheet.getRange(j, 1).setValue(messString); 
      }
     };
  };

}

1 Ответ

1 голос
/ 05 мая 2020

Согласно коду, который вы поделили, он всегда устанавливает последнюю строку, потому что вы сбрасываете msgObj [curCol] для каждой итерации J.

for ( i = 0; i < lastColumn; i++){ // columes ➔
    var curCol = rangeValues[0][i];
    msgObj[curCol] = [];

    for (j = 1 ; j < lastRow; j++){ // rows ⬇︎ //
      msgObj[curCol] = [];   <==================== This needs to be removed.
      curCel = [];
      curCel = rangeValues[j][i];

      if(!(curCel === "")){
        msgObj[curCol].push(curCel)
        messString = JSON.stringify(msgObj);
        messExSheet.getRange(j, 1).setValue(messString); 
      }
     };
  };

Надеюсь, это поможет.

...