#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
Есть ли в скрипте Google Apps какие-либо вспомогательные функции для добавления «…» в ячейку, где текст находится в режиме «клип»?
Я имею в виду из этого:
| My sample te|
к этому:
| My sample...|
Я видел, что Google недавно внедрил в GAS стратегию переноса клипа (ссылка на API), но я ничего не вижу относительно форматирования.
Если мне нужно сделать это вручную, как я могу соотнести размер ячейки с размером текста?
Комментарии:
1. Можно ли это сделать вручную через пользовательский интерфейс?
2. Я уже генерирую этот текст с помощью скрипта приложений. Либо это может быть автоматическое форматирование из пользовательского интерфейса (своего рода условное форматирование), либо скрипт для разделения моего текста и добавления точек в соответствии с фиксированным размером ячейки.
Ответ №1:
Ответ
Для этого нет стратегии переноса, как вы упомянули, единственный способ достичь своей цели — использовать пользовательскую триггерную функцию, например onEdit(e)
, а затем изменить текущее значение ячейки, но имейте в виду, что должно быть место для хранения вашего текущего значения.
В качестве обходного пути / идеи я бы использовал функцию cell note для сохранения значения и впоследствии установил значение с 3 точками. Но это не самое лучшее решение.
Код
Чтобы обработать объект события, откройте связанный скрипт и используйте:
function onEdit(e){
let range = e.range;
let currentColumn = range.getColumn();
let currentSheet = range.getSheet();
let columnWidth = currentSheet.getColumnWidth(currentColumn);
let maxChars = Math.ceil(columnWidth / range.getFontSize()) - 1;
if (maxChars <= range.getValue().length) {
range.setNote(range.getValue());
range.setValue(range.getValue().substring(0,maxChars) '...');
}
}
Затем, чтобы восстановить текущее значение, используйте =setCurrentValue()
в ячейке:
function setCurrentValue() {
let cell = SpreadsheetApp.getActive().getActiveSheet().getCurrentCell();
cell.setValue(cell.getNote());
cell.setNote(undefined);
}
Изменения, выполненные программно, не обрабатываются onEdit(e)
событием.
Ссылка
Сценарий Google Apps> Таблицы: пользовательские функции
Комментарии:
1. Привет, только что протестировал ваше предложение, и расчет является хорошим приближением для размещения в ячейке. Я просто играл с -1 или -2, чтобы видеть или нет линии сетки. Большое спасибо за это подробное решение!