Есть ли способ проверить диапазон столбцов для определенных данных? - PullRequest
1 голос
/ 27 октября 2019

У меня есть 2 рабочие книги, электронная таблица A имеет несколько листов одинаковой формы.

Записи электронной таблицы B содержат ячейки из электронных таблиц A в одну строку на лист (журнал).

В первом столбце электронной таблицы B содержатся гиперссылки всех листов электронной таблицы A. Мне нужно проверить столбец гиперссылок в электронной таблице B следующим образом: если гиперссылка существует в столбце A, проверить следующий лист в электронной таблице A index ++else записывать новые данные в строке после последней строки ,,,,

В моем коде раньше была функция clear () для начала отправки с нуля в электронную таблицу B, но это не эффективно с точки зрения времени выполнения. Я пытаюсь манипулировать моим текущим кодом, чтобы проверить вручную существующие записи и i ++ / отправить новую строку на основе этой логики.

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


Электронная таблица A - Лист1 SpreadsheetA-sheet1


Электронная таблица A -Лист 2 SpreadsheetA-sheet2


Электронная таблица B

Workbook B Log


Я хочу, чтобы оператор if выполнялся в столбце Ссылка на лист в Рабочей книге B .... в случае добавления Листа 3 к Рабочей книге A (рис. 1 и 2) при отправке я хочу проверить ссылки на Лист в Рабочей книге. B log (потому что он уникальный), если он существует, i ++ .... если не существует, добавьте третью запись в журнал.

for(var index = 2; index < WBA.length; index++) 
  {
    var Sheet   = "https://docs.google.com/spreadsheets/d/WBA ID/edit#gid=";
    var SID     = WBA[index].getSheetId();
    var SheetID = Sheet + SID;
    var Data    = WBB.getDataRange().getValues();

    for(var i = 0; i < Data.length; i++)
    {
      if(Data[i][1] == SheetID)
        i++

      else
      {

    var lastRow = WBB.getLastRow() + 1;

    var Sheets_ID   = new Array()

    Sheets_ID.push( [WBA[index].getSheetId()] )
           WBB.getRange(lastRow,1).setFormula('=hyperlink("https://docs.google.com/spreadsheets/d/WBA ID/edit#gid=' + Sheets_ID +'")');

    var PN_Source    = WBA[index].getRange(6,3,1,1).getValues();      //getRange(row number, column number, number of rows, number of columns)
    var SC_Source      = WBA[index].getRange(8,3,1,1).getValues();

1 Ответ

1 голос
/ 28 октября 2019

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

function checkForLink() {
  var ssB=SpreadsheetApp.getActive();
  var sh1=ssB.getActiveSheet();
  var rg1=sh1.getRange(1,1,1,4);
  var vA1=rg1.getValues()[0];
  var hObj={};
  vA1.forEach(function(el,i){if(el){hObj[el]=i;}});
  var linkA=sh1.getRange(2,hObj['Sheet Link']+1,sh1.getLastRow(),1).getValues().map(function(r){return r[0];});
  var ssA=SpreadsheetApp.openById('SSA ID');
  var shts=ssA.getSheets();
  shts.forEach(function(sh,i){
    var vA=sh.getRange(1,1,2,sh.getLastColumn()).getValues();
    var sObj={};
    vA[0].forEach(function(e,i){sObj[e]=i;});
    var shlink=Utilities.formatString('https://docs.google.com/spreadsheets/d/%s//edit#gid=%s',ssA.getId(),sh.getSheetId());
    if(linkA.indexOf(shlink)==-1) {
      sh1.appendRow([vA[1][sObj.date],vA[1][sObj.age],vA[1][sObj.name],shlink]);
    } 
  });
}
...