Загрузка на другой лист с условиями - PullRequest
0 голосов
/ 08 мая 2019

Мне нужна помощь с моим проектом. Конечная цель игры состоит в том, чтобы пользователь выбрал ячейки в строке, а затем использовал кнопку для загрузки этих данных на другой лист. При загрузке я хочу сопоставить определенную ячейку и заполнить определенные пустые ячейки в этой строке. Если совпадение не найдено, мне нужно создать новую запись.

Идея состоит в том, что группа использует несколько листов, каждый лист имеет одинаковые категории, но на каждом листе заполняются только определенные ячейки. Поэтому мы хотим объединить все данные на одном листе, чтобы вам не нужно было смотреть на кучу разных листов, чтобы получить все данные. Например, идентификатор продукта 123456 присутствует в главной записи, поэтому, когда пользователь загружает данные с этим идентификатором продукта, он добавляет информацию, такую ​​как вес, рост и т. Д., В соответствующие ячейки в этой строке. Если пользователь загружает код продукта 654321, а его нет в главном файле, он создает новую строку с выбранными данными и помещает в соответствующие ячейки.

Так что сейчас у меня есть загрузка всего на мастер-лист без проверки идентификатора продукта. Каждый раз, когда он создает новую запись каждый раз. Мне нужно, чтобы он проверил данные определенной ячейки и, если они присутствуют в основной записи, не добавляйте данные в новую строку, вместо этого добавьте данные в эту строку в соответствующей ячейке.

пока все довольно просто:

function uploadData(){
 var css = SpreadsheetApp.getActiveSpreadsheet(); //setup current spreadsheet
 var csheet = css.getSheetByName("Sheet1") //setup current sheet
 var cdata = csheet.getActiveRange().getValues(); //get selected data values
 var sRows = csheet.getActiveRange().getLastColumn(); //get the value of the last column selected

 var mss = SpreadsheetApp.openById('1N5Orl2fQvmFmK63_y78V2k7jzBUYOjDxhixMSOCU7jI'); //open mastersheet for adding data
 var msheet = mss.getSheets()[0]; //get the sheet
 var mfindnextrow = msheet.getRange('A:A').getValues(); //get the values

 //this next code i found online, this allows me to insert new data on a new row without any data present
 var maxIndex = mfindnextrow.reduce(function(maxIndex, row, index) {
 return row[0] === "" ? maxIndex : index;
  }, 0); 

 //start looping through the row 
 cdata.forEach(function(row){
 msheet.setActiveRange(msheet.getRange(maxIndex + 2, 1, 1, sRows)).setValues(cdata); //put the data into the mastersheet
  });
};    

Вот изображение листа загрузки: uploadsheet В этом есть только один элемент для загрузки с кодом продукта 1 Так что мне нужно, чтобы он нашел в мастере соответствующий код продукта и добавил информацию, если она есть, а если нет, создайте новую запись с этим кодом продукта.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Проблема в индексах на msheet.getRange(maxIndex + 2, 1, 1, 1)

Последние два - это размер диапазона.Использование 1,1 ограничивает диапазон до 1 строки x 1 столбца = 1 ячейка.

0 голосов
/ 08 мая 2019

Попробуйте это:

function moveSelectedData(){
  var css=SpreadsheetApp.getActive();
  var csheet=css.getSheetByName("Sheet1"); 
  var cdata=csheet.getActiveRange().getValues();
  var mss = SpreadsheetApp.openById('ssid');
  var msheet = mss.getSheets()[0];//first sheet on the left
  msheet.getRange(msheet.getLastRow()+1,1,cdata.length,cdata[0].length).setValues(cdata);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...