=ARRAYFORMULA(REGEXEXTRACT(A2:A;".*?gclid=(.*)$"))
function run() {
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('Решение (скриптами)');
const range = sheet.getRange('A:A');
const values = range.getValues();
const data = values.map(row => {
const [undefined, value] = String(row[0]).split('gclid=');
return [value ?? ''];
});
range.setValues(data);
}
function doGet(e){
/* если `e` содержит параметр на отключение Формы */
form.setAcceptingResponses(false);
/* если `e` содержит параметр на разрешение Формы принимать ответы */
form.setAcceptingResponses(true);
}
function main() {
var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
'данные'
);
var dataArray = dataSheet.getDataRange().getValues();
var listSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
'список сайтов'
);
var listArray = listSheet.getDataRange().getValues();
// Строим индекс
var listIndex = listArray.map(function(r){
return r[0];
});
for (var j = 1; j < dataArray.length; j++) {
if(dataArray[j][0] === '') continue;
var pos = listIndex.indexOf(dataArray[j][0]);
if (pos >= 0) {
// Обновляем
listSheet.getRange(pos + 1, dataArray[j].length + 1).setValue(new Date());
} else {
// Добавляем
listSheet.appendRow([].concat(dataArray[j], new Date()));
}
}
}
SpreadsheetApp.openById('blah-blah')
.getSheets()
.forEach(function(sheet) {
var name = sheet.getRange('J2').getValue();
if (name)
try {
sheet.setName(name);
} catch (error) {
console.error('CATCHED', error);
}
});
userActionRenameSheets
демонстрирует это./* exported userActionRenameSheets */
/**
* Действие пользователя или триггера. Внешний вызов без параметров
*/
function userActionRenameSheets() {
var spreadsheet = SpreadsheetApp.openById('blah-blah');
/** @type {filterSheets} */
var filterSheets = function(sheet) {
return true;
};
/** @type {renameRule} */
var renameRule = function(sheet) {
var name = sheet.getRange('J2').getValue();
if (name)
try {
sheet.setName(name);
} catch (error) {
console.error('CATCHED', error);
}
return sheet;
};
var sheets = renameSheetsByCellValue_(spreadsheet, filterSheets, renameRule);
// Делать что-нибудь дальше
}
/**
* Переименовывает листы в Таблице согласно заданным правилам
*
* @param {GoogleAppsScript.Spreadsheet.Spreadsheet} spreadsheet Таблица,
* в которой производим переименование
* @param {filterSheets} Фильтр листов на всякий случай, вдруг что-то надо да пропустить
* @param {renameRule} Правило переименования, может возвращать что угодно
* @param {any[]} Массив отфильрованных результатов функции renameRule
*/
function renameSheetsByCellValue_(spreadsheet, filterSheets, renameRule) {
var res;
var sheets = spreadsheet.getSheets();
if (filterSheets) res = sheets.filter(filterSheets) || sheets;
if (renameRule) res = res.map(renameRule);
return res;
}
/**
* Фильтр листов
* @callback filterSheets
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet Текущий лист
* @param {number} index Текущий индекс массива
* @param {GoogleAppsScript.Spreadsheet.Sheet[]} sheets Текущий массив
* @returns {boolean}
*/
/**
* Правило переименования
* @callback renameRule
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet Текущий лист
* @param {number} index Текущий индекс массива
* @param {GoogleAppsScript.Spreadsheet.Sheet[]} sheets Текущий массив
* @returns {any}
*/
myFunction
на что-то вроде:function recordToMain(){
// Берет диапазон 'Источник!B4:B8' активной Таблицы, т.о. это встроенный скрипт
var data = SpreadsheetApp.getActive().getRange('Источник!B4:B8')
.getValues().map(function(row){return row[0];});
var url = 'https://script.google.com/macros/s/ZZZ/exec';
var options = {
method: 'POST',
headers: {
ContentType: 'application/json'
},
payload: JSON.stringify(data),
muteHttpExceptions: true
};
UrlFetchApp.fetch(url, options);
};
function doPost(e) {
SpreadsheetApp.openById('YYY') // Должна существовать
.getSheetByName('Приемник') // Должен быть лист 'Приемник'
.appendRow([new Date()].concat(JSON.parse(e.postData.contents)));
}
url_master
для первой функции. > new String('Hello world!') == 'Hello world!'
<· true
> new String('Hello world!') === 'Hello world!'
<· false
/**
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet Лист Таблицы
* @param {number} column Номер столбца
* @param {number} [startRow] Пропускает количество строк сначала
* @param {number} [numColums] Количество возвращаемых колонок
* @returns {Object[][]} Массив значений
* @see {@link https://toster.ru/q/549725}
*/
var getValuesFromColumn = function(sheet, column, startRow, numColums) {
startRow = startRow || 1;
numColums = numColums || 1;
var lastRow = sheet.getLastRow();
return sheet
.getRange(startRow, column, lastRow - startRow + 1, numColums)
.getValues();
};
var arr = getValuesFromColumn(mainSheet, 3, 3, 2);
/**
* Get an array of all LinkUrls in the document. The function is
* recursive, and if no element is provided, it will default to
* the active document's Body element.
*
* @param {Element} element The document element to operate on.
* .
* @returns {Array} Array of objects, vis
* {element,
* startOffset,
* endOffsetInclusive,
* url}
*/
function getAllLinks(element) {
var links = [];
element = element || DocumentApp.getActiveDocument().getBody();
if (element.getType() === DocumentApp.ElementType.TEXT) {
var textObj = element.editAsText();
var text = element.getText();
var inUrl = false;
for (var ch=0; ch < text.length; ch++) {
var url = textObj.getLinkUrl(ch);
if (url != null) {
if (!inUrl) {
// We are now!
inUrl = true;
var curUrl = {};
curUrl.element = element;
curUrl.url = String( url ); // grab a copy
curUrl.startOffset = ch;
}
else {
curUrl.endOffsetInclusive = ch;
}
}
else {
if (inUrl) {
// Not any more, we're not.
inUrl = false;
links.push(curUrl); // add to links
curUrl = {};
}
}
}
}
else {
var numChildren = element.getNumChildren();
for (var i=0; i<numChildren; i++) {
links = links.concat(getAllLinks(element.getChild(i)));
}
}
return links;
}
if (continuationToken == null) {
var files = DriveApp.getFiles();
} else {
var files = DriveApp.continueFileIterator(continuationToken);
}
где continuationToken заранее получен и извлечен из внешнего хранилища.
if(files.hasNext()){
var continuationToken = files.getContinuationToken();
var values = SpreadSheets.getRange(i, c).getValue();
var values = SpreadSheets.getRange(i, c).getValues();
var lock = LockService.getPublicLock();
try {
lock.waitLock(30000);
return success();
} catch (err) {
Logger.log('Could not obtain lock after 30 seconds.');
return failure();
}
var lock = LockService.getPublicLock();
var success = lock.tryLock(30000);
if (!success) {
Logger.log('Could not obtain lock after 30 seconds.');
}
[Ljava.lang.Object;@556935f1
- это массив. Таблицы не поддерживают сложные типы. Попробуйте привести массив к строке.form['checkbox_name[]']
form['checkbox_name[]'].join(', ')
JSON.stringify(form['checkbox_name[]'])
JSON.stringify(form['checkbox_name[]'], null, ' ')
UrlFetchApp.fetch('https://www.pochta.ru/tracking#RG886664219CN').getContentText();