googlesheet Скопируйте и вставьте отфильтрованные данные по имени столбца - PullRequest
0 голосов
/ 19 апреля 2020

Привет, это код отлично работает, и я отредактировал в соответствии с моим требованием, но проблема, с которой я столкнулся, заключается в том, что я хочу скопировать столбцы по названию их заголовка (Row1) из «Рабочей таблицы» и в «Обновлении» лист вместо копирования и вставки целых данных.

Вот несколько имен заголовков столбцов: EmployeeID, E-mail, Дата, Имя сотрудника, Телефон

toFilter();
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = spreadsheet.getSheetByName("Worksheet");
var sheet2 = spreadsheet.getSheetByName("Update");
var data = sheet1.getDataRange().getValues();
var array = [];
for (var i = 0; i < data.length; i++){
if(sheet1.isRowHiddenByFilter(i+1)==false){
  array.push(data[i]);
}
}
sheet2.getRange(sheet2.getLastRow()+1, 1, array.length, array[0].length).setValues(array);
}

Помогите пожалуйста !!

1 Ответ

2 голосов
/ 19 апреля 2020

Попробуйте что-то вроде этого:

// EmployeeID, E-mail, Дата, Имя сотрудника, Телефон

function toFilter() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spreadsheet.getSheetByName("Worksheet");
  var sheet2 = spreadsheet.getSheetByName("Update");
  var hA=sheet1.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var hObj={};
  hA.forEach(function(e,i){hObj[e]=i;});
  var data = sheet1.getDataRange().getValues();
  var array = [];
  for (var i = 0; i < data.length; i++){
    if(!sheet1.isRowHiddenByFilter(i+1)){
      array.push([data[i][hObj['EmployeeID']],data[i][hObj['Email']],data[i][hObj['Date']]...]);
    }
  }
  sheet2.getRange(sheet2.getLastRow()+1, 1, array.length, array[0].length).setValues(array);
}

Попробуйте, если вы используете формулу массива:

function toFilter() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spreadsheet.getSheetByName("Worksheet");
  var sheet2 = spreadsheet.getSheetByName("Update");
  var hA=sheet1.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var hObj={};
  var col='enter column number here'
  hA.forEach(function(e,i){hObj[e]=i;});
  var data = sheet1.getRange(1,1,getColumnHeight(col,sheet1,spreadsheet),sheet1.getLastRow()).getValues();
  var array = [];
  for (var i = 0; i < data.length; i++){
    if(!sheet1.isRowHiddenByFilter(i+1)){
      array.push([data[i][hObj['EmployeeID']],data[i][hObj['Email']],data[i][hObj['Date']]...]);
    }
  }
  sheet2.getRange(sheet2.getLastRow()+1, 1, array.length, array[0].length).setValues(array);
}

function getColumnHeight(col,sh,ss){
  var ss=ss||SpreadsheetApp.getActive();
  var sh=sh||ss.getActiveSheet();
  var col=col||sh.getActiveCell().getColumn();
  var v=sh.getRange(1,col,sh.getLastRow(),1).getValues().map(function(r){return r[0];});
  var s=0;
  var h=0;
  v.forEach(function(e,i){if(e==''){s++;}else{s=0;}h++;});
  return (h-s);
}
...