Как да експортирате всеки лист в Google като собствен документ с помощта на скриптове в Google?

За първи път използвам javascript, така че може би пропускам нещо. Задачата: Имам код, който при дадена таблица с информация създава нови листове за всяко уникално име в една от колоните. Забележете как Джош Чан се появява в две от тези колони:

проба

С достатъчно голям списък би било досадно да преминете през 100 листа. Има ли някакъв начин да експортирате всеки лист в Google като собствен документ?

Търсих усилено, не намерих начин да направя това. Всяка помощ и опит ще бъдат високо оценени. Странична бележка: това може да е възможно с макроси или нещо подобно.

Благодаря!


person jeisenman19    schedule 21.06.2021    source източник
comment
Нека изясня това, искате ли да имате няколко листа въз основа на уникалните имена тук?   -  person NaziA    schedule 22.06.2021
comment
Да, така че създадох уникални листове за всеки от редовете в тези колони. напр. Имам уникални чаршафи за Джордан, Баркърл Джак, Роуз; и т.н. Всички те ще бъдат в един и същ главен файл, но различни листове в Google.   -  person jeisenman19    schedule 22.06.2021
comment
о Еха. Сценарият работи! Много благодаря. Това беше огромна помощ. След 20 часа просто скърцане със зъби.   -  person jeisenman19    schedule 22.06.2021
comment
Радвам се, че проработи и реши проблема ти @jeisenman19. Ако сме отговорили на въпроса ви, моля, щракнете върху бутона за приемане вляво (икона за отметка). Правейки това, други хора в общността, които може да имат същите грижи като вас, ще знаят, че техните могат да бъдат разрешени. Ако бутонът за приемане не е достъпен за вас, не се колебайте да ми кажете. как да приемете отговор   -  person NaziA    schedule 22.06.2021


Отговори (2)


Така че, ако разбирам това правилно, вие искате следното:

За всеки уникален запис направете нов Google Sheets (така че нов файл, а не само раздел)

На първо място

Ще трябва да създадете шаблонен документ, който ще копирате всеки път, когато се прави нов документ. Така че за този пример ще използвам лист, наречен templateSheet като шаблон, и ще наричам основния лист като masterSheet.

Главен лист

Опитайте да използвате този код и да попълните променливата templateSheet с id на вашия TemplateSheet

function myFunction() {
  // Template sheet stuff
  // Insert id of template sheet
  const templateSheet = "";
  const templateSheetObj = DriveApp.getFileById(`${templateSheet}`);

  // Main sheet stuff
  const ss = SpreadsheetApp.getActiveSheet();
  const allData = ss.getRange(2, 1, ss.getLastRow() - 1, 6).getValues();
  let usersDone = [];

  for (const entry of allData) {
    const fullName = entry[1];
    if (!usersDone.includes(fullName)) {
      // this makes a copy and sets the title of document to fullname variable
      const copy = templateSheetObj.makeCopy(fullName)
      usersDone.push(fullName);
    }
  }
}

Изход

Как сега изглежда папката ми в Диск

Съдържание на нов документ

Тъй като имате новия листов обект, записан в copy, можете свободно да правите каквото и да е с новото копие, като добавяне на всички редове с данни или нещо подобно.

person PiratePie    schedule 21.06.2021

Трябва да филтрирате данните си по отношение на уникалните имена. Трябва също така да манипулирате данните, за да можете лесно да ги завъртите всички и да ги добавите към нов лист. Случва се много, но има достатъчно коментари, за да се посочи какво прави всяка стъпка.

Код:

function createSheetPerUniqueName() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();

  // remove first row as header
  var headers = values.shift();

  // get unique names
  var name = values.map(row => row[1]).filter(function (value, index, self) {
    return self.indexOf(value) === index;
  });

  // traverse unique names
  name.forEach(function (uniqueName) {
    // get all rows with the unique name
    var data = values.filter(row => row[1] == uniqueName);

    // pass the id of destination folder (in between "folders/" and "?resourcekey=")
    var folder = DriveApp.getFolderById("1UvAE1ZbFso35kiooJ7lUq_nDH2QgUYyS");
    // create spreadsheet
    var temporarySheet = SpreadsheetApp.create(uniqueName);
    // move created spreadsheet to folder and get its ID
    var sheetId = DriveApp.getFileById(temporarySheet.getId()).moveTo(folder).getId();

    // access the sheet via ID
    var newSpreadSheet = SpreadsheetApp.openById(sheetId);
    // rename Sheet1 to name
    var newSheet = newSpreadSheet.getSheets()[0];
    newSheet.setName(uniqueName);

    // set header
    newSheet.getRange(1, 1, 1, data[0].length).setValues([headers]);
    // set data
    newSheet.getRange(2, 1, data.length, data[0].length).setValues(data);
  });
}

Примерни данни:

проба

Изход:

изход изход2

Забележка:

  • За всяко уникално име ще има съответстваща електронна таблица, която да се генерира в избраната папка. И всички тези редове с това име ще бъдат добавени към тази нова електронна таблица, където им е мястото.

ресурс:

person NaziA    schedule 21.06.2021
comment
О, семантика. Първо, благодаря за усилията. След като имате уникалните листове, има ли начин да експортирате всеки лист в папка като отделен документ? напр. Лист 1 се нарича Боб. Лист 2 е Сидни. Папката ще съдържа един документ за Боб и напълно отделен документ за Сидни. Това има ли смисъл? - person jeisenman19; 22.06.2021
comment
Да, това би било изпълнимо... Позволете ми да променя отговора си - person NaziA; 22.06.2021
comment
О, благодаря предварително. Този проблем наистина ме завладя. - person jeisenman19; 22.06.2021
comment
Промених отговора си @jeisenman19, моля, проверете. - person NaziA; 22.06.2021