Добрый день. Нуждаюсь в помощи, т.к. сам мало что понимаю. У меня есть гугл таблица в которую через Glide стекаются данные от 10 сотрудников (ежедневный отчет). По триггеру в 23:00-00:00 каждый день происходит запуск скрипта и таблица очищается скриптом, что бы на следующий день заполнялся новый отчет. Задача состоит в том что бы эта таблица сохранялась у меня каждый день в новый файл. Я реализовал это с помощью ежедневной резервной копии так же по тригеру через скрипт, но эти резервные копии автоматически очищаются (данные удаляются так же как в изначальном файле по расписанию). Как можно реализовать, что бы отчет за каждый день сохранялся отдельно? Может есть другой путь реализации? Не могу сообразить. Спасибо.
Добрый день. Нуждаюсь в помощи, т.к. сам мало что понимаю. У меня есть гугл таблица в которую через Glide стекаются данные от 10 сотрудников (ежедневный отчет). По триггеру в 23:00-00:00 каждый день происходит запуск скрипта и таблица очищается скриптом, что бы на следующий день заполнялся новый отчет. Задача состоит в том что бы эта таблица сохранялась у меня каждый день в новый файл. Я реализовал это с помощью ежедневной резервной копии так же по тригеру через скрипт, но эти резервные копии автоматически очищаются (данные удаляются так же как в изначальном файле по расписанию). Как можно реализовать, что бы отчет за каждый день сохранялся отдельно? Может есть другой путь реализации? Не могу сообразить. Спасибо.mvdRF
Просто заведите себе архивную таблицу. На одном рабочем листе - в этом же файле или в другом (если надо чтобы сотрудники совсем не видели), неважно. Каждый день перед очищением основной таблицы сливайте данные в архив (также скриптом по триггеру). Возможно, надо будет добавить к сохраняемым данным пару колонок - дату и номер строки внутри даты (и то это если только сами данные не содержат явной привязки к датам). Как-то так. Годится подход? Кстати, сколько данных за один типичный день собирается ( строк х столбцов)?
Просто заведите себе архивную таблицу. На одном рабочем листе - в этом же файле или в другом (если надо чтобы сотрудники совсем не видели), неважно. Каждый день перед очищением основной таблицы сливайте данные в архив (также скриптом по триггеру). Возможно, надо будет добавить к сохраняемым данным пару колонок - дату и номер строки внутри даты (и то это если только сами данные не содержат явной привязки к датам). Как-то так. Годится подход? Кстати, сколько данных за один типичный день собирается ( строк х столбцов)?Gustav
Gustav, Отчёт в заголовке имеет скрепление с текущей датой, а так как сохраняется до 00:00 должен по задумке сохраняться с ней. Бэкап тоже в имени имеет дату сохранения. Правда при открытии бэкапа строки автоматом стираются, а дата переписывается с чем и хочу справиться. Сотрудников всего 12 на каждого по строчке, которые суммируется в итоговой графе. Столбцов штук 15. Может ткнете носом в любой подходящий мануал по архивным таблицам? Я не очень ориентируясь... Спасибо
Gustav, Отчёт в заголовке имеет скрепление с текущей датой, а так как сохраняется до 00:00 должен по задумке сохраняться с ней. Бэкап тоже в имени имеет дату сохранения. Правда при открытии бэкапа строки автоматом стираются, а дата переписывается с чем и хочу справиться. Сотрудников всего 12 на каждого по строчке, которые суммируется в итоговой графе. Столбцов штук 15. Может ткнете носом в любой подходящий мануал по архивным таблицам? Я не очень ориентируясь... СпасибоmvdRF
Дык таблица - архивная по смыслу использования. А так это обычная Гугл таблица. Покажите свою - поймем что надо делать. Сделайте её копию без триггера, чтобы не стирал данные. Реальные ФИО или продукцию замените на сотрудник 1, сотрудник 2 (3 и т.д.) или товар 1, товар 2.
Дык таблица - архивная по смыслу использования. А так это обычная Гугл таблица. Покажите свою - поймем что надо делать. Сделайте её копию без триггера, чтобы не стирал данные. Реальные ФИО или продукцию замените на сотрудник 1, сотрудник 2 (3 и т.д.) или товар 1, товар 2.Gustav
Gustav, https://docs.google.com/spreads....sharing - сама табличка, ничего конфиденциального. В клетке a8 формула для импорта данных. К табличке подвязана аналогичная по графам, только в упрощенном виде (в нее все данные от сотрудников приходят и она же сама очищается затирая впоследствии данные вплоть до бэкапов). Если убрать скрипт очистки изначальной таблицы, новая же будет заполнятся вместе со старыми данными... Не знаю как по другому.
Gustav, https://docs.google.com/spreads....sharing - сама табличка, ничего конфиденциального. В клетке a8 формула для импорта данных. К табличке подвязана аналогичная по графам, только в упрощенном виде (в нее все данные от сотрудников приходят и она же сама очищается затирая впоследствии данные вплоть до бэкапов). Если убрать скрипт очистки изначальной таблицы, новая же будет заполнятся вместе со старыми данными... Не знаю как по другому.mvdRF
Сообщение отредактировал mvdRF - Воскресенье, 28.08.2022, 12:14
Gustav, Суть я уловил, только это не совсем то чего хочется достичь. В идеале нужны отдельные файлы. Т.е. что бы все шло не в одну сводную таблицу, а за каждый день сохранялся отдельный отчет.
Gustav, Суть я уловил, только это не совсем то чего хочется достичь. В идеале нужны отдельные файлы. Т.е. что бы все шло не в одну сводную таблицу, а за каждый день сохранялся отдельный отчет.mvdRF
Ок, тогда, скорее всего, надо просто после создания копии войти в нее и сохранить все данные Лист1 как значения (без формул). Сделать это можно так. В коде функции makeCopy замените заключительный фрагмент: [vba]
Код
// makes copy of "file" with "name" at the "destination" file.makeCopy(name, destination); }
[/vba] на такую последовательность операторов: [vba]
Код
// makes copy of "file" with "name" at the "destination" var fileNew = file.makeCopy(name, destination);
var ssNew = SpreadsheetApp.openById(fileNew.getId()); var rng = ssNew.getSheetByName('Лист1').getDataRange(); rng.copyTo(rng, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false) }
[/vba]
Ок, тогда, скорее всего, надо просто после создания копии войти в нее и сохранить все данные Лист1 как значения (без формул). Сделать это можно так. В коде функции makeCopy замените заключительный фрагмент: [vba]
Код
// makes copy of "file" with "name" at the "destination" file.makeCopy(name, destination); }
[/vba] на такую последовательность операторов: [vba]
Код
// makes copy of "file" with "name" at the "destination" var fileNew = file.makeCopy(name, destination);
var ssNew = SpreadsheetApp.openById(fileNew.getId()); var rng = ssNew.getSheetByName('Лист1').getDataRange(); rng.copyTo(rng, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false) }
Gustav, Добавил код в скрипт своей отчетной таблицы. Получилось:
[vba]
Код
// Abhijeet Chopra // 26 February 2016 // Google Apps Script to make copies of Google Sheet in specified destination folder
function makeCopy() {
// generates the timestamp and stores in variable formattedDate as year-month-date hour-minute-second var formattedDate = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy' 'HH:mm:ss");
// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate var name= SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;
// gets the destination folder by their ID. REPLACE 1Q9v74DrFaHFz7PkAmqPKpDWB7qbtSRta with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar var destination = DriveApp.getFolderById("1Q9v74DrFaHFz7PkAmqPKpDWB7qbtSRta");
// gets the current Google Sheet file var file= DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
// makes copy of "file" with "name" at the "destination" var fileNew = file.makeCopy(name, destination);
var ssNew = SpreadsheetApp.openById(fileNew.getId()); var rng = ssNew.getSheetByName('Лист1').getDataRange(); rng.copyTo(rng, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false) }
[/vba]
В результате выполнения скрипта выходит "Ошибка Exception: You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets". Резервная копия в папке появляется, но формулы так же копируются и данные затираются после очистки исходников.
Gustav, Добавил код в скрипт своей отчетной таблицы. Получилось:
[vba]
Код
// Abhijeet Chopra // 26 February 2016 // Google Apps Script to make copies of Google Sheet in specified destination folder
function makeCopy() {
// generates the timestamp and stores in variable formattedDate as year-month-date hour-minute-second var formattedDate = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy' 'HH:mm:ss");
// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate var name= SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;
// gets the destination folder by their ID. REPLACE 1Q9v74DrFaHFz7PkAmqPKpDWB7qbtSRta with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar var destination = DriveApp.getFolderById("1Q9v74DrFaHFz7PkAmqPKpDWB7qbtSRta");
// gets the current Google Sheet file var file= DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
// makes copy of "file" with "name" at the "destination" var fileNew = file.makeCopy(name, destination);
var ssNew = SpreadsheetApp.openById(fileNew.getId()); var rng = ssNew.getSheetByName('Лист1').getDataRange(); rng.copyTo(rng, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false) }
[/vba]
В результате выполнения скрипта выходит "Ошибка Exception: You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets". Резервная копия в папке появляется, но формулы так же копируются и данные затираются после очистки исходников.mvdRF
Сообщение отредактировал Serge_007 - Вторник, 30.08.2022, 15:56
Гугл, время от времени, чудит с полномочиями, наверное, типа улучшает безопасность. Из-за этого то, что раньше без проблем работало годами, вдруг начинает сбоить. В общем, данная проблема решается следующим образом.
Находясь в Редакторе скриптов (Расширения\Apps Script), выполняем команду меню "Вид \ Показать файл манифеста" - открывается еще одно окно редактора с файлом appsscript.json примерно такого содержания: [vba]
Гугл, время от времени, чудит с полномочиями, наверное, типа улучшает безопасность. Из-за этого то, что раньше без проблем работало годами, вдруг начинает сбоить. В общем, данная проблема решается следующим образом.
Находясь в Редакторе скриптов (Расширения\Apps Script), выполняем команду меню "Вид \ Показать файл манифеста" - открывается еще одно окно редактора с файлом appsscript.json примерно такого содержания: [vba]
[/vba] Если его нет, то добавьте - в любое место внутри общего списка между крайними фигурными скобками, добавив также нужную разделительную запятую.Gustav