onEdit
- это зарезервированная функция простого триггера события EDIT
. Большинству это ничего не говорит, но в этом кроется вся "тайна".EDIT
может вызвать только пользователь, только при редактировании значения ячейки непосредственно через браузер или через мобильное приложение. Т.о. ваш код работать не будет при обновлении данных через функции импорта.function runOnEdit() {
var source = SpreadsheetApp.openById('ABCD123456');
var range = source.getRangeByName('Sheet!!B26');
/**
* @type {GoogleAppsScript.Events.SheetsOnEdit}
*/
var e = {
authMode: ScriptApp.AuthMode.LIMITED,
oldValue: undefined, // ну или что хотите
range: range,
value: range.getValue(),
source: source,
triggerUid: 0,
user: Session.getActiveUser(),
};
onEdit(e);
}
=COUNTA(UNIQUE(TRANSPOSE(
SPLIT(
TEXTJOIN(
",";
1;
FILTER($B$2:$B2;EOMONTH($A$2:$A2;0)=EOMONTH($A2;0)));
", "
)
)))
var conn = Jdbc.getConnection(
'jdbc:mysql://sql4.freemysqlhosting.net:3306/sql427628?useUnicode=true&characterEncoding=UTF-8',
'sql427628', '****');
var stmt = conn.createStatement();
stmt.setMaxRows(1000);
var start = new Date();
var rs = stmt.executeQuery('select * from person');
var row = 0;
while (rs.next())
for (var col = 0; col < rs.getMetaData().getColumnCount(); col++)
console.log(rs.getString(col + 1));
rs.close();
stmt.close();
conn.close();
var MENU = [
{
caption: 'Пункт меню 1',
functionName: 'itemMenu',
},
{
caption: 'Пункт меню 2',
functionName: 'itemMenu',
},
{
caption: 'Пункт меню 3',
functionName: 'itemMenu',
},
];
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Test');
MENU.forEach(function(item, i) {
menu.addItem(item.caption, item.functionName + i);
});
menu.addToUi();
}
itemMenu
работает как-то такfunction itemMenu(e) {
var caption = e.item.caption;
var order = e.order;
Browser.msgBox(
Utilities.formatString('Был нажат %sй пункт меню: %s', order + 1, caption)
);
}
(function(self) {
MENU.forEach(function(item, i) {
self[item.functionName + i] = function() {
return self[item.functionName]({ item: item, order: i });
};
});
})(this);
if ( Value == "" ) {
к решению нижеvar COLUMNS = [5,7,10,13,16]; // Колонки, которые редактируются
function onEdit(e) {
var sheet = e.range.getSheet();
var idCol = e.range.getColumn();
// Мы на нужном листе и на нужной колонке?
if ( COLUMNS.indexOf(idCol) > -1 && sheet.getName() =='Лист1' ) {
e.range.offset(0, 1).setValue( new Date() );
}
}
.offset(0, +2)
???getDate();
- Зачем это вообще?sheet.getRange(idRow, 6).setValue( vartoday );
Чем тут offset
не угодил?/**
*
*/
function runSheet() {
var spec = ['Мой супер лист'];
var spreadsheet = SpreadsheetApp.openById(
'ABCD1234'
).copy('tmp');
spec.forEach(function(sheetName) {
var dr = spreadsheet.getSheetByName(sheetName).getDataRange();
dr.setValues(dr.getValues());
});
spreadsheet.getSheets().forEach(function(sheet) {
if (spec.indexOf(sheet.getName()) < 0) spreadsheet.deleteSheet(sheet);
});
var spreadsheetId = spreadsheet.getId();
var file = exportSpreadsheetToFile_(spreadsheetId, 'xlsx');
DriveApp.getFileById(spreadsheetId).setTrashed(true);
return file;
}
exportSpreadsheetToFile_
можно найти тут.MailApp.sendEmail({
to: "recipient@example.com",
subject: "Logos",
attachments: [runSheet().getBlob()]
});
SLIPT
кажется рациональной=IFERROR(SPLIT(REPT(B2&"|";A2);"|");"")
=ARRAYFORMULA(IFERROR(SPLIT(REPT(B2:B&"|";A2:A);"|");""))
/**
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
if (
e.range.getSheet().getName() === 'Sheet1' &&
e.range.getA1Notation() === 'M2'
)
CopyList();
}
/**
*
*/
function CopyList() {
var sss = SpreadsheetApp.openById('ID-ТАБЛИЦЫ1');
var ss = sss.getSheetByName('Sheet1');
var from = ss;
var fromValues = from.getDataRange().getValues();
var fromData = fromValues;
var tss = SpreadsheetApp.openById('ID-ТАБЛИЦЫ2');
var ts = tss.getSheetByName('Sheet2');
ts.getRange(
ts.getLastRow() + 1,
1,
fromData.length,
fromData[0].length
).setValues(fromData);
}