Calc: Как избавиться от подгонки строк при загрузке документа?

Автор eeigor, 18 февраля 2022, 13:42

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community


eeigor

А где этот параметр "Recalculation on File Load" скрыт? Не могу найти...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

economist

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

#4
Да, спасибо. Но у меня как раз стоит "Never recalculate".
В ссылке на баг проблему связывают со шрифтами... Но у меня "дефект" проявился конкретно в связи с разработкой листа с массивными формулами (поиск дубликатов в одной таблице и двойников - в разных при их взаимном сопоставлении).

Надо бы выработать стратегию поведения для данного случая.
В моём документе я отключаю автоматический пересчёт формул, иначе при добавлении строки и переходе к другой ячейке возникает задержка. Но это связано с "обилием" динамических гиперссылок в строках на другие таблицы. То есть с этим я справился. На листе под рукой кнопка, которая быстро переключает режим автопересчёта с одного на противоположный. Осталось побороть "подгонку строк" при загрузке...

Sub ToggleAutoCalculate()
Dim bEnabled As Boolean
Dim sPrompt$  'sInfo$

Rem sInfo = "Меню: Данные - Содержимое ячейки - Вычислять автоматически" & Chr(10) _
Rem & "Menu: Data - Calculate - AutoCalculate"
With Thiscomponent
bEnabled = .isAutomaticCalculationEnabled()
.enableAutomaticCalculation(Not bEnabled)
If .isAutomaticCalculationEnabled() Then
sPrompt = " ☑ Автоматический пересчёт формул включен."
Else
sPrompt = " ☐ Автоматический пересчёт формул выключен."
sPrompt = sPrompt & Chr(10) _
& Chr(10) & "F9 – пересчёт изменённых формул в текущем листе." & Chr(10) _
& "Shift+Ctrl+F9 – пересчёт всех формул на всех листах."
End If
MsgBox sPrompt, , "Автоматический пересчёт"
End With
End Sub
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#5
Здесь сразу две темы, не связанные друг с другом.

А. Пересчет формул при открытии файла.

Указанные в #3 параметры относятся к файлам формата Excel и к ODF, не сохраненных LO Calc.

Для справки: Excel пересчитывает формулы при открытии (если нет внешних ссылок и действует режим автоматического пересчета формул) в случае, если версия Excel, в которой сохранялся файл, отличается от версии Excel, в которой открывается файл. Подробнее - здесь (последние абзацы).
На мой взгляд, это разумно и могло бы также применяться в  LO Calc, если, разумеется, сохранять вычисленные значения формул.

В настоящее время формулы всегда пересчитываются при открытии .ods файла.
Владимир.

mikekaganski

Тут проблема в том, что пересчёт высот теперь не зависит от этой опции; если в файле есть строки с автовысотой, они будут пересчитаны (что само по себе баг). Казалось бы - выставь всем строкам фиксированную высоту, и всё - но второй баг о том, что такая простая вещь, как предпросмотр шрифта, даже без его реального применения - даёт сброс этого параметра, и проявление бага.
С уважением,
Михаил Каганский

eeigor

К счастью, это проявляется только при открытии документа, при сохранении - нет.
У меня 12 листов, и кроме первого, где применяется отличное от дефолтного формирование, на всех листах Arial 10, и высота всех строк выставлена по умолчанию в соответствии со стилем листа по умолчанию (Default style).

Я так понимаю в этом уже проблема (см. скриншот):
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

Но решение от @Hanya позволяет-таки загружать файл из меню LO Calc с отключенной подгонкой строк (я добавил кнопку на стандартную панель инструментов). А пересчёт формул массива (и других), как ответил Владимир, это неизбежно, в отличие от Excel.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#9
Цитата: eeigor от 18 февраля 2022, 14:24На листе под рукой кнопка, которая быстро переключает режим автопересчёта с одного на противоположный.
Тут проявился, кстати, ещё один баг, который я пока не описал (не сделал багрепорт). При повторном включении автопересчёта формул формулы массива не обновляются (у меня, во всяком случае), Recalculate (F9) тоже не даёт видимого эффекта, Recalculate Hard (Shift+Ctrl+F9) всё обновляет. Далее, когда режим автоперсчёта включен, формулы массива обновляются как и должно быть. Поэтому с листов, где, как я описал выше, осуществляется интенсивный ввод данных, я все формулы массива убрал или переписал.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#10
Мой файл загружается методом от @Hanya за 7 сек. При этом переход на лист с формулами массива отнимет ещё 9 сек. (то есть он при загрузке не обновляется).
Стандартная загрузка занимает 23 сек, причём на 8-й секунде появляется сообщение "Adapt row height". Все формулы в этом случае обновляются.
В обоих случаях само приложение Cac было загружено.

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


Edit 1: Если поставить кнопку на панель для открытия нужного файла, то в принципе это решение можно счесть удовлетворительным. Лист с формулами массива не обновится при загрузке, но, как я писал на Ask, мне это требуется не часто. Главное - быстрее загрузить и получить доступ к основным листам.

Edit 2: При выключенном автопересчёте формул макросом от @Hanya загружает примерно за 7 сек. Обновляются формулы на том листе, который будет активен после открытия файла. Если при последнем сохранении активным был "тяжёлый" лист, то время открытия существенно затягивается. Видимо, активный лист Calc всё-таки обновляет, даже если автоперсчёт формул выключен.
Второй способ по-прежнему выдал примерно тот же результат - 22 сек.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Цитата: eeigor от 18 февраля 2022, 15:08При повторном включении автопересчёта формул формулы массива не обновляются
Это - критический баг, о котором нужно сообщить как можно быстрее. Пересчет ячеек - "священная корова" электронных таблиц.
Владимир.

eeigor

#12
Хорошо.
Поставил кнопку от @Hanya на загрузку моего тяжёлого файла прямо на панель инструментов.
6 и 7 секунд (автопересчёт выключен и включен). Это существенно быстрее, чем 23 сек. Терпимо.
Но если с файлом ведётся работа, то версии и копии нужно сохранять под другими именами, не меняя исходной, на которую подцеплен макрос.

Если других вариантов нет, то это решение.
И будем ждать исправления бага с обновлением высоты строк по умолчанию.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

Цитата: eeigor от 18 февраля 2022, 13:42Cross-posting...
Заглянул на Ask - тишина (воз и ныне там). На нашем форуме быстрее можно "договориться".
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#14
Владимир, код от @hanya содержит маленький фрагмент, решающий задачу, но ведь самому написать его вряд ли получилось бы (у меня):

 ' setup
 controller = doc.createViewController("Default", args, frame)
 controller.attachModel(doc)
 doc.connectController(controller)
 frame.setComponent(controller.ComponentWindow, controller)
 controller.attachFrame(frame)
 doc.setCurrentController(controller)
 frame.getContainerWindow().setVisible(True)  'show document window


"Создайте экземпляр службы как новый документ и задайте свойство перед загрузкой файла из URL-адреса, а затем загрузите файл в существующую модель документа. После этого вид, рамка и модель соединяются друг с другом".
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community