eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Ввод данных в несколько ячеек сразу: Ctrl+Enter в Excel и Alt+Enter в LO Calc.
Ошибка возникает, если выделено несколько диапазонов. Сообщение об ошибке переведено неточно (En: Insert into multiple selection not possible.) Как вариант: Вставить данные в несколько несмежных ячеек невозможно.
|
|
« Последнее редактирование: 26 Ноябрь 2020, 12:17 от eeigor »
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
На сегодняшний момент с учетом внесенных правок имеем: Multiple Selection Мультивыделение
Insert into multiple selection not possible Невозможно вставить в мультивыделение
This function cannot be used with multiple selections. Невозможно применить эту функцию к мультивыделению.
Можем пообсуждать термин.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Не очень понятно для «непосвящённого» (не интуитивно). Но переведено уже ближе к тексту. А текущий перевод похож на машинный. 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 »
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
обязательно несмежные диапазоны Давайте вернемся от фантазий к суровой действительности. Диапазоны смежные, но это мультивыделение, вставка блокируется. Причем, если элементы мультивыделения будут кратны скопированным ячейкам, вставка будет осуществлена
|
|
« Последнее редактирование: 26 Ноябрь 2020, 20:03 от bormant »
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
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 »
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
получить (если верить выделению цветом) диапазоны неправильной формы (не прямоугольной)? Скриншот 1. Я что-то не могу их мысленно "состыковать"... Два вертикальных выделения A1:A6,и B2:B6.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Выделил. Результат - один диапазон, и никаких проблем со вставкой. Слиты, как и говорил выше.
|
|
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
Между ними разница только тут: https://opengrok.libreoffice.org/xref/core/sc/source/ui/unoobj/cellsuno.cxx?r=bb06f513#16951695 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#91229122 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#a111ee349037459a5e0dcb0dbd4a5b61cvoid 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
Сообщений: 939
|
Результат - один диапазон, и никаких проблем со вставкой. Вон там выше было 2 примера, во втором никаких проблем со вставкой, а в первом -- проблемы со вставкой. Оба выделения получены мышкой.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
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, а через меню листа. Иначе выделения не увидите: проблема с активным дисплеем. См. скриншот. Вот такой фокус: диапазона выделено два, но как бы один... И вставка в них прекрасно работает. Напомним, что через интерфейс пользователя я не смог получить такого. Впрочем, я не проверял: может, я выделяю несколько диапазонов, но факт в том, что вставка данных в них работает. А мы начали разговор с того, что это невозможно.
|
|
« Последнее редактирование: 26 Ноябрь 2020, 21:06 от eeigor »
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Ну, кажется ясно, и я понял ваш пример. Вставить данные нельзя, если результирующее выделение непрямоугольной формы (!). Дополните прямоугольник, и всё сработает.
UPD: Пришлось проверить. При выделении мышкой выделение-таки множественное (я был неправ), достаточно нажимать клавишу Ctrl для добавления нового (смежность-несмежность роли не играет). Но если результирующее мультвыделение прямоугольной формы, проблем со вставкой нет, если непрямоугольной - ошибка вставки. Уточняем: вставка в мультивыделение невозможна, если составляющие ее диапазоны несмежны, или смежны, но выделение имеет непрямоугольную форму. Исходя из этого уточните сообщение об ошибке. Спасибо.
|
|
« Последнее редактирование: 26 Ноябрь 2020, 21:20 от eeigor »
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
Вот вам непрямоугольное. ps. Кратное и некратное (было уже) 
|
|
« Последнее редактирование: 26 Ноябрь 2020, 21:23 от bormant »
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Да, я написал чуть выше. Просто меня сбивала с толку красная рамка, обрамляющая диапазон, которая исчезала, если два диапазона смежны.
|
|
« Последнее редактирование: 26 Ноябрь 2020, 21:22 от eeigor »
|
Записан
|
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
мы начали разговор с того, что это невозможно.
Мы начали разговор с того, что перевод неправильный, не отражает проблемы. На самом деле: - раньше в мультивыделения вставка не производилась, - сейчас мультивыделение в некоторых случаях может стать препятствием для вставки. В этих случаях выводится сообщение: Insert into multiple selection not possible Невозможно вставить в мультивыделение что в целом картину отражает верно. Вероятно, есть смысл уточнить: Невозможно вставить в это мультивыделение В остальном, никакой проблемы для локализации не вижу.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 297
|
Согласен. И сам с чем-то разобрался. Маленький квест...
|
|
|
Записан
|
|
|
|
|