Как извлечь данные из файла электронной таблицы Google в другой и поместить гиперссылки? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть 2 книги на Google Диске, WB (A) - 10 разных листов и WB (B) - только один лист.

Я хочу получить некоторые данные из определенных ячеек из WB (B) изкаждый лист для хранения и обновления в WB (A), т. е. имя из ячейки (C6), идентификатор из ячейки (J10), Eva из ячейки (M13), а также одинаковые ячейки со всех листов 1,2,3,4, ...., 10.

Мне удалось обработать процесс поиска и обновления данных между WB (B) и WB (A), используя сценарий и триггеры, изменяющие время.Мне нужно назначить гиперссылку в WB (A), которая отображается в ячейке идентификатора для каждой строки (для каждой записи), или создать отдельный столбец, содержащий гиперссылки, связанные с каждой отдельной записью.цель состоит в том, чтобы щелкнуть по идентификатору с гиперссылкой, чтобы он автоматически перенес вас на соответствующий лист с этими значениями

Я знаю, как это сделать вручную, но я хочу, чтобы он генерировался автоматически и динамически черезскрипт, я обработаю триггер.

это мой код

function VerandacopyData() {

  var Veranda_Workbook = SpreadsheetApp.openById("WB(B) id");

//var workbookB = SpreadsheetApp.getActiveSpreadsheet();

  var Veranda_Sheets = Veranda_Workbook.getSheets();

//Destination link id and sheet name

  var sheetA = SpreadsheetApp.openById('Log & Record ID').getSheetByName('Veranda Record');
  sheetA.clear(); 

// This deletes all data in WB(A) before copying everything from WB(B), use this only if you don't want //all data to be duplicated all the time.

for(var index = 0; index < Veranda_Sheets.length; index++) {

//Sources definitions and reading data from all sheets

    var lastRow = sheetA.getLastRow() + 1;
    var Name_Source    = Veranda_Sheets[index].getRange(6,3,1,1).getValues();
    var ID_Source   = Veranda_Sheets[index].getRange(9,10,1,1).getValues();
    var Eva_Date_Source    = Veranda_Sheets[index].getRange(6,13,1,1).getValues();

//Destination definition according to copied ranges criteria
//In big overall record sheet, we try lastRow+1 to not delete the header if it was buggy and/or delete //Line 13 ==> sheetA.clear();

  var Name_Destination  = sheetA.getRange(lastRow, 1, 1, 1);
    var ID_Destination  = sheetA.getRange(lastRow, 3, 1, 1)
    var Eva_Destination   = sheetA.getRange(lastRow, 4, 1, 1)

//Setting Values in destination in Evaluations Record sheet  

    Name_Destination.setValues(Name_Source);
    ID_Scope_Destination.setValues(ID_Source);
    Eva_Destination.setValues(Eva_Source);
     }}

Я нашел решение, написав эти строки, когда цикл For начинается:

var Sheets_Name = new Array()
var Sheets_ID   = new Array()

Sheets_Name.push( [ Veranda_Sheets[index].getName() ] )
Sheets_ID.push( [ Veranda_Sheets[index].getSheetId() ] )
    sheetA.getRange(lastRow,1).setFormula('=hyperlink("https://docs.google.com/spreadsheets/d/ABCDEFEGGJKLSDKSDLSKDLKSDLKNXZDSKBD/edit#gid=' + Sheets_ID +'")');

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Чтобы изменить ячейки идентификатора, чтобы они отображались в виде гиперссылки, вы можете использовать функцию setFormula () [1] вместо функции setValues, измените только следующую строку:

ID_Scope_Destination.setValues(ID_Source);

Для этого:

var Sheet_ID = Veranda_Sheets[index].getSheetId()
ID_Scope_Destination.setFormula('=hyperlink("https://docs.google.com/spreadsheets/d/[SPREADSHEET-ID]/edit#gid=' + Sheet_ID + '","' + ID_Source[0] + '")');

[1] https://developers.google.com/apps-script/reference/spreadsheet/range#setFormula(String)

0 голосов
/ 29 сентября 2019

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

function VerandacopyData() {
  var ssb=SpreadsheetApp.openById("id");
  var bshts=ssb.getSheets();
  var vrsht=SpreadsheetApp.openById('Log & Record ID').getSheetByName('Veranda Record');
  vrsht.clear(); 
  for(var i=0;i<bshts.length;i++) {
    var lastRow=vrsht.getLastRow()+1;
    var Name_Source=bshts[i].getRange(6,3,1,1).getValue();
    var ID_Source=bshts[i].getRange(9,10,1,1).getValue();
    var Eva_Source=bshts[i].getRange(6,13,1,1).getValue();
    vrsht.getRange(lastRow, 1, 1, 1).setValue(Name_Source);
    vrsht.getRange(lastRow, 3, 1, 1).setValue(ID_Source);
    vrsht.getRange(lastRow, 4, 1, 1).setValue(Eva_Source);
  }
}
...