3 точки в конце ячейки текста клипа

#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> Таблицы: пользовательские функции

Сценарий Google Apps> Таблицы: объекты событий

Сценарий Google Apps> Sheets: Sheet.getColumnWidth

Комментарии:

1. Привет, только что протестировал ваше предложение, и расчет является хорошим приближением для размещения в ячейке. Я просто играл с -1 или -2, чтобы видеть или нет линии сетки. Большое спасибо за это подробное решение!