Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

27 Сентябрь 2021, 18:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Перевод: Insert into multiple selection not possible.  (Прочитано 6757 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Стартовое сообщение: 26 Ноябрь 2020, 11:03 »

Ввод данных в несколько ячеек сразу: Ctrl+Enter в Excel   и   Alt+Enter в LO Calc.

Ошибка возникает, если выделено несколько диапазонов.
Сообщение об ошибке переведено неточно (En: Insert into multiple selection not possible.)
Как вариант: Вставить данные в несколько несмежных ячеек невозможно.


* Снимок экрана от 2020-11-25 23-41-04.png (8.32 Кб, 610x152 - просмотрено 14 раз.)
« Последнее редактирование: 26 Ноябрь 2020, 12:17 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #1: 26 Ноябрь 2020, 11:57 »

На сегодняшний момент с учетом внесенных правок имеем:
Код:
Multiple Selection
Мультивыделение

Insert into multiple selection not possible
Невозможно вставить в мультивыделение

This function cannot be used with multiple selections.
Невозможно применить эту функцию к мультивыделению.

Можем пообсуждать термин.
Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #2: 26 Ноябрь 2020, 12:14 »

Не очень понятно для «непосвящённого» (не интуитивно). Но переведено уже ближе к тексту. А текущий перевод похож на машинный.
UPD:
Терминология в тему: contiguous/non-adjacent - примыкающий, граничащий и наоборот.
Если мы выделяем несколько диапазонов, и они смежные, то LO Calc автоматически объединяет их (merge; и я это наблюдаю, осваивая Calc), и мы вполне можем вставить данные в такой диапазон - он будет один (но в Excel совершенно не так). Поэтому вышеуказанные термины лучше разъясняют смысл происходящего, чем термин "мультивыделение": это обязательно несмежные диапазоны.

Ещё раз: в Excel уже выделенную ячейку можно выделить повторно, нажав клавишу Ctrl и щёлкнув по ней мышью (цвет выделения при этом изменится на более серый и ещё серее), и это будет настоящее мультивыделение. Выделил в Excel одну и ту же ячейку 5 раз; проверил значение Selection.Count. Ответ: 5.
И пусть в исходном языке (multiple selection) ключевых слов нет, смысл происходящего именно в них.

Вставить данные в несколько несмежных диапазонов невозможно
It is impossible to insert data into multiple non-contiguous ranges (non-adjacent cells)

И, кстати, в Excel нет проблем со вставкой данных в несколько несмежных диапазонов. Для LO Calc - это ограничение, и ошибка связанная с ним. Значит, и разъяснить смысл этой ошибки следует более доходчиво.
« Последнее редактирование: 26 Ноябрь 2020, 12:54 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #3: 26 Ноябрь 2020, 19:57 »

обязательно несмежные диапазоны
Давайте вернемся от фантазий к суровой действительности.
Диапазоны смежные, но это мультивыделение, вставка блокируется.
Причем, если элементы мультивыделения будут кратны скопированным ячейкам, вставка будет осуществлена


* calc.png (15.33 Кб, 372x404 - просмотрено 17 раз.)

* calc.png (9.84 Кб, 364x268 - просмотрено 16 раз.)
« Последнее редактирование: 26 Ноябрь 2020, 20:03 от bormant » Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #4: 26 Ноябрь 2020, 20:04 »

bormant, как вам удалось получить (если верить выделению цветом) диапазоны неправильной формы (не прямоугольной)? Скриншот 1.
Я что-то не могу их мысленно "состыковать"...

Выделить несколько смежных диапазонов в коде можно, конечно...
    oRanges.addRangeAddress(oRange.RangeAddress, False)  'False - значит не объединять.

Но вот беда: при выделении диапазонов мышкой у меня все диапазоны объединяются в один, как если бы выполнялся метод:
    oRanges.addRangeAddress(oRange.RangeAddress, True)  'True - значит объединять

P.S. Я осваиваю Calc. Провожу аналогию с Excel. Могу ошибаться...

UPD: Проверил ещё раз. Моя правда: всё объединяется в один, и данные, введенные в активную ячейку, вставляются методом Alt+Enter во все выделенные ячейки диапазона.

Вставить данные в несколько несмежных диапазонов невозможно
А равно как и в несколько смежных. Вопрос в том, как их, смежные, выделить мышкой?
« Последнее редактирование: 26 Ноябрь 2020, 20:21 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #5: 26 Ноябрь 2020, 20:17 »

получить (если верить выделению цветом) диапазоны неправильной формы (не прямоугольной)? Скриншот 1.
Я что-то не могу их мысленно "состыковать"...
Два вертикальных выделения A1:A6,и B2:B6.
Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #6: 26 Ноябрь 2020, 20:20 »

Выделил. Результат - один диапазон, и никаких проблем со вставкой. Слиты, как и говорил выше.
Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #7: 26 Ноябрь 2020, 20:37 »

Между ними разница только тут:
https://opengrok.libreoffice.org/xref/core/sc/source/ui/unoobj/cellsuno.cxx?r=bb06f513#1695
Код:
1695  void ScCellRangesBase::AddRange(const ScRange& rRange, const bool bMergeRanges)
1696  {
1697      if (bMergeRanges)
1698          aRanges.Join(rRange);
1699      else
1700          aRanges.push_back(rRange);
1701      RefChanged();
1702  }
1703 

Слитые -- это Join:
https://opengrok.libreoffice.org/xref/core/sc/source/ui/unoobj/cellsuno.cxx?r=bb06f513#9122
Код:
9122  void ScUniqueFormatsEntry::Join( const ScRange& rNewRange )
9123  {
9124      // Special-case handling for single range
9125 
9126      if ( eState == STATE_EMPTY )
9127      {
9128          aSingleRange = rNewRange;
9129          eState = STATE_SINGLE;
9130          return;
9131      }
9132      if ( eState == STATE_SINGLE )
9133      {
9134          if ( aSingleRange.aStart.Row() == rNewRange.aStart.Row() &&
9135               aSingleRange.aEnd.Row() == rNewRange.aEnd.Row() &&
9136               aSingleRange.aEnd.Col() + 1 == rNewRange.aStart.Col() )
9137          {
9138              aSingleRange.aEnd.SetCol( rNewRange.aEnd.Col() );
9139              return;     // still a single range
9140          }
9141 
9142          SCROW nSingleRow = aSingleRange.aStart.Row();
9143          aJoinedRanges.emplace( nSingleRow, aSingleRange );
9144          eState = STATE_COMPLEX;
9145          // continue normally
9146      }
9147 
9148      // This is called in the order of ScAttrRectIterator results.
9149      // rNewRange can only be joined with an existing entry if it's the same rows, starting in the next column.
9150      // If the old entry for the start row extends to a different end row, or ends in a different column, it
9151      // can be moved to aCompletedRanges because it can't be joined with following iterator results.
9152      // Everything happens within one sheet, so Tab can be ignored.
9153 
9154      SCROW nStartRow = rNewRange.aStart.Row();
9155      ScRowRangeHashMap::iterator aIter( aJoinedRanges.find( nStartRow ) );       // find the active entry for the start row
9156      if ( aIter != aJoinedRanges.end() )
9157      {
9158          ScRange& rOldRange = aIter->second;
9159          if ( rOldRange.aEnd.Row() == rNewRange.aEnd.Row() &&
9160               rOldRange.aEnd.Col() + 1 == rNewRange.aStart.Col() )
9161          {
9162              // extend existing range
9163              rOldRange.aEnd.SetCol( rNewRange.aEnd.Col() );
9164          }
9165          else
9166          {
9167              // move old range to aCompletedRanges, keep rNewRange for joining
9168              aCompletedRanges.push_back( rOldRange );
9169              rOldRange = rNewRange;  // replace in hash map
9170          }
9171      }
9172      else
9173      {
9174          // keep rNewRange for joining
9175          aJoinedRanges.emplace( nStartRow, rNewRange );
9176      }
9177  }

https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellRangeContainer.html#a111ee349037459a5e0dcb0dbd4a5b61c
Цитата:
void addRangeAddress(
   [in] com::sun::star::table::CellRangeAddress    aCellRangeAddress,
   [in] boolean    bMergeRanges
)      
adds the given range to the collection of cell ranges.

Parameters
aCellRangeAddress
   contains the address of the new range.
bMergeRanges
   defines how the range should be added. To merge the ranges takes more time, but the memory usage is lower.
« Последнее редактирование: 26 Ноябрь 2020, 20:43 от bormant » Записан

Автору на яд. Поддержать форум.
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #8: 26 Ноябрь 2020, 20:40 »

Результат - один диапазон, и никаких проблем со вставкой.
Вон там выше было 2 примера, во втором никаких проблем со вставкой, а в первом -- проблемы со вставкой. Оба выделения получены мышкой.
Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #9: 26 Ноябрь 2020, 20:47 »

bormant, я провел тест на примере.
Код:
Sub TestMultiSelection()
    Dim oSheet, oRanges, oRange

    oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
    oSheet = ThisComponent.CurrentController.ActiveSheet  '.Sheets.getByIndex(0)

    oRange = oSheet.getCellRangeByName("A1:A6")
    oRanges.addRangeAddress(oRange.RangeAddress, False)
    
    oRange = oSheet.getCellRangeByName("B1:B6")
    oRanges.addRangeAddress(oRange.RangeAddress, False)
    
    ThisComponent.CurrentController.select(oRanges)
    MsgBox oRanges.RangeAddressesAsString
End Sub

Комментарий. Можно создать в коде два смежных диапазона и выделить их (код выше), MsgBox покажет 2 диапазона, но на листе вставка в выделенные ячейки всё равно сработала, как если бы это был один диапазон. "Несмежность" - критична.
Заменил параметр False на True - MsgBox показала, что диапазон один, но это уже неважно.

Мы работаем через интерфейс (его и обсуждаем), и я не знаю способа выделить несколько смежных диапазонов. Ваш комментарий посмотрю внимательнее...

в первом -- проблемы со вставкой. Оба выделения получены мышкой
Дайте пошаговую инструкцию.

UPD: Вы увидите выделения, если будете выполнять макрос не из IDE, а через меню листа. Иначе выделения не увидите: проблема с активным дисплеем.
См. скриншот. Вот такой фокус: диапазона выделено два, но как бы один... И вставка в них прекрасно работает. Напомним, что через интерфейс пользователя я не смог получить такого. Впрочем, я не проверял: может, я выделяю несколько диапазонов, но факт в том, что вставка данных в них работает. А мы начали разговор с того, что это невозможно.


* Снимок экрана от 2020-11-26 20-59-31.png (84.2 Кб, 823x451 - просмотрено 13 раз.)
« Последнее редактирование: 26 Ноябрь 2020, 21:06 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #10: 26 Ноябрь 2020, 21:10 »

Ну, кажется ясно, и я понял ваш пример. Вставить данные нельзя, если результирующее выделение непрямоугольной формы (!). Дополните прямоугольник, и всё сработает.

UPD: Пришлось проверить. При выделении мышкой выделение-таки множественное (я был неправ), достаточно нажимать клавишу Ctrl для добавления нового (смежность-несмежность роли не играет). Но если результирующее мультвыделение прямоугольной формы, проблем со вставкой нет, если непрямоугольной - ошибка вставки.
Уточняем: вставка в мультивыделение невозможна, если составляющие ее диапазоны несмежны, или смежны, но выделение имеет непрямоугольную форму.
Исходя из этого уточните сообщение об ошибке.
Спасибо.
« Последнее редактирование: 26 Ноябрь 2020, 21:20 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #11: 26 Ноябрь 2020, 21:14 »

Вот вам непрямоугольное.
ps. Кратное и некратное (было уже) Подмигивающий


* calc.png (8.28 Кб, 286x264 - просмотрено 9 раз.)

* calc.png (12.76 Кб, 332x404 - просмотрено 11 раз.)
« Последнее редактирование: 26 Ноябрь 2020, 21:23 от bormant » Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #12: 26 Ноябрь 2020, 21:19 »

Да, я написал чуть выше. Просто меня сбивала с толку красная рамка, обрамляющая диапазон, которая исчезала, если два диапазона смежны.
« Последнее редактирование: 26 Ноябрь 2020, 21:22 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
bormant
Глобальный модератор
*
Offline Offline

Сообщений: 941



« Ответ #13: 26 Ноябрь 2020, 21:21 »

мы начали разговор с того, что это невозможно.
Мы начали разговор с того, что перевод неправильный, не отражает проблемы.

На самом деле:
- раньше в мультивыделения вставка не производилась,
- сейчас мультивыделение в некоторых случаях может стать препятствием для вставки. В этих случаях выводится сообщение:
Insert into multiple selection not possible
Невозможно вставить в мультивыделение

что в целом картину отражает верно.

Вероятно, есть смысл уточнить:
Невозможно вставить в это мультивыделение

В остальном, никакой проблемы для локализации не вижу.
Записан

Автору на яд. Поддержать форум.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 712



« Ответ #14: 26 Ноябрь 2020, 21:23 »

Согласен. И сам с чем-то разобрался. Маленький квест...
Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!