Как сделать в Google Таблицах, чтобы если я в ячейке начинаю писать текст сверху, то при превышении 1000 символов, внизу этой ячейки автоматически начался удаляться лишний текст?
Как сделать в Google Таблицах, чтобы если я в ячейке начинаю писать текст сверху, то при превышении 1000 символов, внизу этой ячейки автоматически начался удаляться лишний текст?
Никак. Триггер изменения (onEdit или другой) срабатывает после сохранения ячейки. А, значит, это ничем не лучше, чем Ваша формула с длиной строки справа. Формула - разумный выход, к тому же она неожиданно не обрежет вводимую строку :)
P.S. Хотя можно попробовать такой финт, когда после нажатия Enter строка обрезается на 1000-м символе, а лишнее, если есть (ну не зря ж вводили эти символы!), вставляется в ячейку ниже или в иную специальную ячейку.
Никак. Триггер изменения (onEdit или другой) срабатывает после сохранения ячейки. А, значит, это ничем не лучше, чем Ваша формула с длиной строки справа. Формула - разумный выход, к тому же она неожиданно не обрежет вводимую строку :)
P.S. Хотя можно попробовать такой финт, когда после нажатия Enter строка обрезается на 1000-м символе, а лишнее, если есть (ну не зря ж вводили эти символы!), вставляется в ячейку ниже или в иную специальную ячейку.Gustav
P.S. Хотя можно попробовать такой финт, когда после нажатия Enter строка обрезается на 1000-м символе, а лишнее, если есть (ну не зря ж вводили эти символы!), вставляется в ячейку ниже или в иную специальную ячейку.
Да такой вариант и нужен. В ячейке есть текст. Я зашел, установил курсор в начале ячейке, и пишу. Нажал Enter и в конце ячейке, весь текст который превышает 1000 символов, обрезался. Можете так сделать?
(это нужно потому что в ячейке вносятся записи, на чем остановилось обобщение заказчику по текущему этапу, а старые записи по старым этапам становятся уже не актуальны, и поэтому нужно чтобы они постепенно исчезали).
P.S. Хотя можно попробовать такой финт, когда после нажатия Enter строка обрезается на 1000-м символе, а лишнее, если есть (ну не зря ж вводили эти символы!), вставляется в ячейку ниже или в иную специальную ячейку.
Да такой вариант и нужен. В ячейке есть текст. Я зашел, установил курсор в начале ячейке, и пишу. Нажал Enter и в конце ячейке, весь текст который превышает 1000 символов, обрезался. Можете так сделать?
(это нужно потому что в ячейке вносятся записи, на чем остановилось обобщение заказчику по текущему этапу, а старые записи по старым этапам становятся уже не актуальны, и поэтому нужно чтобы они постепенно исчезали).rownong27
В ячейке есть текст. Я зашел, установил курсор в начале ячейке, и пишу. Нажал Enter и в конце ячейке, весь текст который превышает 1000 символов, обрезался. Можете так сделать?
Да. Вот код, реализующий эту возможность:
[vba]
Код
function onEdit(e) { splitCellText(e.range, 1000); }
function splitCellText(theCell, theLimit) {
// если ячейка в выделении не одна - выходим без применения алгоритма if ((theCell.getValues().length * theCell.getValues()[0].length) > 1) return;
var cellText = theCell.getValue().toString(); if (cellText.length > theLimit) {
var strBeg = cellText.substr(0, theLimit); var strEnd = cellText.substr(theLimit);
// пишем обрезанную строку в ячейку theCell.setValue(strBeg);
// выводим сообщение, в котором можно выделить и скопировать обрезанный остаток и куда-нибудь вставить // (если так не надо - просто закомментируйте следующую строку) Browser.msgBox('ОСТАТОК СТРОКИ ПОСЛЕ СИМВОЛА ' +theLimit+': '+strEnd); } }
В ячейке есть текст. Я зашел, установил курсор в начале ячейке, и пишу. Нажал Enter и в конце ячейке, весь текст который превышает 1000 символов, обрезался. Можете так сделать?
Да. Вот код, реализующий эту возможность:
[vba]
Код
function onEdit(e) { splitCellText(e.range, 1000); }
function splitCellText(theCell, theLimit) {
// если ячейка в выделении не одна - выходим без применения алгоритма if ((theCell.getValues().length * theCell.getValues()[0].length) > 1) return;
var cellText = theCell.getValue().toString(); if (cellText.length > theLimit) {
var strBeg = cellText.substr(0, theLimit); var strEnd = cellText.substr(theLimit);
// пишем обрезанную строку в ячейку theCell.setValue(strBeg);
// выводим сообщение, в котором можно выделить и скопировать обрезанный остаток и куда-нибудь вставить // (если так не надо - просто закомментируйте следующую строку) Browser.msgBox('ОСТАТОК СТРОКИ ПОСЛЕ СИМВОЛА ' +theLimit+': '+strEnd); } }
Gustav, как я понял, сейчас данная функция настроена на работу по всему Листу? Как слать чтобы обработка шла только по столбцу "P", а на все остальные столбцы не распространялась (т.е. при превышении количества символов 10000 в столбце "P" после нажатия на Enter лишние символы будут удаляться, а в остальных столбах можно превышать 1000 символов и текст будет сохраняться весь)? [moder]Повторное нарушение п.5j Правил форума. Игнорирование замечаний администрации. 2 замечания и бан на 2 дня. Цитату удалил[/moder]
Gustav, как я понял, сейчас данная функция настроена на работу по всему Листу? Как слать чтобы обработка шла только по столбцу "P", а на все остальные столбцы не распространялась (т.е. при превышении количества символов 10000 в столбце "P" после нажатия на Enter лишние символы будут удаляться, а в остальных столбах можно превышать 1000 символов и текст будет сохраняться весь)? [moder]Повторное нарушение п.5j Правил форума. Игнорирование замечаний администрации. 2 замечания и бан на 2 дня. Цитату удалил[/moder]rownong27
Сообщение отредактировал _Boroda_ - Понедельник, 23.05.2016, 01:55
сейчас данная функция настроена на работу по всему Листу? Как слать чтобы обработка шла только по столбцу "P", а на все остальные столбцы не распространялась
Сейчас работает на всех листах во всех ячейках данного файла. Чтобы ограничить область действия, надо добавить соответствующие проверки в функцию onEdit: [vba]
Код
function onEdit(e) { sheet = e.range.getSheet(); if (sheet.getName() == 'Лист1') { if (e.range.getColumn() == sheet.getRange('P1').getColumn()) { splitCellText(e.range, 1000); // теперь будет работать только в ячейках колонки P листа Лист1 } } }
[/vba]
Заодно также можно упросить проверку в начале функции splitCellText: [vba]
Код
// если ячейка в выделении не одна - выходим без применения if (theCell.getNumRows() * theCell.getNumColumns() > 1) return;
// ВМЕСТО if ((theCell.getValues().length * theCell.getValues()[0].length) > 1) return;
сейчас данная функция настроена на работу по всему Листу? Как слать чтобы обработка шла только по столбцу "P", а на все остальные столбцы не распространялась
Сейчас работает на всех листах во всех ячейках данного файла. Чтобы ограничить область действия, надо добавить соответствующие проверки в функцию onEdit: [vba]
Код
function onEdit(e) { sheet = e.range.getSheet(); if (sheet.getName() == 'Лист1') { if (e.range.getColumn() == sheet.getRange('P1').getColumn()) { splitCellText(e.range, 1000); // теперь будет работать только в ячейках колонки P листа Лист1 } } }
[/vba]
Заодно также можно упросить проверку в начале функции splitCellText: [vba]
Код
// если ячейка в выделении не одна - выходим без применения if (theCell.getNumRows() * theCell.getNumColumns() > 1) return;
// ВМЕСТО if ((theCell.getValues().length * theCell.getValues()[0].length) > 1) return;