Как автоматически добавлять в скрипт имя листа для повторного использования?
Документы приходят на ежедневной основе (ex. sup-sup-27-07-2021). Моя задача состоит в том, чтобы скрипт применялся к этим документам и создавал сводные таблицы. Названия документов меняются в зависимости от даты.
function createPivot() {
const doc = SpreadsheetApp.getActive();
const sheet = doc.getSheetByName('sup-sup-27-07-2021');
const headers = sheet.getRange('1:1').getValues()[0];
const colIdx = headers.reduce((o, k, i) => {
o[k] = i + 1;
return o;
}, {});
const pivotsSheet = doc.insertSheet();
pivotsSheet.setName('Исп1');
const pivotTable = pivotsSheet
.getRange('A1')
.createPivotTable(sheet.getDataRange());
let filter = SpreadsheetApp.newFilterCriteria().whenTextContains(['']);
let groupPivotCriteria = SpreadsheetApp.DateTimeGroupingRuleType.MONTH;
let groupPivotCriteria1 = SpreadsheetApp.DateTimeGroupingRuleType.DAY_MONTH;
}
Можно ли для каждого нового документа автоматически обновлять строчку в скрипте по имени листа в документе или по названию документа:
(ex.)
- Название документа - sup-sup-27-07-2021
- Необходимая строка с названием документа или листа(они одинаковые)
const sheet = doc.getSheetByName()
Ответы (1 шт):
Автор решения: contributorpw
→ Ссылка
Вам следует организовать код таким образом, чтобы программа вызывалась из одного места (проекта). Например,
/**
* @param {GoogleAppsScript.Spreadsheet.Spreadsheet} book
* @param {string} sheetName
*/
function createPivot_(book, sheetName) {
const doc = book;
const sheet = doc.getSheetByName(sheetName) || doc.insertSheet(sheetName);
const headers = sheet.getRange('1:1').getValues()[0];
const colIdx = headers.reduce((o, k, i) => {
o[k] = i + 1;
return o;
}, {});
const pivotsSheet = doc.insertSheet();
pivotsSheet.setName('Исп1');
const pivotTable = pivotsSheet
.getRange('A1')
.createPivotTable(sheet.getDataRange());
let filter = SpreadsheetApp.newFilterCriteria().whenTextContains(['']);
let groupPivotCriteria = SpreadsheetApp.DateTimeGroupingRuleType.MONTH;
let groupPivotCriteria1 = SpreadsheetApp.DateTimeGroupingRuleType.DAY_MONTH;
}
/**
*
*/
function userActionCreateTodayPivot() {
const sheetName = `sup-sup-${Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
'dd-MM-yyyy'
)}`;
createPivot_(SpreadsheetApp.getActiveSpreadsheet(), sheetName);
}
Хотя, код выше может подойти и для каждого проекта, если отчет создается только сегодня
Если у вас несколько sup-sup-* листов, то можно выбирать последний из них или создавать сегодняшний
/**
*
*/
function userActionCreatePivot() {
const book = SpreadsheetApp.getActive();
const sheetNames = book
.getSheets()
.filter((sheet) => /^sup\-sup\-/.test(sheet.getName()));
const sheetName = sheetNames.length
? sheetNames.reverse()[0]
: `sup-sup-${Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
'dd-MM-yyyy'
)}`;
createPivot_(SpreadsheetApp.getActiveSpreadsheet(), sheetName);
}