Конвертировать данные из таблицы в таблицу - PullRequest
1 голос
/ 29 января 2020

Я работал над проектом, который преобразовывает некоторые данные в другую таблицу с помощью онлайнового API (веб-службы), поэтому в плане сбора данных из API и преобразования цен в другую таблицу я все еще получаю ту же ошибку и опять же, который не конвертирует каждую строку так, как мне нужно.
ЭКРАН: Интерфейс пользователя для понимания использования
Код:

function Send_Button() {

  //activate the spreadsheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cellCurrency = spreadsheet.getRange('E9').getValues();

  //fatching the data from the API
  var res = UrlFetchApp.fetch("https://api.exchangeratesapi.io/latest?base="+cellCurrency).getContentText();

  //parsing data to JSON
  var json = JSON.parse(res);

  //exporting data in variables
  var USD=json['rates']['USD'],
      CAD=json['rates']['CAD'],
      GBP=json['rates']['GBP'],
      EUR=json['rates']['EUR'];

  //an array to fetch just 4 currencies
  var CRN = [USD,CAD,GBP,EUR];
  var cellsPrice = spreadsheet.getRange('E5:E8').getValues();

  //targeted cell in the second currencies table
    var cellsTraget1 = spreadsheet.getRange('H3:K3');
    var cellsTraget2 = spreadsheet.getRange('H4:K4');
    var cellsTraget3 = spreadsheet.getRange('H5:K5');
    var cellsTraget4 = spreadsheet.getRange('H6:K6');

//converting process
  for(var i=0;i<4;i++)
  {

    cellsTraget1.setValue(cellsPrice[0]*CRN[0]);
    cellsTraget2.setValue(cellsPrice[1]*CRN[1]);
    cellsTraget3.setValue(cellsPrice[2]*CRN[2]);
    cellsTraget4.setValue(cellsPrice[3]*CRN[3]);

  }



}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вы абсолютно уверены, что ваш var cellCurrency - правильный диапазон, который вы хотите? Из вашего скриншота видно, что правая ячейка - «E10» ... но давайте предположим, что вы это исправили.

Тогда у вас возникнет проблема с размерами вашего массива, ваш var cellsPrice является 2D-массивом (строки, столбцы), даже если диапазон, из которого вы получаете значения, всего одна строка!.

Другая проблема, ваш var cellsTraget* также является 2D-диапазоном, поэтому вы не можете использовать setValue() ... Вы можете использовать setValues(), но массив значений ДОЛЖЕН соответствовать размеру диапазона. И как они в настоящее время, они не совпадают. Подсказка: транспонируйте их, если хотите использовать указанную функцию .

Кроме того, ваш for-l oop вообще не имеет никакого смысла, поскольку вы все равно не зацикливаетесь!.

Вот пример рабочего кода:

function sendButton() {

  // Activate the spreadsheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var baseCurrency = "USD";

  // Fetching the data from the API
  var res = UrlFetchApp.fetch("https://api.exchangeratesapi.io/latest?base="+baseCurrency).getContentText();

  // Parsing data to JSON
  var json = JSON.parse(res);

  // Exporting data in variables
  var USD = [json['rates']['USD'], json['rates']['CAD'], json['rates']['GBP'], json['rates']['EUR']];

  // I will do it for one row
  var articlePrice = spreadsheet.getRange('E5').getValue();

  // Mind the array's dimensions!
  var convertedPricesRange = spreadsheet.getRange('I5:L5');
  var convertedPriceValues = [[articlePrice*USD[0],articlePrice*USD[1],articlePrice*USD[2],articlePrice*USD[3]]];

  // Set converted values
  convertedPricesRange.setValues(convertedPriceValues);
}

Дополнительная информация:

  • Класс листов Range
0 голосов
/ 29 января 2020

Вы выполняете итерацию, но не используете переменную итератора i, это правильно? Возможно, написание кода более читабельным способом, сначала получая строки, а затем значение ячейки для каждого столбца, а затем итерируя по строке и столбцу, сделает его более читабельным и поможет быстрее найти проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...