Google Spreadsheet JSON Parser

26 марта, 2016
1 минута чтения

Мы в 1or2team решили сэкономить время геймдизайнера и теперь загружаем файлы игровых сценариев напрямую через Google Spreadsheet. Это заметно экономит время программистов и не требует создания новых сборок.

Листинг:

var sheet = SpreadsheetApp.openById('YOUR_ID');
SpreadsheetApp.setActiveSpreadsheet(sheet);
 
/**
 * @param currentSheet
 * @param findKey
 * @return {Array}
 */
function getStartEndRows(currentSheet, findKey) {
  
  var data = currentSheet.getDataRange().getValues();
  var values = [];
  var found = false;
  
  // Начало выборки
  var startRow = 0;
  var startNum = 0;
  // Конец выборки
  var endRow = 0;
  var endNum = 0;
  
  /**
   * Сохраняем максимальное значение 
   * @return {Number}
   */
  var setMaxNum = (function() {
    var max = 0;
    
    return function(num) {
      if(num > max) {
        max = num;
      }
      
      return max;
    }

  }());
  
  for (var i = 0; i < data.length; i++) {    
    
    var row = data[i];
    var rowIsEmpty = true;
    
    for (var j = 0; j < row.length; j++) {    
      var value = data[i][j];
      
      if(value.toString().trim() === findKey) {
        found = true;
        startRow = i;
        startNum = j;
        rowIsEmpty = false;
      } else if(found && value !== '') {
        endRow = i;
        endNum = setMaxNum(j);       
        rowIsEmpty = false;
      }       
    }
    
    if(found && rowIsEmpty) {
      break;
    }    
    
  }
  
  var dataRange = currentSheet.getRange(startRow + 1, startNum + 1, endRow + 1, endNum + 1);
  
  if(found) {
    values = dataRange.getValues();
  }
  
  return values;
}
 
/**
 * Example: getValues('Количество начисляемой игроку ВВ', 'GameMode_Sprint');
 * @param findKey поиск по ключу {String}
 * @param sheetKey имя вкладки {String}
 * @return {Object}
 */
function getValues(findKey, sheetKey) { 
 
  var sheets = sheet.getSheets();
  var arrayData = [];
  
  for (var i = 0; i < sheets.length; i++) {    
    var currentSheet = sheets[i];
    var sheetName = currentSheet.getName();

    if(sheetName === sheetKey) {
      arrayData = getStartEndRows(currentSheet, findKey);

      if(arrayData.length) {
        break; 
      }  
    }  
  }; 
  
  SpreadsheetApp.flush();
   
  return arrayData;
}

function doGet(request) {

  var bar = getValues('HEADER_TEXT', 'SHEET_NAME');
  
  var output = JSON.stringify({
    'foo' : bar
  });
  
  return ContentService
  .createTextOutput(output)
  .setMimeType(ContentService.MimeType.JSON);

}

Денис Сергеевич Басковский

Философ, изобретатель и поэт.

Добавить комментарий Отменить ответ

csv google drive
Предыдущая статья

Получение CSV файла из Google Drive API v2

массив удаление элемента
Следующая статья

Как удалить пустые элементы из массива

Exit mobile version