Google Script для переноса данных с одного листа на другой - PullRequest
0 голосов
/ 31 января 2020

Я надеюсь, что кто-нибудь протянет мне руку с написанием скрипта Google, который будет использоваться в Google Sheets (если это невозможно сделать с помощью стандартной строки формулы).

Я бы хотел, чтобы скрипт выполнял поиск указанного c «текстового значения» в указанном столбце «Лист1», если «текстовое значение» найдено, данные из этой «строки» переносятся в « Лист 2 "в первом доступном пустом ряду. Затем, после передачи данных на «Лист2», строка с данными из «Лист1» удаляется.

* Обратите внимание, что «Sheet2» имеет меньше заголовков, чем «Sheet1». Я хочу только данные из "sheet1", которые имеют те же заголовки, что и "sheet2". Вот пример рабочей книги. Передача данных Если "текст" в столбце F "потерян", перенести данные из этой строки в " sheet2 ", но ТОЛЬКО данные, относящиеся к заголовкам в" sheet2 ".

Я новичок в Scripts и VBA и был бы признателен за любую помощь, которую кто-то готов оказать.

Большое спасибо заранее !

-Джесс

1 Ответ

1 голос
/ 01 февраля 2020

Найти, переместить и удалить

txt - текст для поиска

col - имя столбца для поиска в

function findMoveDelete(txt,col) {
  var txt=txt||'Hoover';//search text
  var col=col||'Location';//column name
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var dsh=ss.getSheetByName('Sheet2');
  var dHdrToIdx={dhA:[]};
  dHdrToIdx.dhA=dsh.getRange(1,1,1,dsh.getLastColumn()).getValues()[0];
  dHdrToIdx.dhA.forEach(function(hdr,i){dHdrToIdx[hdr]=i;});
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var sHdrToIdx={shA:[]};
  sHdrToIdx.shA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  sHdrToIdx.shA.forEach(function(hdr,i){sHdrToIdx[hdr]=i;});
  var vA=rg.getValues();
  var d=0;
  for(var i=0;i<vA.length;i++) {
    //Find
    if(vA[i][sHdrToIdx[col]]==txt) {
      var row=[];
      dHdrToIdx.dhA.forEach(function(dhdr,j){
        row.push(vA[i][sHdrToIdx[dHdrToIdx.dhA[j]]]);
      });
      dsh.appendRow(row);//Move
      sh.deleteRow(i+2-d++);//Delete
    }
  }
}

Листы 1 и 2 после прогона:

enter image description here

enter image description here

Вы должны иметь одинаковые заголовки в sheet1 и sheet2. Вы можете разместить их в любом порядке, но они должны быть одинаковыми на обоих листах.

...