Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Высота строки: авто размер строки + задать min значение - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Высота строки: авто размер строки + задать min значение (Формулы/Formulas)
Высота строки: авто размер строки + задать min значение
Faraway Дата: Пятница, 14.12.2018, 12:36 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте. У меня не получается в гугл таблицах одни штука. Попробую детально описать проблему.
В гугл таблице есть возможность задавать высоту строки задавая либо конкретное значение (по умолчанию 21 пикс), либо установить авто высоту, т.е. высота будет такой, чтоб вместилось все что в строке.
У меня получилось в некоторых таблицах сделать так, чтоб строка была минимальной высотой 35 пикселей, но при этом, если там много текста, высота увеличивая, т.е. получается высота строки авто, но минимум 35 пикс.
Я создал комию дока и теперь у меня в доке 35 пикселей, но намертво, т.е. если текста больше чем может поместиться в 35 пикселей, строка не увеличивается в высоту, а просто прячет часть текста. Подскажите пожалуйста, как сделать чтоб было автовысота с минимумом 35 пикселей?


Сообщение отредактировал Faraway - Пятница, 14.12.2018, 12:54
 
Ответить
СообщениеЗдравствуйте. У меня не получается в гугл таблицах одни штука. Попробую детально описать проблему.
В гугл таблице есть возможность задавать высоту строки задавая либо конкретное значение (по умолчанию 21 пикс), либо установить авто высоту, т.е. высота будет такой, чтоб вместилось все что в строке.
У меня получилось в некоторых таблицах сделать так, чтоб строка была минимальной высотой 35 пикселей, но при этом, если там много текста, высота увеличивая, т.е. получается высота строки авто, но минимум 35 пикс.
Я создал комию дока и теперь у меня в доке 35 пикселей, но намертво, т.е. если текста больше чем может поместиться в 35 пикселей, строка не увеличивается в высоту, а просто прячет часть текста. Подскажите пожалуйста, как сделать чтоб было автовысота с минимумом 35 пикселей?

Автор - Faraway
Дата добавления - 14.12.2018 в 12:36
Faraway Дата: Пятница, 14.12.2018, 13:12 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Прикрутил ТАБЛИЧКУ, чтоб была возможность попробовать и увидеть то, о чем я пишу.
Там есть желтоватые поля - они такие, как мне надо, т.е. минимальная высота 35, максимальная - зависит от количества строк.
Зеленоватые поля - там жестко указано что высота 35 пикселей, если больше текста, то он просто прячется. А если снова переключить в режим автовысоты, то размер уменьшиться до 21 пикселя, а надо 35.
Хочется понять, как именно осознанно сделать желаемую настройку не используя инструмент "копирование форматирования" (валик).
Сейчас вижу как выход, делать именно копирование таблицы с желаемой настройкой и тогда уже с нее копировать формат, но это не выход, потому что надо указать высоту строки 30, а имеется только таблица с 35.
В общем, если кто то владеет данным мастерством, научите пожалуйста сделать из "зеленых" строк такие, которые ведут себя как "желтые"


Сообщение отредактировал Faraway - Пятница, 14.12.2018, 13:40
 
Ответить
СообщениеПрикрутил ТАБЛИЧКУ, чтоб была возможность попробовать и увидеть то, о чем я пишу.
Там есть желтоватые поля - они такие, как мне надо, т.е. минимальная высота 35, максимальная - зависит от количества строк.
Зеленоватые поля - там жестко указано что высота 35 пикселей, если больше текста, то он просто прячется. А если снова переключить в режим автовысоты, то размер уменьшиться до 21 пикселя, а надо 35.
Хочется понять, как именно осознанно сделать желаемую настройку не используя инструмент "копирование форматирования" (валик).
Сейчас вижу как выход, делать именно копирование таблицы с желаемой настройкой и тогда уже с нее копировать формат, но это не выход, потому что надо указать высоту строки 30, а имеется только таблица с 35.
В общем, если кто то владеет данным мастерством, научите пожалуйста сделать из "зеленых" строк такие, которые ведут себя как "желтые"

Автор - Faraway
Дата добавления - 14.12.2018 в 13:12
Gustav Дата: Пятница, 14.12.2018, 16:17 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1655
Репутация: 672 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Можно придать такое поведение с помощью небольшого скрипта:
[vba]
Код
function onEdit(e) {
  var sheet = e.range.getSheet();
  var row = e.range.getRow();
  sheet.autoResizeRows(row, 1);
  sheet.setRowHeight(row, Math.max(sheet.getRowHeight(row), 35));
}
[/vba]


Мой tip box - яд 41001663842605
 
Ответить
СообщениеМожно придать такое поведение с помощью небольшого скрипта:
[vba]
Код
function onEdit(e) {
  var sheet = e.range.getSheet();
  var row = e.range.getRow();
  sheet.autoResizeRows(row, 1);
  sheet.setRowHeight(row, Math.max(sheet.getRowHeight(row), 35));
}
[/vba]

Автор - Gustav
Дата добавления - 14.12.2018 в 16:17
Faraway Дата: Суббота, 15.12.2018, 09:47 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Излишнее цитирование удалено администрацией - это нарушение п.5j Правил форума
Спасибо. Надо попробовать. Вот только я никогда не имел дело со скриптами...
Получается, то что у меня получилось когда то сделать так как сделал - это баг?
Еще вопрос, а можно вот это дело скриптом не ко всему документу присвоить, а только конкретным листам, и даже конкретным строкам, например верхние 5 строк пусть бы были по умолчанию, а все остальное уже скрипт пусть форматирует? Как вариант, лучше всего было бы если бы можно было самому прописывать с какой до какой строки так надо делать.


Сообщение отредактировал Faraway - Суббота, 15.12.2018, 09:52
 
Ответить
СообщениеИзлишнее цитирование удалено администрацией - это нарушение п.5j Правил форума
Спасибо. Надо попробовать. Вот только я никогда не имел дело со скриптами...
Получается, то что у меня получилось когда то сделать так как сделал - это баг?
Еще вопрос, а можно вот это дело скриптом не ко всему документу присвоить, а только конкретным листам, и даже конкретным строкам, например верхние 5 строк пусть бы были по умолчанию, а все остальное уже скрипт пусть форматирует? Как вариант, лучше всего было бы если бы можно было самому прописывать с какой до какой строки так надо делать.

Автор - Faraway
Дата добавления - 15.12.2018 в 09:47
Faraway Дата: Суббота, 15.12.2018, 10:00 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Не знаю, может я что то не так делаю...
Инструменты > редактор скриптов
то что там было (2 строчки начальные) удалил, вставил ваш скрипт, жму запустить и мне выдает ошибку:
TypeError: Не удается прочитать свойство "range" объекта undefined. (строка 2, файл Код)
В самом доке при вводе данных, строка сначала уменьшается до 21 на мгновение, а потом становится указанной высотой либо больше, если текста много, не критично, но так и должно быть?

UPD
Ха-ха!
Вставляю данный скрипт, изменяю 35 на желаемые 30, запускаю его, в первой строке ввожу текст так, чтоб он занимал более 30 пикселей, скрипт растягивает строку. Далее удаляю скрипт... и данная строка становится желаемого форматирования, т.е. без скрипта авторазмер + минимум высота 30!
Строки которые не были скриптом растянуты, остались со стандартным форматированием. Вот, пока решение через одно место, но есть, могу применять куда хочу, как хочу... Спасибо.
Но если все же есть решение без скрипта,а я именно в первый раз сделал без скрипта как то, все делал как всегда, просто указал размер в настройках и оно само все сделалось как надо. Значит если не баг, то как то все же возможно.


Сообщение отредактировал Faraway - Суббота, 15.12.2018, 10:38
 
Ответить
СообщениеНе знаю, может я что то не так делаю...
Инструменты > редактор скриптов
то что там было (2 строчки начальные) удалил, вставил ваш скрипт, жму запустить и мне выдает ошибку:
TypeError: Не удается прочитать свойство "range" объекта undefined. (строка 2, файл Код)
В самом доке при вводе данных, строка сначала уменьшается до 21 на мгновение, а потом становится указанной высотой либо больше, если текста много, не критично, но так и должно быть?

UPD
Ха-ха!
Вставляю данный скрипт, изменяю 35 на желаемые 30, запускаю его, в первой строке ввожу текст так, чтоб он занимал более 30 пикселей, скрипт растягивает строку. Далее удаляю скрипт... и данная строка становится желаемого форматирования, т.е. без скрипта авторазмер + минимум высота 30!
Строки которые не были скриптом растянуты, остались со стандартным форматированием. Вот, пока решение через одно место, но есть, могу применять куда хочу, как хочу... Спасибо.
Но если все же есть решение без скрипта,а я именно в первый раз сделал без скрипта как то, все делал как всегда, просто указал размер в настройках и оно само все сделалось как надо. Значит если не баг, то как то все же возможно.

Автор - Faraway
Дата добавления - 15.12.2018 в 10:00
Gustav Дата: Суббота, 15.12.2018, 15:46 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1655
Репутация: 672 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Вставляю данный скрипт, изменяю 35 на желаемые 30, запускаю его, в первой строке ввожу текст так, чтоб он занимал более 30 пикселей, скрипт растягивает строку. Далее удаляю скрипт... и данная строка становится желаемого форматирования, т.е. без скрипта авторазмер + минимум высота 30!

И правда! Сначала не очень поверил, но уже несколько раз проверил - и это так! Прикольно, будем знать.

P.S. Заметил, что достаточно создать одну строку нужного формата - на любом листе файла (возможно, каком-то специальном служебном, отведенном под эти цели). И далее формат этой строки можно копировать со специальной вставкой "только формат" на любую строку любого листа того же файла. И даже распространять в другие файлы, предварительно скопировав в них подобный служебный лист с заготовленным форматированием. Так что формулировка "через одно место" очень даже хорошо отражает суть подобных операций - в одном месте создаем формат, и далее во многие места его копируем :)


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Суббота, 15.12.2018, 18:29
 
Ответить
Сообщение
Вставляю данный скрипт, изменяю 35 на желаемые 30, запускаю его, в первой строке ввожу текст так, чтоб он занимал более 30 пикселей, скрипт растягивает строку. Далее удаляю скрипт... и данная строка становится желаемого форматирования, т.е. без скрипта авторазмер + минимум высота 30!

И правда! Сначала не очень поверил, но уже несколько раз проверил - и это так! Прикольно, будем знать.

P.S. Заметил, что достаточно создать одну строку нужного формата - на любом листе файла (возможно, каком-то специальном служебном, отведенном под эти цели). И далее формат этой строки можно копировать со специальной вставкой "только формат" на любую строку любого листа того же файла. И даже распространять в другие файлы, предварительно скопировав в них подобный служебный лист с заготовленным форматированием. Так что формулировка "через одно место" очень даже хорошо отражает суть подобных операций - в одном месте создаем формат, и далее во многие места его копируем :)

Автор - Gustav
Дата добавления - 15.12.2018 в 15:46
Faraway Дата: Понедельник, 17.12.2018, 15:13 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Та да, так и есть. А можете переделать скрипт под какую то конкретную строку на конкретном листе?
Ну к примеру сделать чтоб на листе с названием "формат" скрипт поменял форматирование 3, 4 и 5 стороки?
И еще, было бы не плохо указать максимум, т.е. например не более 150 пикселей чтоб растягивалось, так можно?

Копировать формат то можно, но например поменять минимальную высоту можно только с помощью скрипта.


Сообщение отредактировал Faraway - Понедельник, 17.12.2018, 15:20
 
Ответить
СообщениеТа да, так и есть. А можете переделать скрипт под какую то конкретную строку на конкретном листе?
Ну к примеру сделать чтоб на листе с названием "формат" скрипт поменял форматирование 3, 4 и 5 стороки?
И еще, было бы не плохо указать максимум, т.е. например не более 150 пикселей чтоб растягивалось, так можно?

Копировать формат то можно, но например поменять минимальную высоту можно только с помощью скрипта.

Автор - Faraway
Дата добавления - 17.12.2018 в 15:13
Gustav Дата: Среда, 19.12.2018, 17:57 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1655
Репутация: 672 ±
Замечаний: 0% ±

начинал с Excel 4.0...
И еще, было бы не плохо указать максимум, т.е. например не более 150 пикселей чтоб растягивалось, так можно?

Нет, так нельзя.

А можете переделать скрипт под какую то конкретную строку на конкретном листе?
Ну к примеру сделать чтоб на листе с названием "формат" скрипт поменял форматирование 3, 4 и 5 стороки?

Переделал. Скрипт ниже форматирует выбранные строки на ЛЮБОМ листе файла, АКТИВНОМ перед выполнением скрипта. Минимальная высота запрашивается через inputBox во время выполнения.

Выбор строк происходит по текущему выделению, т.е. форматируются все строки, "проходящие" через текущее выделение. Например, выделен диапазон C3:D5 - будут отформатированы все строки, его пересекающие, т.е. как раз 3,4,5.

Можно задавать несколько несмежных диапазонов, выделяя их мышкой при нажатой клавише Ctrl. Скрипт обработает все строки, которые так или иначе проходят через эти диапазоны.

Для удобного запуска скрипта в верхнее меню добавлен пользовательский пункт "МОЁ МЕНЮ" (с соответствующим подпунктом). Оно появится либо автоматически после перезагрузки файла, либо после принудительного запуска функции onOpen.

[vba]
Код
function onOpen() {  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('МОЁ МЕНЮ')
  .addItem('Настроить высоту строк по текущему выделению', 'setManyRowsAutoresizeAndRowheight')
  .addToUi();
}

function setManyRowsAutoresizeAndRowheight() {

  // прием от пользователя минимальной высоты строки
  var minHeight = Browser.inputBox("Введите минимальную высоту строки при автоподборе в пикс.:");
  if (minHeight == "cancel") {
    Browser.msgBox("Пользователь отказался от продолжения.");
    return;
  }
  if (isNaN(minHeight)) {
    Browser.msgBox("Введенное значение не является числом.");
    return;
  }
  minHeight = Number(minHeight);
  if (minHeight < 2 || minHeight > 2000) {
    Browser.msgBox("Высота строки должна составлять от 2 до 2000 пикс.");
    return;
  }  
   
  // получаем список выделенных диапазонов (в частном случае состоящий из одного диапазона)
  var sheet = SpreadsheetApp.getActiveSheet();
  var activeRangeList = sheet.getActiveRangeList();
  
  // формирование массива номеров строк - во время перебора списка диапазонов
  var rows = [];
  activeRangeList.getRanges().forEach(function(rng,i,a) {
    for(var i=rng.getRow(); i<rng.getRow()+rng.getNumRows(); i++) { rows.push( String(i) ) };
  });

  // оставляем уникальные номера строки
  rows = unique(rows).map(function(row) { return Number(row) });
  
  // сортируем массив уникальных (для красоты и порядка)
  rows.sort(function(a, b) { return a-b });  
  
  // форматируем строчки по одной
  rows.forEach(function(row) {
    sheet.autoResizeRows(row, 1);
    sheet.setRowHeight(row, Math.max(sheet.getRowHeight(row), minHeight));   
  });
  // и даем изменениям завершиться
  SpreadsheetApp.flush();
  
  // информируем пользователя
  Browser.msgBox("Обработка была выполнена для строк: "+rows);
}

// (с) https://learn.javascript.ru/task/array-unique
function unique(arr) {
  var obj = {};
  
  for (var i = 0; i < arr.length; i++) {
    var str = arr[i];
    obj[str] = true; // запомнить строку в виде свойства объекта
  }
  
  return Object.keys(obj); // или собрать ключи перебором для IE8-
}
[/vba]


Мой tip box - яд 41001663842605
 
Ответить
Сообщение
И еще, было бы не плохо указать максимум, т.е. например не более 150 пикселей чтоб растягивалось, так можно?

Нет, так нельзя.

А можете переделать скрипт под какую то конкретную строку на конкретном листе?
Ну к примеру сделать чтоб на листе с названием "формат" скрипт поменял форматирование 3, 4 и 5 стороки?

Переделал. Скрипт ниже форматирует выбранные строки на ЛЮБОМ листе файла, АКТИВНОМ перед выполнением скрипта. Минимальная высота запрашивается через inputBox во время выполнения.

Выбор строк происходит по текущему выделению, т.е. форматируются все строки, "проходящие" через текущее выделение. Например, выделен диапазон C3:D5 - будут отформатированы все строки, его пересекающие, т.е. как раз 3,4,5.

Можно задавать несколько несмежных диапазонов, выделяя их мышкой при нажатой клавише Ctrl. Скрипт обработает все строки, которые так или иначе проходят через эти диапазоны.

Для удобного запуска скрипта в верхнее меню добавлен пользовательский пункт "МОЁ МЕНЮ" (с соответствующим подпунктом). Оно появится либо автоматически после перезагрузки файла, либо после принудительного запуска функции onOpen.

[vba]
Код
function onOpen() {  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('МОЁ МЕНЮ')
  .addItem('Настроить высоту строк по текущему выделению', 'setManyRowsAutoresizeAndRowheight')
  .addToUi();
}

function setManyRowsAutoresizeAndRowheight() {

  // прием от пользователя минимальной высоты строки
  var minHeight = Browser.inputBox("Введите минимальную высоту строки при автоподборе в пикс.:");
  if (minHeight == "cancel") {
    Browser.msgBox("Пользователь отказался от продолжения.");
    return;
  }
  if (isNaN(minHeight)) {
    Browser.msgBox("Введенное значение не является числом.");
    return;
  }
  minHeight = Number(minHeight);
  if (minHeight < 2 || minHeight > 2000) {
    Browser.msgBox("Высота строки должна составлять от 2 до 2000 пикс.");
    return;
  }  
   
  // получаем список выделенных диапазонов (в частном случае состоящий из одного диапазона)
  var sheet = SpreadsheetApp.getActiveSheet();
  var activeRangeList = sheet.getActiveRangeList();
  
  // формирование массива номеров строк - во время перебора списка диапазонов
  var rows = [];
  activeRangeList.getRanges().forEach(function(rng,i,a) {
    for(var i=rng.getRow(); i<rng.getRow()+rng.getNumRows(); i++) { rows.push( String(i) ) };
  });

  // оставляем уникальные номера строки
  rows = unique(rows).map(function(row) { return Number(row) });
  
  // сортируем массив уникальных (для красоты и порядка)
  rows.sort(function(a, b) { return a-b });  
  
  // форматируем строчки по одной
  rows.forEach(function(row) {
    sheet.autoResizeRows(row, 1);
    sheet.setRowHeight(row, Math.max(sheet.getRowHeight(row), minHeight));   
  });
  // и даем изменениям завершиться
  SpreadsheetApp.flush();
  
  // информируем пользователя
  Browser.msgBox("Обработка была выполнена для строк: "+rows);
}

// (с) https://learn.javascript.ru/task/array-unique
function unique(arr) {
  var obj = {};
  
  for (var i = 0; i < arr.length; i++) {
    var str = arr[i];
    obj[str] = true; // запомнить строку в виде свойства объекта
  }
  
  return Object.keys(obj); // или собрать ключи перебором для IE8-
}
[/vba]

Автор - Gustav
Дата добавления - 19.12.2018 в 17:57
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Высота строки: авто размер строки + задать min значение (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!